]> Cypherpunks repositories - gostls13.git/commitdiff
all: delete C libraries and cmd/dist code that builds them
authorRuss Cox <rsc@golang.org>
Sat, 28 Feb 2015 19:00:44 +0000 (14:00 -0500)
committerRuss Cox <rsc@golang.org>
Sun, 1 Mar 2015 00:40:23 +0000 (00:40 +0000)
Change-Id: Ic66243674ac1dbf829c7523005e33611cc89ac83
Reviewed-on: https://go-review.googlesource.com/6362
Reviewed-by: Rob Pike <r@golang.org>
137 files changed:
include/README [deleted file]
include/ar.h [deleted file]
include/bio.h [deleted file]
include/fmt.h [deleted file]
include/libc.h [deleted file]
include/link.h [deleted file]
include/plan9/386/u.h [deleted file]
include/plan9/amd64/u.h [deleted file]
include/plan9/ar.h [deleted file]
include/plan9/arm/u.h [deleted file]
include/plan9/bio.h [deleted file]
include/plan9/errno.h [deleted file]
include/plan9/fmt.h [deleted file]
include/plan9/libc.h [deleted file]
include/plan9/link.h [deleted file]
include/plan9/mklibc.rc [deleted file]
include/plan9/stdarg.h [deleted file]
include/plan9/utf.h [deleted file]
include/u.h [deleted file]
include/utf.h [deleted file]
src/cmd/dist/build.go
src/lib9/Makefile [deleted file]
src/lib9/_exits.c [deleted file]
src/lib9/_p9dir.c [deleted file]
src/lib9/atoi.c [deleted file]
src/lib9/await.c [deleted file]
src/lib9/cleanname.c [deleted file]
src/lib9/create.c [deleted file]
src/lib9/ctime.c [deleted file]
src/lib9/dirfstat.c [deleted file]
src/lib9/dirfwstat.c [deleted file]
src/lib9/dirstat.c [deleted file]
src/lib9/dirwstat.c [deleted file]
src/lib9/dup.c [deleted file]
src/lib9/errstr.c [deleted file]
src/lib9/exec.c [deleted file]
src/lib9/execl.c [deleted file]
src/lib9/exitcode.c [deleted file]
src/lib9/exits.c [deleted file]
src/lib9/flag.c [deleted file]
src/lib9/fmt/charstod.c [deleted file]
src/lib9/fmt/dofmt.c [deleted file]
src/lib9/fmt/dorfmt.c [deleted file]
src/lib9/fmt/errfmt.c [deleted file]
src/lib9/fmt/fltfmt.c [deleted file]
src/lib9/fmt/fmt.c [deleted file]
src/lib9/fmt/fmtdef.h [deleted file]
src/lib9/fmt/fmtfd.c [deleted file]
src/lib9/fmt/fmtfdflush.c [deleted file]
src/lib9/fmt/fmtlocale.c [deleted file]
src/lib9/fmt/fmtlock.c [deleted file]
src/lib9/fmt/fmtnull.c [deleted file]
src/lib9/fmt/fmtprint.c [deleted file]
src/lib9/fmt/fmtquote.c [deleted file]
src/lib9/fmt/fmtrune.c [deleted file]
src/lib9/fmt/fmtstr.c [deleted file]
src/lib9/fmt/fmtvprint.c [deleted file]
src/lib9/fmt/fprint.c [deleted file]
src/lib9/fmt/nan64.c [deleted file]
src/lib9/fmt/pow10.c [deleted file]
src/lib9/fmt/print.c [deleted file]
src/lib9/fmt/seprint.c [deleted file]
src/lib9/fmt/smprint.c [deleted file]
src/lib9/fmt/snprint.c [deleted file]
src/lib9/fmt/sprint.c [deleted file]
src/lib9/fmt/strtod.c [deleted file]
src/lib9/fmt/test.c [deleted file]
src/lib9/fmt/vfprint.c [deleted file]
src/lib9/fmt/vseprint.c [deleted file]
src/lib9/fmt/vsmprint.c [deleted file]
src/lib9/fmt/vsnprint.c [deleted file]
src/lib9/fmtlock2.c [deleted file]
src/lib9/getenv.c [deleted file]
src/lib9/getfields.c [deleted file]
src/lib9/getwd.c [deleted file]
src/lib9/goos.c [deleted file]
src/lib9/jmp.c [deleted file]
src/lib9/main.c [deleted file]
src/lib9/math_darwin_arm.c [deleted file]
src/lib9/nan.c [deleted file]
src/lib9/notify.c [deleted file]
src/lib9/nulldir.c [deleted file]
src/lib9/open.c [deleted file]
src/lib9/readn.c [deleted file]
src/lib9/rfork.c [deleted file]
src/lib9/run_plan9.c [deleted file]
src/lib9/run_unix.c [deleted file]
src/lib9/run_windows.c [deleted file]
src/lib9/seek.c [deleted file]
src/lib9/strecpy.c [deleted file]
src/lib9/sysfatal.c [deleted file]
src/lib9/tempdir_plan9.c [deleted file]
src/lib9/tempdir_unix.c [deleted file]
src/lib9/tempdir_windows.c [deleted file]
src/lib9/time.c [deleted file]
src/lib9/tokenize.c [deleted file]
src/lib9/utf/Makefile [deleted file]
src/lib9/utf/mkrunetype.c [deleted file]
src/lib9/utf/rune.c [deleted file]
src/lib9/utf/runetype.c [deleted file]
src/lib9/utf/runetypebody-6.3.0.h [deleted file]
src/lib9/utf/utf.h [deleted file]
src/lib9/utf/utfdef.h [deleted file]
src/lib9/utf/utfecpy.c [deleted file]
src/lib9/utf/utflen.c [deleted file]
src/lib9/utf/utfnlen.c [deleted file]
src/lib9/utf/utfrrune.c [deleted file]
src/lib9/utf/utfrune.c [deleted file]
src/lib9/utf/utfutf.c [deleted file]
src/lib9/win.h [deleted file]
src/lib9/windows.c [deleted file]
src/libbio/Makefile [deleted file]
src/libbio/bbuffered.c [deleted file]
src/libbio/bfildes.c [deleted file]
src/libbio/bflush.c [deleted file]
src/libbio/bgetc.c [deleted file]
src/libbio/bgetd.c [deleted file]
src/libbio/bgetrune.c [deleted file]
src/libbio/binit.c [deleted file]
src/libbio/boffset.c [deleted file]
src/libbio/bprint.c [deleted file]
src/libbio/bputc.c [deleted file]
src/libbio/bputrune.c [deleted file]
src/libbio/brdline.c [deleted file]
src/libbio/brdstr.c [deleted file]
src/libbio/bread.c [deleted file]
src/libbio/bseek.c [deleted file]
src/libbio/bwrite.c [deleted file]
src/liblink/Makefile [deleted file]
src/liblink/arch.c [deleted file]
src/liblink/data.c [deleted file]
src/liblink/go.c [deleted file]
src/liblink/ld.c [deleted file]
src/liblink/objfile.c [deleted file]
src/liblink/pcln.c [deleted file]
src/liblink/sym.c [deleted file]
src/make.rc

diff --git a/include/README b/include/README
deleted file mode 100644 (file)
index b8fb523..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-The header files under this directory are strictly internal to the gc
-toolchain, so please don't copy them to the system include file
-directory (/usr/include, /usr/local/include, etc.)
-
-Also note that they must be kept as is in $GOROOT/include, or cmd/dist
-will malfunction.
diff --git a/include/ar.h b/include/ar.h
deleted file mode 100644 (file)
index 3509417..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-// Inferno utils/include/ar.h
-// http://code.google.com/p/inferno-os/source/browse/utils/include/ar.h
-//
-//     Copyright © 1994-1999 Lucent Technologies Inc.  All rights reserved.
-//     Portions Copyright © 1995-1997 C H Forsyth (forsyth@terzarima.net)
-//     Portions Copyright © 1997-1999 Vita Nuova Limited
-//     Portions Copyright © 2000-2007 Vita Nuova Holdings Limited (www.vitanuova.com)
-//     Portions Copyright © 2004,2006 Bruce Ellis
-//     Portions Copyright © 2005-2007 C H Forsyth (forsyth@terzarima.net)
-//     Revisions Copyright © 2000-2007 Lucent Technologies Inc. and others
-//     Portions Copyright © 2009 The Go Authors.  All rights reserved.
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-enum {
-       SARMAG = 8,
-       SARNAME = 16,
-       SAR_HDR = 16+44,
-};
-
-#define        ARMAG   "!<arch>\n"
-#define        ARFMAG  "`\n"
-/*c2go
-char ARMAG[] = "!<arch>\n";
-char ARFMAG[] = "`\n";
-*/
-
-typedef struct ArHdr ArHdr;
-struct ArHdr
-{
-       char    name[SARNAME];
-       char    date[12];
-       char    uid[6];
-       char    gid[6];
-       char    mode[8];
-       char    size[10];
-       char    fmag[2];
-};
diff --git a/include/bio.h b/include/bio.h
deleted file mode 100644 (file)
index 982b881..0000000
+++ /dev/null
@@ -1,144 +0,0 @@
-/*
-http://code.google.com/p/inferno-os/source/browse/include/bio.h
-
-       Copyright © 1994-1999 Lucent Technologies Inc.  All rights reserved.
-       Revisions Copyright © 2000-2007 Vita Nuova Holdings Limited (www.vitanuova.com).  All rights reserved.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-*/
-
-#ifndef _BIO_H_
-#define _BIO_H_ 1
-#if defined(__cplusplus)
-extern "C" {
-#endif
-
-#ifdef AUTOLIB
-AUTOLIB(bio)
-#endif
-
-typedef        struct  Biobuf  Biobuf;
-
-enum
-{
-       Bsize           = 8*1024,
-       Bungetsize      = 4,            /* space for ungetc */
-       Bmagic          = 0x314159,
-       Beof            = -1,
-       Bbad            = -2,
-
-       Binactive       = 0,            /* states */
-       Bractive,
-       Bwactive,
-       Bracteof,
-
-       Bend
-};
-
-struct Biobuf
-{
-       int     icount;         /* neg num of bytes at eob */
-       int     ocount;         /* num of bytes at bob */
-       int     rdline;         /* num of bytes after rdline */
-       int     runesize;       /* num of bytes of last getrune */
-       int     state;          /* r/w/inactive */
-       int     fid;            /* open file */
-       int     flag;           /* magic if malloc'ed */
-       vlong   offset;         /* offset of buffer in file */
-       int     bsize;          /* size of buffer */
-       unsigned char*  bbuf;           /* pointer to beginning of buffer */
-       unsigned char*  ebuf;           /* pointer to end of buffer */
-       unsigned char*  gbuf;           /* pointer to good data in buf */
-       unsigned char   b[Bungetsize+Bsize];
-};
-
-/*
- * These macros get 1-, 2-, and 4-byte integer values by reading the
- * next few bytes in little-endian order.
- */
-#define        BGETC(bp)\
-       ((bp)->icount?(int)((bp)->ebuf[(bp)->icount++]):Bgetc((bp)))
-#define        BGETLE2(bp)\
-       ((bp)->icount<=-2?((bp)->icount+=2,((bp)->ebuf[(bp)->icount-2])|((bp)->ebuf[(bp)->icount-1]<<8)):Bgetle2((bp)))
-#define        BGETLE4(bp)\
-       (int)((bp)->icount<=-4?((bp)->icount+=4,((bp)->ebuf[(bp)->icount-4])|((bp)->ebuf[(bp)->icount-3]<<8)|((bp)->ebuf[(bp)->icount-2]<<16)|((uint32)(bp)->ebuf[(bp)->icount-1]<<24)):Bgetle4((bp)))
-
-/*
- * These macros put 1-, 2-, and 4-byte integer values by writing the
- * next few bytes in little-endian order.
- */
-#define        BPUTC(bp,c)\
-       ((bp)->ocount?(bp)->ebuf[(bp)->ocount++]=(unsigned char)(c),0:Bputc((bp),(c)))
-#define        BPUTLE2(bp,c)\
-       ((bp)->ocount<=-2?(bp)->ocount+=2,(bp)->ebuf[(bp)->ocount-2]=(unsigned char)(c),(bp)->ebuf[(bp)->ocount-1]=(unsigned char)(c>>8),0:Bputle2((bp),(c)))
-#define        BPUTLE4(bp,c)\
-       ((bp)->ocount<=-4?(bp)->ocount+=4,(bp)->ebuf[(bp)->ocount-4]=(unsigned char)(c),(bp)->ebuf[(bp)->ocount-3]=(unsigned char)(c>>8),(bp)->ebuf[(bp)->ocount-2]=(unsigned char)(c>>16),(bp)->ebuf[(bp)->ocount-1]=(unsigned char)(c>>24),0:Bputle4((bp),(c)))
-
-#define        BOFFSET(bp)\
-       (((bp)->state==Bractive)?\
-               (bp)->offset + (bp)->icount:\
-       (((bp)->state==Bwactive)?\
-               (bp)->offset + ((bp)->bsize + (bp)->ocount):\
-               -1))
-#define        BLINELEN(bp)\
-       (bp)->rdline
-#define        BFILDES(bp)\
-       (bp)->fid
-
-int    Bbuffered(Biobuf*);
-Biobuf*        Bfdopen(int, int);
-int    Bfildes(Biobuf*);
-int    Bflush(Biobuf*);
-int    Bgetc(Biobuf*);
-int    Bgetle2(Biobuf*);
-int    Bgetle4(Biobuf*);
-int    Bgetd(Biobuf*, double*);
-long   Bgetrune(Biobuf*);
-int    Binit(Biobuf*, int, int);
-int    Binits(Biobuf*, int, int, unsigned char*, int);
-int    Blinelen(Biobuf*);
-vlong  Boffset(Biobuf*);
-Biobuf*        Bopen(char*, int);
-int    Bprint(Biobuf*, char*, ...);
-int    Bputc(Biobuf*, int);
-int    Bputle2(Biobuf*, int);
-int    Bputle4(Biobuf*, int);
-int    Bputrune(Biobuf*, long);
-void*  Brdline(Biobuf*, int);
-char*  Brdstr(Biobuf*, int, int);
-long   Bread(Biobuf*, void*, long);
-vlong  Bseek(Biobuf*, vlong, int);
-int    Bterm(Biobuf*);
-int    Bungetc(Biobuf*);
-int    Bungetrune(Biobuf*);
-long   Bwrite(Biobuf*, void*, long);
-int    Bvprint(Biobuf*, char*, va_list);
-/*c2go
-int    BGETC(Biobuf*);
-int    BGETLE2(Biobuf*);
-int    BGETLE4(Biobuf*);
-int    BPUTC(Biobuf*, int);
-int    BPUTLE2(Biobuf*, int);
-int    BPUTLE4(Biobuf*, int);
-*/
-
-#if defined(__cplusplus)
-}
-#endif
-#endif
diff --git a/include/fmt.h b/include/fmt.h
deleted file mode 100644 (file)
index 2280f25..0000000
+++ /dev/null
@@ -1,116 +0,0 @@
-#ifndef _FMT_H_
-#define _FMT_H_ 1
-#if defined(__cplusplus)
-extern "C" {
-#endif
-/*
- * The authors of this software are Rob Pike and Ken Thompson.
- *              Copyright (c) 2002 by Lucent Technologies.
- * Permission to use, copy, modify, and distribute this software for any
- * purpose without fee is hereby granted, provided that this entire notice
- * is included in all copies of any software which is or includes a copy
- * or modification of this software and in all copies of the supporting
- * documentation for such software.
- * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED
- * WARRANTY.  IN PARTICULAR, NEITHER THE AUTHORS NOR LUCENT TECHNOLOGIES MAKE ANY
- * REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY
- * OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE.
- */
-
-#include <stdarg.h>
-#include <utf.h>
-
-typedef struct Fmt     Fmt;
-struct Fmt{
-       unsigned char   runes;          /* output buffer is runes or chars? */
-       void    *start;                 /* of buffer */
-       void    *to;                    /* current place in the buffer */
-       void    *stop;                  /* end of the buffer; overwritten if flush fails */
-       int     (*flush)(Fmt *);        /* called when to == stop */
-       void    *farg;                  /* to make flush a closure */
-       int     nfmt;                   /* num chars formatted so far */
-       va_list args;                   /* args passed to dofmt */
-       Rune    r;                      /* % format Rune */
-       int     width;
-       int     prec;
-       unsigned long   flags;
-       char    *decimal;       /* decimal point; cannot be "" */
-
-       /* For %'d */
-       char *thousands;        /* separator for thousands */
-
-       /*
-        * Each char is an integer indicating #digits before next separator. Values:
-        *      \xFF: no more grouping (or \x7F; defined to be CHAR_MAX in POSIX)
-        *      \x00: repeat previous indefinitely
-        *      \x**: count that many
-        */
-       char    *grouping;              /* descriptor of separator placement */
-};
-
-enum{
-       FmtWidth        = 1,
-       FmtLeft         = FmtWidth << 1,
-       FmtPrec         = FmtLeft << 1,
-       FmtSharp        = FmtPrec << 1,
-       FmtSpace        = FmtSharp << 1,
-       FmtSign         = FmtSpace << 1,
-       FmtApost                = FmtSign << 1,
-       FmtZero         = FmtApost << 1,
-       FmtUnsigned     = FmtZero << 1,
-       FmtShort        = FmtUnsigned << 1,
-       FmtLong         = FmtShort << 1,
-       FmtVLong        = FmtLong << 1,
-       FmtComma        = FmtVLong << 1,
-       FmtByte         = FmtComma << 1,
-       FmtLDouble      = FmtByte << 1,
-
-       FmtFlag         = FmtLDouble << 1
-};
-
-extern int     (*fmtdoquote)(int);
-
-/* Edit .+1,/^$/ | cfn $PLAN9/src/lib9/fmt/?*.c | grep -v static |grep -v __ */
-int            dofmt(Fmt *f, char *fmt);
-int            dorfmt(Fmt *f, const Rune *fmt);
-double         fmtcharstod(int(*f)(void*), void *vp);
-int            fmtfdflush(Fmt *f);
-int            fmtfdinit(Fmt *f, int fd, char *buf, int size);
-int            fmtinstall(int c, int (*f)(Fmt*));
-int            fmtnullinit(Fmt*);
-void           fmtlocaleinit(Fmt*, char*, char*, char*);
-int            fmtprint(Fmt *f, char *fmt, ...);
-int            fmtrune(Fmt *f, int r);
-int            fmtrunestrcpy(Fmt *f, Rune *s);
-int            fmtstrcpy(Fmt *f, char *s);
-char*          fmtstrflush(Fmt *f);
-int            fmtstrinit(Fmt *f);
-double         fmtstrtod(const char *as, char **aas);
-int            fmtvprint(Fmt *f, char *fmt, va_list args);
-int            fprint(int fd, char *fmt, ...);
-int            print(char *fmt, ...);
-void           quotefmtinstall(void);
-int            quoterunestrfmt(Fmt *f);
-int            quotestrfmt(Fmt *f);
-Rune*          runefmtstrflush(Fmt *f);
-int            runefmtstrinit(Fmt *f);
-Rune*          runeseprint(Rune *buf, Rune *e, char *fmt, ...);
-Rune*          runesmprint(char *fmt, ...);
-int            runesnprint(Rune *buf, int len, char *fmt, ...);
-int            runesprint(Rune *buf, char *fmt, ...);
-Rune*          runevseprint(Rune *buf, Rune *e, char *fmt, va_list args);
-Rune*          runevsmprint(char *fmt, va_list args);
-int            runevsnprint(Rune *buf, int len, char *fmt, va_list args);
-char*          seprint(char *buf, char *e, char *fmt, ...);
-char*          smprint(char *fmt, ...);
-int            snprint(char *buf, int len, char *fmt, ...);
-int            sprint(char *buf, char *fmt, ...);
-int            vfprint(int fd, char *fmt, va_list args);
-char*          vseprint(char *buf, char *e, char *fmt, va_list args);
-char*          vsmprint(char *fmt, va_list args);
-int            vsnprint(char *buf, int len, char *fmt, va_list args);
-
-#if defined(__cplusplus)
-}
-#endif
-#endif
diff --git a/include/libc.h b/include/libc.h
deleted file mode 100644 (file)
index d82a19c..0000000
+++ /dev/null
@@ -1,398 +0,0 @@
-/*
-Derived from Inferno include/kern.h and
-Plan 9 from User Space include/libc.h
-
-http://code.google.com/p/inferno-os/source/browse/include/kern.h
-http://code.swtch.com/plan9port/src/tip/include/libc.h
-
-       Copyright © 1994-1999 Lucent Technologies Inc.  All rights reserved.
-       Revisions Copyright © 2000-2007 Vita Nuova Holdings Limited (www.vitanuova.com).  All rights reserved.
-       Portions Copyright © 2001-2007 Russ Cox.  All rights reserved.
-       Portions Copyright © 2009 The Go Authors.  All rights reserved.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-*/
-
-/*
- * Lib9 is miscellany from the Plan 9 C library that doesn't
- * fit into libutf or into libfmt, but is still missing from traditional
- * Unix C libraries.
- */
-#ifndef _LIBC_H_
-#define _LIBC_H_ 1
-#if defined(__cplusplus)
-extern "C" {
-#endif
-
-#include <utf.h>
-#include <fmt.h>
-
-/*
- * Begin trimmed down usual libc.h
- */
-
-#ifndef nil
-#define        nil     ((void*)0)
-#endif
-#define        nelem(x)        (sizeof(x)/sizeof((x)[0]))
-
-#ifndef offsetof
-#define offsetof(s, m) (ulong)(&(((s*)0)->m))
-#endif
-
-extern char*   strecpy(char*, char*, char*);
-extern  int tokenize(char*, char**, int);
-
-extern  double  p9cputime(void);
-#ifndef NOPLAN9DEFINES
-#define cputime     p9cputime
-#endif
-/*
- * one-of-a-kind
- */
-enum
-{
-       PNPROC          = 1,
-       PNGROUP         = 2
-};
-int isInf(double, int);
-
-extern int     p9atoi(char*);
-extern long    p9atol(char*);
-extern vlong   p9atoll(char*);
-extern double  fmtcharstod(int(*)(void*), void*);
-extern char*   cleanname(char*);
-extern int     exitcode(char*);
-extern void    exits(char*);
-extern double  frexp(double, int*);
-extern char*   p9getenv(char*);
-extern int     p9putenv(char*, char*);
-extern int     getfields(char*, char**, int, int, char*);
-extern int     gettokens(char *, char **, int, char *);
-extern char*   p9getwd(char*, int);
-extern void    p9longjmp(p9jmp_buf, int);
-extern void    p9notejmp(void*, p9jmp_buf, int);
-extern void    perror(const char*);
-extern int     postnote(int, int, char *);
-extern double  p9pow10(int);
-extern char*   p9ctime(long);
-#define p9setjmp(b)    sigsetjmp((void*)(b), 1)
-
-extern void    sysfatal(char*, ...);
-
-#ifndef NOPLAN9DEFINES
-#define atoi           p9atoi
-#define atol           p9atol
-#define atoll          p9atoll
-#define getenv         p9getenv
-#define        getwd           p9getwd
-#define        longjmp         p9longjmp
-#undef  setjmp
-#define setjmp         p9setjmp
-#define putenv         p9putenv
-#define notejmp                p9notejmp
-#define jmp_buf                p9jmp_buf
-#define pow10          p9pow10
-#undef  strtod
-#define strtod         fmtstrtod
-#define charstod       fmtcharstod
-#define ctime  p9ctime
-#endif
-
-/*
- * system calls
- *
- */
-#define        STATMAX 65535U  /* max length of machine-independent stat structure */
-#define        DIRMAX  (sizeof(Dir)+STATMAX)   /* max length of Dir structure */
-#define        ERRMAX  128     /* max length of error string */
-
-#define        MORDER  0x0003  /* mask for bits defining order of mounting */
-#define        MREPL   0x0000  /* mount replaces object */
-#define        MBEFORE 0x0001  /* mount goes before others in union directory */
-#define        MAFTER  0x0002  /* mount goes after others in union directory */
-#define        MCREATE 0x0004  /* permit creation in mounted directory */
-#define        MCACHE  0x0010  /* cache some data */
-#define        MMASK   0x0017  /* all bits on */
-
-#define        OREAD   0       /* open for read */
-#define        OWRITE  1       /* write */
-#define        ORDWR   2       /* read and write */
-#define        OEXEC   3       /* execute, == read but check execute permission */
-#define        OTRUNC  16      /* or'ed in (except for exec), truncate file first */
-#define        ORCLOSE 64      /* or'ed in, remove on close */
-#define        ODIRECT 128     /* or'ed in, direct access */
-#define        OEXCL   0x1000  /* or'ed in, exclusive use (create only) */
-#define        OAPPEND 0x4000  /* or'ed in, append only */
-
-#define        AEXIST  0       /* accessible: exists */
-#define        AEXEC   1       /* execute access */
-#define        AWRITE  2       /* write access */
-#define        AREAD   4       /* read access */
-
-/* Segattch */
-#define        SG_RONLY        0040    /* read only */
-#define        SG_CEXEC        0100    /* detach on exec */
-
-#define        NCONT   0       /* continue after note */
-#define        NDFLT   1       /* terminate after note */
-#define        NSAVE   2       /* clear note but hold state */
-#define        NRSTR   3       /* restore saved state */
-
-/* bits in Qid.type */
-#define QTDIR          0x80            /* type bit for directories */
-#define QTAPPEND       0x40            /* type bit for append only files */
-#define QTEXCL         0x20            /* type bit for exclusive use files */
-#define QTMOUNT                0x10            /* type bit for mounted channel */
-#define QTAUTH         0x08            /* type bit for authentication file */
-#define QTTMP          0x04            /* type bit for non-backed-up file */
-#define QTSYMLINK      0x02            /* type bit for symbolic link */
-#define QTFILE         0x00            /* type bits for plain file */
-
-/* bits in Dir.mode */
-#define DMDIR          0x80000000      /* mode bit for directories */
-#define DMAPPEND       0x40000000      /* mode bit for append only files */
-#define DMEXCL         0x20000000      /* mode bit for exclusive use files */
-#define DMMOUNT                0x10000000      /* mode bit for mounted channel */
-#define DMAUTH         0x08000000      /* mode bit for authentication file */
-#define DMTMP          0x04000000      /* mode bit for non-backed-up file */
-#define DMSYMLINK      0x02000000      /* mode bit for symbolic link (Unix, 9P2000.u) */
-#define DMDEVICE       0x00800000      /* mode bit for device file (Unix, 9P2000.u) */
-#define DMNAMEDPIPE    0x00200000      /* mode bit for named pipe (Unix, 9P2000.u) */
-#define DMSOCKET       0x00100000      /* mode bit for socket (Unix, 9P2000.u) */
-#define DMSETUID       0x00080000      /* mode bit for setuid (Unix, 9P2000.u) */
-#define DMSETGID       0x00040000      /* mode bit for setgid (Unix, 9P2000.u) */
-
-#define DMREAD         0x4             /* mode bit for read permission */
-#define DMWRITE                0x2             /* mode bit for write permission */
-#define DMEXEC         0x1             /* mode bit for execute permission */
-
-#ifdef RFMEM   /* FreeBSD, OpenBSD, NetBSD */
-#undef RFFDG
-#undef RFNOTEG
-#undef RFPROC
-#undef RFMEM
-#undef RFNOWAIT
-#undef RFCFDG
-#undef RFNAMEG
-#undef RFENVG
-#undef RFCENVG
-#undef RFCFDG
-#undef RFCNAMEG
-#endif
-
-enum
-{
-       RFNAMEG         = (1<<0),
-       RFENVG          = (1<<1),
-       RFFDG           = (1<<2),
-       RFNOTEG         = (1<<3),
-       RFPROC          = (1<<4),
-       RFMEM           = (1<<5),
-       RFNOWAIT        = (1<<6),
-       RFCNAMEG        = (1<<10),
-       RFCENVG         = (1<<11),
-       RFCFDG          = (1<<12)
-/*     RFREND          = (1<<13), */
-/*     RFNOMNT         = (1<<14) */
-};
-
-typedef
-struct Qid
-{
-       uvlong  path;
-       ulong   vers;
-       uchar   type;
-} Qid;
-
-typedef
-struct Dir {
-       /* system-modified data */
-       ushort  type;   /* server type */
-       uint    dev;    /* server subtype */
-       /* file data */
-       Qid     qid;    /* unique id from server */
-       ulong   mode;   /* permissions */
-       ulong   atime;  /* last read time */
-       ulong   mtime;  /* last write time */
-       vlong   length; /* file length */
-       char    *name;  /* last element of path */
-       char    *uid;   /* owner name */
-       char    *gid;   /* group name */
-       char    *muid;  /* last modifier name */
-
-       /* 9P2000.u extensions */
-       uint    uidnum;         /* numeric uid */
-       uint    gidnum;         /* numeric gid */
-       uint    muidnum;        /* numeric muid */
-       char    *ext;           /* extended info */
-} Dir;
-
-typedef
-struct Waitmsg
-{
-       int pid;        /* of loved one */
-       ulong time[3];  /* of loved one & descendants */
-       char    *msg;
-} Waitmsg;
-
-extern void    _exits(char*);
-
-extern void    abort(void);
-extern long    p9alarm(ulong);
-extern int     await(char*, int);
-extern int     awaitfor(int, char*, int);
-extern int     awaitnohang(char*, int);
-extern int     p9chdir(char*);
-extern int     close(int);
-extern int     p9create(char*, int, ulong);
-extern int     p9dup(int, int);
-extern int     errstr(char*, uint);
-extern int     p9exec(char*, char*[]);
-extern int     p9execl(char*, ...);
-extern int     p9rfork(int);
-extern int     noted(int);
-extern int     notify(void(*)(void*, char*));
-extern int     noteenable(char*);
-extern int     notedisable(char*);
-extern int     notifyon(char*);
-extern int     notifyoff(char*);
-extern int     p9open(char*, int);
-extern int     fd2path(int, char*, int);
-extern long    readn(int, void*, long);
-extern int     remove(const char*);
-extern vlong   p9seek(int, vlong, int);
-extern int     p9sleep(long);
-extern Waitmsg*        p9wait(void);
-extern Waitmsg*        p9waitfor(int);
-extern Waitmsg*        waitnohang(void);
-extern int     p9waitpid(void);
-extern ulong   rendezvous(ulong, ulong);
-
-extern char*   getgoos(void);
-extern char*   getgoarch(void);
-extern char*   getgoroot(void);
-extern char*   getgoversion(void);
-extern char*   getgoarm(void);
-extern char*   getgo386(void);
-extern char*   getgoextlinkenabled(void);
-extern char*   getgohostos(void);
-extern char*   getgohostarch(void);
-
-extern char*   mktempdir(void);
-extern void    removeall(char*);
-extern int     runcmd(char**);
-
-extern void    flagcount(char*, char*, int*);
-extern void    flagint32(char*, char*, int32*);
-extern void    flagint64(char*, char*, int64*);
-extern void    flagstr(char*, char*, char**);
-extern void    flagparse(int*, char***, void (*usage)(void));
-extern void    flagfn0(char*, char*, void(*fn)(void));
-extern void    flagfn1(char*, char*, void(*fn)(char*));
-extern void    flagfn2(char*, char*, void(*fn)(char*, char*));
-extern void    flagprint(int);
-
-#ifdef _WIN32
-
-#if !defined(_WIN64) && !defined(__MINGW64_VERSION_MAJOR)
-#define execv(prog, argv) execv(prog, (const char* const*)(argv))
-#define execvp(prog, argv) execvp(prog, (const char**)(argv))
-#endif
-
-#undef  getwd
-#define getwd(s, ns) getcwd(s, ns)
-#undef  lseek
-#define lseek(fd, n, base) _lseeki64(fd, n, base)
-#define mkdir(path, perm) mkdir(path)
-#else
-#define O_BINARY 0
-#endif
-
-#ifndef NOPLAN9DEFINES
-#define alarm          p9alarm
-#define        dup             p9dup
-#define        exec            p9exec
-#define        execl   p9execl
-#define        seek            p9seek
-#define sleep          p9sleep
-#define wait           p9wait
-#define waitpid                p9waitpid
-#define rfork          p9rfork
-#define create         p9create
-#undef open
-#define open           p9open
-#define        waitfor         p9waitfor
-#endif
-
-extern Dir*    dirstat(char*);
-extern Dir*    dirfstat(int);
-extern int     dirwstat(char*, Dir*);
-extern int     dirfwstat(int, Dir*);
-extern void    nulldir(Dir*);
-extern long    dirreadall(int, Dir**);
-extern void    rerrstr(char*, uint);
-extern char*   sysname(void);
-extern void    werrstr(char*, ...);
-extern char*   getns(void);
-extern char*   get9root(void);
-extern char*   unsharp(char*);
-
-/* external names that we don't want to step on */
-#ifndef NOPLAN9DEFINES
-#define main   p9main
-#endif
-
-/* compiler directives on plan 9 */
-#define        SET(x)  ((x)=0)
-#define        USED(x) if(x){}else{}
-#ifdef __GNUC__
-#      if __GNUC__ >= 3
-#              undef USED
-#              define USED(x) ((void)(x))
-#      endif
-#endif
-
-/* command line */
-extern char    *argv0;
-extern void __fixargv0(void);
-#define        ARGBEGIN        for((void)(argv0?0:(argv0=(__fixargv0(),*argv))),argv++,argc--;\
-                           argv[0] && argv[0][0]=='-' && argv[0][1];\
-                           argc--, argv++) {\
-                               char *_args, *_argt;\
-                               Rune _argc;\
-                               _args = &argv[0][1];\
-                               if(_args[0]=='-' && _args[1]==0){\
-                                       argc--; argv++; break;\
-                               }\
-                               _argc = 0;\
-                               while(*_args && (_args += chartorune(&_argc, _args)))\
-                               switch(_argc)
-#define        ARGEND          SET(_argt);USED(_argt);USED(_argc);USED(_args);}USED(argv);USED(argc);
-#define        ARGF()          (_argt=_args, _args="",\
-                               (*_argt? _argt: argv[1]? (argc--, *++argv): 0))
-#define        EARGF(x)        (_argt=_args, _args="",\
-                               (*_argt? _argt: argv[1]? (argc--, *++argv): ((x), abort(), (char*)0)))
-
-#define        ARGC()          _argc
-
-#if defined(__cplusplus)
-}
-#endif
-#endif /* _LIB9_H_ */
diff --git a/include/link.h b/include/link.h
deleted file mode 100644 (file)
index 3df9b10..0000000
+++ /dev/null
@@ -1,406 +0,0 @@
-// Derived from Inferno utils/6l/l.h and related files.
-// http://code.google.com/p/inferno-os/source/browse/utils/6l/l.h
-//
-//     Copyright © 1994-1999 Lucent Technologies Inc.  All rights reserved.
-//     Portions Copyright © 1995-1997 C H Forsyth (forsyth@terzarima.net)
-//     Portions Copyright © 1997-1999 Vita Nuova Limited
-//     Portions Copyright © 2000-2007 Vita Nuova Holdings Limited (www.vitanuova.com)
-//     Portions Copyright © 2004,2006 Bruce Ellis
-//     Portions Copyright © 2005-2007 C H Forsyth (forsyth@terzarima.net)
-//     Revisions Copyright © 2000-2007 Lucent Technologies Inc. and others
-//     Portions Copyright © 2009 The Go Authors.  All rights reserved.
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-typedef        struct  LSym    LSym;
-typedef        struct  Reloc   Reloc;
-typedef        struct  Auto    Auto;
-typedef        struct  Link    Link;
-typedef        struct  LinkArch        LinkArch;
-typedef        struct  Library Library;
-
-typedef        struct  Pcln    Pcln;
-typedef        struct  Pcdata  Pcdata;
-typedef        struct  Pciter  Pciter;
-
-struct Reloc
-{
-       int32   off;
-       uchar   siz;
-       uchar   done;
-       int32   type;
-       int32   variant; // RV_*: variant on computed value
-       int64   add;
-       int64   xadd;
-       LSym*   sym;
-       LSym*   xsym;
-};
-
-struct LSym
-{
-       char*   name;
-       char*   extname;        // name used in external object files
-       short   type;
-       short   version;
-       uchar   dupok;
-       uchar   cfunc;
-       uchar   external;
-       uchar   nosplit;
-       uchar   reachable;
-       uchar   cgoexport;
-       uchar   special;
-       uchar   stkcheck;
-       uchar   hide;
-       uchar   leaf;   // arm only
-       uchar   localentry;     // ppc64: instrs between global & local entry
-       uchar   onlist; // on the textp or datap lists
-       int32   dynid;
-       int32   sig;
-       int32   plt;
-       int32   got;
-       int32   align;  // if non-zero, required alignment in bytes
-       int32   elfsym;
-       int32   args;   // size of stack frame incoming arguments area
-       int32   locals; // size of stack frame locals area (arm only?)
-       vlong   value;
-       vlong   size;
-       LSym*   hash;   // in hash table
-       LSym*   allsym; // in all symbol list
-       LSym*   next;   // in text or data list
-       LSym*   sub;    // in SSUB list
-       LSym*   outer;  // container of sub
-       LSym*   gotype;
-       LSym*   reachparent;
-       LSym*   queue;
-       char*   file;
-       char*   dynimplib;
-       char*   dynimpvers;
-       void*   sect;
-       
-       // STEXT
-       Auto*   autom;
-       Pcln*   pcln;
-
-       // SDATA, SBSS
-       uchar*  p;
-       int     np;
-       int32   maxp;
-       Reloc*  r;
-       int32   nr;
-       int32   maxr;
-};
-
-// LSym.type
-enum
-{
-       Sxxx,
-
-       /* order here is order in output file */
-       /* readonly, executable */
-       STEXT,
-       SELFRXSECT,
-       
-       /* readonly, non-executable */
-       STYPE,
-       SSTRING,
-       SGOSTRING,
-       SGOFUNC,
-       SRODATA,
-       SFUNCTAB,
-       STYPELINK,
-       SSYMTAB, // TODO: move to unmapped section
-       SPCLNTAB,
-       SELFROSECT,
-       
-       /* writable, non-executable */
-       SMACHOPLT,
-       SELFSECT,
-       SMACHO, /* Mach-O __nl_symbol_ptr */
-       SMACHOGOT,
-       SWINDOWS,
-       SELFGOT,        /* also .toc in ppc64 ABI */
-       SNOPTRDATA,
-       SINITARR,
-       SDATA,
-       SBSS,
-       SNOPTRBSS,
-       STLSBSS,
-
-       /* not mapped */
-       SXREF,
-       SMACHOSYMSTR,
-       SMACHOSYMTAB,
-       SMACHOINDIRECTPLT,
-       SMACHOINDIRECTGOT,
-       SFILE,
-       SFILEPATH,
-       SCONST,
-       SDYNIMPORT,
-       SHOSTOBJ,
-
-       SSUB = 1<<8,    /* sub-symbol, linked from parent via ->sub list */
-       SMASK = SSUB - 1,
-       SHIDDEN = 1<<9, // hidden or local symbol
-};
-
-// Reloc.type
-enum
-{
-       R_ADDR = 1,
-       R_ADDRPOWER, // relocation for loading 31-bit address using addis and addi/ld/st for Power
-       R_SIZE,
-       R_CALL, // relocation for direct PC-relative call
-       R_CALLARM, // relocation for ARM direct call
-       R_CALLIND, // marker for indirect call (no actual relocating necessary)
-       R_CALLPOWER, // relocation for Power direct call
-       R_CONST,
-       R_PCREL,
-       R_TLS,
-       R_TLS_LE, // TLS local exec offset from TLS segment register
-       R_TLS_IE, // TLS initial exec offset from TLS base pointer
-       R_GOTOFF,
-       R_PLT0,
-       R_PLT1,
-       R_PLT2,
-       R_USEFIELD,
-       R_POWER_TOC,            // ELF R_PPC64_TOC16*
-};
-
-// Reloc.variant
-enum
-{
-       RV_NONE,                // identity variant
-       RV_POWER_LO,            // x & 0xFFFF
-       RV_POWER_HI,            // x >> 16
-       RV_POWER_HA,            // (x + 0x8000) >> 16
-       RV_POWER_DS,            // x & 0xFFFC, check x&0x3 == 0
-
-       RV_CHECK_OVERFLOW = 1<<8,       // check overflow flag
-       RV_TYPE_MASK = (RV_CHECK_OVERFLOW - 1),
-};
-
-// Auto.name
-enum
-{
-       A_AUTO = 1,
-       A_PARAM,
-};
-
-struct Auto
-{
-       LSym*   asym;
-       Auto*   link;
-       int32   aoffset;
-       int16   name;
-       LSym*   gotype;
-};
-
-enum
-{
-       LINKHASH = 100003,
-};
-
-struct Library
-{
-       char *objref;   // object where we found the reference
-       char *srcref;   // src file where we found the reference
-       char *file;     // object file
-       char *pkg;      // import path
-};
-
-struct Pcdata
-{
-       uchar *p;
-       int n;
-       int m;
-};
-
-struct Pcln
-{
-       Pcdata pcsp;
-       Pcdata pcfile;
-       Pcdata pcline;
-       Pcdata *pcdata;
-       int npcdata;
-       LSym **funcdata;
-       int64 *funcdataoff;
-       int nfuncdata;
-       
-       LSym **file;
-       int nfile;
-       int mfile;
-
-       LSym *lastfile;
-       int lastindex;
-};
-
-// Pcdata iterator.
-//     for(pciterinit(ctxt, &it, &pcd); !it.done; pciternext(&it)) { it.value holds in [it.pc, it.nextpc) }
-struct Pciter
-{
-       Pcdata d;
-       uchar *p;
-       uint32 pc;
-       uint32 nextpc;
-       uint32 pcscale;
-       int32 value;
-       int start;
-       int done;
-};
-
-void   pciterinit(Link*, Pciter*, Pcdata*);
-void   pciternext(Pciter*);
-
-// symbol version, incremented each time a file is loaded.
-// version==1 is reserved for savehist.
-enum
-{
-       HistVersion = 1,
-};
-
-// Link holds the context for writing object code from a compiler
-// to be linker input or for reading that input into the linker.
-struct Link
-{
-       int32   thechar; // '5' (arm), '6' (amd64), etc.
-       char*   thestring; // full name of architecture ("arm", "amd64", ..)
-       int32   goarm; // for arm only, GOARM setting
-       int     headtype;
-
-       LinkArch*       arch;
-       int32   debugasm;       // -S flag in compiler
-       int32   debugvlog;      // -v flag in linker
-       Biobuf* bso;    // for -v flag
-       int32   windows;
-       char*   goroot;
-
-       // hash table of all symbols
-       LSym*   hash[LINKHASH];
-       LSym*   allsym;
-       int32   nsymbol;
-       
-       // code generation
-       LSym*   tlsg;
-
-       // for reading input files (during linker)
-       char**  libdir;
-       int32   nlibdir;
-       int32   maxlibdir;
-       Library*        library;
-       int     libraryp;
-       int     nlibrary;
-       int     tlsoffset;
-       void    (*diag)(char*, ...);
-       LSym*   cursym;
-       int     version;
-       LSym*   textp;
-       LSym*   etextp;
-       int32   nhistfile;
-       LSym*   filesyms;
-};
-
-enum {
-       LittleEndian = 0x04030201,
-       BigEndian = 0x01020304,
-};
-
-// LinkArch is the definition of a single architecture.
-struct LinkArch
-{
-       char*   name; // "arm", "amd64", and so on
-       int     thechar;        // '5', '6', and so on
-       int32   endian; // LittleEndian or BigEndian
-
-       int     minlc;
-       int     ptrsize;
-       int     regsize;
-};
-
-/* executable header types */
-enum {
-       Hunknown = 0,
-       Hdarwin,
-       Hdragonfly,
-       Helf,
-       Hfreebsd,
-       Hlinux,
-       Hnacl,
-       Hnetbsd,
-       Hopenbsd,
-       Hplan9,
-       Hsolaris,
-       Hwindows,
-};
-
-enum
-{
-       LinkAuto = 0,
-       LinkInternal,
-       LinkExternal,
-};
-
-extern uchar   fnuxi8[8];
-extern uchar   fnuxi4[4];
-extern uchar   inuxi1[1];
-extern uchar   inuxi2[2];
-extern uchar   inuxi4[4];
-extern uchar   inuxi8[8];
-
-vlong  addaddr(Link *ctxt, LSym *s, LSym *t);
-vlong  addaddrplus(Link *ctxt, LSym *s, LSym *t, vlong add);
-vlong  addaddrplus4(Link *ctxt, LSym *s, LSym *t, vlong add);
-void   addlib(Link *ctxt, char *src, char *obj, char *pathname);
-void   addlibpath(Link *ctxt, char *srcref, char *objref, char *file, char *pkg);
-vlong  addpcrelplus(Link *ctxt, LSym *s, LSym *t, vlong add);
-Reloc* addrel(LSym *s);
-vlong  addsize(Link *ctxt, LSym *s, LSym *t);
-vlong  adduint16(Link *ctxt, LSym *s, uint16 v);
-vlong  adduint32(Link *ctxt, LSym *s, uint32 v);
-vlong  adduint64(Link *ctxt, LSym *s, uint64 v);
-vlong  adduint8(Link *ctxt, LSym *s, uint8 v);
-vlong  adduintxx(Link *ctxt, LSym *s, uint64 v, int wid);
-vlong  atolwhex(char *s);
-void*  emallocz(long n);
-void*  erealloc(void *p, long n);
-char*  estrdup(char *p);
-char*  expandpkg(char *t0, char *pkg);
-int    find1(int32 l, int c);
-char*  headstr(int v);
-int    headtype(char *name);
-void   ldobjfile(Link *ctxt, Biobuf *f, char *pkg, int64 len, char *pn);
-LSym*  linklookup(Link *ctxt, char *name, int v);
-Link*  linknew(LinkArch *arch);
-LSym*  linknewsym(Link *ctxt, char *symb, int v);
-LSym*  linkrlookup(Link *ctxt, char *name, int v);
-void   nuxiinit(LinkArch *arch);
-void   pciterinit(Link *ctxt, Pciter *it, Pcdata *d);
-void   pciternext(Pciter *it);
-vlong  setaddr(Link *ctxt, LSym *s, vlong off, LSym *t);
-vlong  setaddrplus(Link *ctxt, LSym *s, vlong off, LSym *t, vlong add);
-vlong  setuint32(Link *ctxt, LSym *s, vlong r, uint32 v);
-vlong  setuint8(Link *ctxt, LSym *s, vlong r, uint8 v);
-vlong  setuintxx(Link *ctxt, LSym *s, vlong off, uint64 v, vlong wid);
-void   symgrow(Link *ctxt, LSym *s, vlong lsiz);
-
-extern LinkArch        link386;
-extern LinkArch        linkamd64;
-extern LinkArch        linkamd64p32;
-extern LinkArch        linkarm;
-extern LinkArch        linkppc64;
-extern LinkArch        linkppc64le;
diff --git a/include/plan9/386/u.h b/include/plan9/386/u.h
deleted file mode 100644 (file)
index 1c4076b..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-// Copyright 2012 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-#include "/386/include/u.h"
-
-typedef        char    int8;
-typedef        uchar   uint8;
-typedef        short   int16;
-typedef        ushort  uint16;
-typedef        int     int32;
-typedef        uint    uint32;
-typedef        vlong   int64;
-typedef        uvlong  uint64;
-typedef        int     intptr;
-typedef        float   float32;
-typedef        double  float64;
diff --git a/include/plan9/amd64/u.h b/include/plan9/amd64/u.h
deleted file mode 100644 (file)
index c2d4999..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-// Copyright 2012 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-#include "/amd64/include/u.h"
-
-typedef        char    int8;
-typedef        uchar   uint8;
-typedef        short   int16;
-typedef        ushort  uint16;
-typedef        int     int32;
-typedef        uint    uint32;
-typedef        vlong   int64;
-typedef        uvlong  uint64;
-typedef        vlong   intptr;
-typedef        float   float32;
-typedef        double  float64;
diff --git a/include/plan9/ar.h b/include/plan9/ar.h
deleted file mode 100644 (file)
index 3509417..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-// Inferno utils/include/ar.h
-// http://code.google.com/p/inferno-os/source/browse/utils/include/ar.h
-//
-//     Copyright © 1994-1999 Lucent Technologies Inc.  All rights reserved.
-//     Portions Copyright © 1995-1997 C H Forsyth (forsyth@terzarima.net)
-//     Portions Copyright © 1997-1999 Vita Nuova Limited
-//     Portions Copyright © 2000-2007 Vita Nuova Holdings Limited (www.vitanuova.com)
-//     Portions Copyright © 2004,2006 Bruce Ellis
-//     Portions Copyright © 2005-2007 C H Forsyth (forsyth@terzarima.net)
-//     Revisions Copyright © 2000-2007 Lucent Technologies Inc. and others
-//     Portions Copyright © 2009 The Go Authors.  All rights reserved.
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-enum {
-       SARMAG = 8,
-       SARNAME = 16,
-       SAR_HDR = 16+44,
-};
-
-#define        ARMAG   "!<arch>\n"
-#define        ARFMAG  "`\n"
-/*c2go
-char ARMAG[] = "!<arch>\n";
-char ARFMAG[] = "`\n";
-*/
-
-typedef struct ArHdr ArHdr;
-struct ArHdr
-{
-       char    name[SARNAME];
-       char    date[12];
-       char    uid[6];
-       char    gid[6];
-       char    mode[8];
-       char    size[10];
-       char    fmag[2];
-};
diff --git a/include/plan9/arm/u.h b/include/plan9/arm/u.h
deleted file mode 100644 (file)
index 19249aa..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-// Copyright 2012 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-#include "/arm/include/u.h"
-
-typedef        char    int8;
-typedef        uchar   uint8;
-typedef        short   int16;
-typedef        ushort  uint16;
-typedef        int     int32;
-typedef        uint    uint32;
-typedef        vlong   int64;
-typedef        uvlong  uint64;
-typedef        int     intptr;
diff --git a/include/plan9/bio.h b/include/plan9/bio.h
deleted file mode 100644 (file)
index 13d5e0e..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-// Copyright 2013 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-#include "../bio.h"
-
-#define fmtcharstod charstod
-#define lseek seek
diff --git a/include/plan9/errno.h b/include/plan9/errno.h
deleted file mode 100644 (file)
index 1ed572a..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-// Copyright 2014 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-int errno;
-
-#define ERANGE 1001
diff --git a/include/plan9/fmt.h b/include/plan9/fmt.h
deleted file mode 100644 (file)
index b4a4fe7..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-// Copyright 2014 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-#include "../fmt.h"
-
-#pragma        varargck        argpos  fmtprint        2
-#pragma        varargck        argpos  fprint          2
-#pragma        varargck        argpos  print           1
-#pragma        varargck        argpos  runeseprint     3
-#pragma        varargck        argpos  runesmprint     1
-#pragma        varargck        argpos  runesnprint     3
-#pragma        varargck        argpos  runesprint      2
-#pragma        varargck        argpos  seprint         3
-#pragma        varargck        argpos  smprint         1
-#pragma        varargck        argpos  snprint         3
-#pragma        varargck        argpos  sprint          2
-
-#pragma        varargck        type    "lld"   vlong
-#pragma        varargck        type    "llo"   vlong
-#pragma        varargck        type    "llx"   vlong
-#pragma        varargck        type    "llb"   vlong
-#pragma        varargck        type    "lld"   uvlong
-#pragma        varargck        type    "llo"   uvlong
-#pragma        varargck        type    "llx"   uvlong
-#pragma        varargck        type    "llb"   uvlong
-#pragma        varargck        type    "ld"    long
-#pragma        varargck        type    "lo"    long
-#pragma        varargck        type    "lx"    long
-#pragma        varargck        type    "lb"    long
-#pragma        varargck        type    "ld"    ulong
-#pragma        varargck        type    "lo"    ulong
-#pragma        varargck        type    "lx"    ulong
-#pragma        varargck        type    "lb"    ulong
-#pragma        varargck        type    "d"     int
-#pragma        varargck        type    "o"     int
-#pragma        varargck        type    "x"     int
-#pragma        varargck        type    "c"     int
-#pragma        varargck        type    "C"     int
-#pragma        varargck        type    "b"     int
-#pragma        varargck        type    "d"     uint
-#pragma        varargck        type    "x"     uint
-#pragma        varargck        type    "c"     uint
-#pragma        varargck        type    "C"     uint
-#pragma        varargck        type    "b"     uint
-#pragma        varargck        type    "f"     double
-#pragma        varargck        type    "e"     double
-#pragma        varargck        type    "g"     double
-#pragma        varargck        type    "s"     char*
-#pragma        varargck        type    "q"     char*
-#pragma        varargck        type    "S"     Rune*
-#pragma        varargck        type    "Q"     Rune*
-#pragma        varargck        type    "r"     void
-#pragma        varargck        type    "%"     void
-#pragma        varargck        type    "n"     int*
-#pragma        varargck        type    "p"     uintptr
-#pragma        varargck        type    "p"     void*
-#pragma        varargck        flag    ','
-#pragma        varargck        flag    ' '
-#pragma        varargck        flag    'h'
-#pragma        varargck        type    "<"     void*
-#pragma        varargck        type    "["     void*
-#pragma        varargck        type    "H"     void*
-#pragma        varargck        type    "lH"    void*
diff --git a/include/plan9/libc.h b/include/plan9/libc.h
deleted file mode 100644 (file)
index 9a88050..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-// Copyright 2012 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-#include "/sys/include/ctype.h"
-#include "fmt.h"
-#include "utf.h"
-#include "libc_plan9.h"
-
-char*  getgoos(void);
-char*  getgoarch(void);
-char*  getgoroot(void);
-char*  getgoversion(void);
-char*  getgoarm(void);
-char*  getgo386(void);
-char*  getgoextlinkenabled(void);
-char*  getgohostos(void);
-char*  getgohostarch(void);
-
-int    runcmd(char**);
-
-void   flagcount(char*, char*, int*);
-void   flagint32(char*, char*, int32*);
-void   flagint64(char*, char*, int64*);
-void   flagstr(char*, char*, char**);
-void   flagparse(int*, char***, void (*usage)(void));
-void   flagfn0(char*, char*, void(*fn)(void));
-void   flagfn1(char*, char*, void(*fn)(char*));
-void   flagfn2(char*, char*, void(*fn)(char*, char*));
-void   flagprint(int);
-
-// The libraries use size_t to avoid -Wconversion warnings from GCC
-// when calling standard library functions like memcpy.
-typedef unsigned long size_t;
-
-// math.h
-#define HUGE_VAL 1.79769313486231e+308
diff --git a/include/plan9/link.h b/include/plan9/link.h
deleted file mode 100644 (file)
index f65971e..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-// Copyright 2013 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-#include "../link.h"
diff --git a/include/plan9/mklibc.rc b/include/plan9/mklibc.rc
deleted file mode 100755 (executable)
index 449e15f..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/bin/rc
-
-pattern='/umuldiv/d
-       /rune routines/,/^\/\*/d
-       /print routines/,/^\/\*/d
-       /error string for/,/^\/\*/d'
-
-sed -e $pattern /sys/include/libc.h | awk '/^enum/ && !n++, /^};/ {next}1'
diff --git a/include/plan9/stdarg.h b/include/plan9/stdarg.h
deleted file mode 100644 (file)
index b562a3a..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-// Copyright 2014 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
diff --git a/include/plan9/utf.h b/include/plan9/utf.h
deleted file mode 100644 (file)
index 03c26d6..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-// Copyright 2014 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-#include "../utf.h"
diff --git a/include/u.h b/include/u.h
deleted file mode 100644 (file)
index 6f85782..0000000
+++ /dev/null
@@ -1,236 +0,0 @@
-/*
-Plan 9 from User Space include/u.h
-http://code.swtch.com/plan9port/src/tip/include/u.h
-
-Copyright 2001-2007 Russ Cox.  All Rights Reserved.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-*/
-
-#ifndef _U_H_
-#define _U_H_ 1
-#if defined(__cplusplus)
-extern "C" {
-#endif
-
-#define __BSD_VISIBLE 1 /* FreeBSD 5.x */
-#if defined(__sun__)
-#      define __EXTENSIONS__ 1 /* SunOS */
-#      if defined(__SunOS5_6__) || defined(__SunOS5_7__) || defined(__SunOS5_8__)
-               /* NOT USING #define __MAKECONTEXT_V2_SOURCE 1 / * SunOS */
-#      else
-#              define __MAKECONTEXT_V2_SOURCE 1
-#      endif
-#endif
-#define _BSD_SOURCE 1
-#define _NETBSD_SOURCE 1       /* NetBSD */
-#define _DEFAULT_SOURCE 1      /* glibc > 2.19 */
-#define _SVID_SOURCE 1
-#if !defined(__APPLE__) && !defined(__OpenBSD__) && !defined(__sun__)
-#      define _XOPEN_SOURCE 1000
-#      define _XOPEN_SOURCE_EXTENDED 1
-#endif
-#if defined(__FreeBSD__)
-#      include <sys/cdefs.h>
-       /* for strtoll */
-#      undef __ISO_C_VISIBLE
-#      define __ISO_C_VISIBLE 1999
-#      undef __LONG_LONG_SUPPORTED
-#      define __LONG_LONG_SUPPORTED
-#endif
-#define _LARGEFILE64_SOURCE 1
-#define _FILE_OFFSET_BITS 64
-
-#include <inttypes.h>
-
-#include <unistd.h>
-#include <string.h>
-#include <stdlib.h>
-#include <stdarg.h>
-#include <fcntl.h>
-#include <assert.h>
-#include <setjmp.h>
-#include <stddef.h>
-#include <math.h>
-#include <ctype.h>     /* for tolower */
-#include <time.h>
-
-#ifdef _WIN32
-#include <signal.h>
-#endif
-
-/*
- * OS-specific crap
- */
-#define _NEEDUCHAR 1
-#define _NEEDUSHORT 1
-#define _NEEDUINT 1
-#define _NEEDULONG 1
-
-#ifdef _WIN32
-typedef jmp_buf sigjmp_buf;
-#endif
-typedef long p9jmp_buf[sizeof(sigjmp_buf)/sizeof(long)];
-
-#if defined(__linux__)
-#      include <sys/types.h>
-#      if defined(__Linux26__)
-#              include <pthread.h>
-#              define PLAN9PORT_USING_PTHREADS 1
-#      endif
-#      if defined(__USE_MISC)
-#              undef _NEEDUSHORT
-#              undef _NEEDUINT
-#              undef _NEEDULONG
-#      endif
-#elif defined(__sun__)
-#      include <sys/types.h>
-#      include <pthread.h>
-#      define PLAN9PORT_USING_PTHREADS 1
-#      undef _NEEDUSHORT
-#      undef _NEEDUINT
-#      undef _NEEDULONG
-#      define nil 0    /* no cast to void* */
-#elif defined(__FreeBSD__)
-#      include <sys/types.h>
-#      include <osreldate.h>
-#      if __FreeBSD_version >= 500000
-#              define PLAN9PORT_USING_PTHREADS 1
-#              include <pthread.h>
-#      endif
-#      if !defined(_POSIX_SOURCE)
-#              undef _NEEDUSHORT
-#              undef _NEEDUINT
-#      endif
-#elif defined(__APPLE__)
-#      include <sys/types.h>
-#      include <pthread.h>
-#      define PLAN9PORT_USING_PTHREADS 1
-#      if __GNUC__ < 4
-#              undef _NEEDUSHORT
-#              undef _NEEDUINT
-#      endif
-#      undef _ANSI_SOURCE
-#      undef _POSIX_C_SOURCE
-#      undef _XOPEN_SOURCE
-#      if !defined(NSIG)
-#              define NSIG 32
-#      endif
-#      define _NEEDLL 1
-#elif defined(__NetBSD__)
-#      include <sched.h>
-#      include <sys/types.h>
-#      undef _NEEDUSHORT
-#      undef _NEEDUINT
-#      undef _NEEDULONG
-#elif defined(__OpenBSD__)
-#      include <sys/types.h>
-#      undef _NEEDUSHORT
-#      undef _NEEDUINT
-#      undef _NEEDULONG
-#elif defined(_WIN32)
-#else
-       /* No idea what system this is -- try some defaults */
-#      include <pthread.h>
-#      define PLAN9PORT_USING_PTHREADS 1
-#endif
-
-#ifndef O_DIRECT
-#define O_DIRECT 0
-#endif
-
-typedef signed char schar;
-
-#ifdef _NEEDUCHAR
-       typedef unsigned char uchar;
-#endif
-#ifdef _NEEDUSHORT
-       typedef unsigned short ushort;
-#endif
-#ifdef _NEEDUINT
-       typedef unsigned int uint;
-#endif
-#ifdef _NEEDULONG
-       typedef unsigned long ulong;
-#endif
-typedef unsigned long long uvlong;
-typedef long long vlong;
-
-typedef uint64_t u64int;
-typedef int64_t s64int;
-typedef uint8_t u8int;
-typedef int8_t s8int;
-typedef uint16_t u16int;
-typedef int16_t s16int;
-typedef uintptr_t uintptr;
-typedef intptr_t intptr;
-typedef uint32_t u32int;
-typedef int32_t s32int;
-
-typedef s8int int8;
-typedef u8int uint8;
-typedef s16int int16;
-typedef u16int uint16;
-typedef s32int int32;
-typedef u32int uint32;
-typedef s64int int64;
-typedef u64int uint64;
-
-typedef float float32;
-typedef double float64;
-
-#undef _NEEDUCHAR
-#undef _NEEDUSHORT
-#undef _NEEDUINT
-#undef _NEEDULONG
-
-#define getcallerpc(x) __builtin_return_address(0)
-
-#ifndef SIGBUS
-#define SIGBUS SIGSEGV /* close enough */
-#endif
-
-/*
- * Funny-named symbols to tip off 9l to autolink.
- */
-#define AUTOLIB(x)     static int __p9l_autolib_ ## x = 1;
-#define AUTOFRAMEWORK(x) static int __p9l_autoframework_ ## x = 1;
-
-/*
- * Gcc is too smart for its own good.
- */
-#if defined(__GNUC__)
-#      undef strcmp    /* causes way too many warnings */
-#      if __GNUC__ >= 4 || (__GNUC__==3 && !defined(__APPLE_CC__) && !defined(_WIN32))
-#              undef AUTOLIB
-#              define AUTOLIB(x) int __p9l_autolib_ ## x __attribute__ ((weak));
-#              undef AUTOFRAMEWORK
-#              define AUTOFRAMEWORK(x) int __p9l_autoframework_ ## x __attribute__ ((weak));
-#      else
-#              undef AUTOLIB
-#              define AUTOLIB(x) static int __p9l_autolib_ ## x __attribute__ ((unused));
-#              undef AUTOFRAMEWORK
-#              define AUTOFRAMEWORK(x) static int __p9l_autoframework_ ## x __attribute__ ((unused));
-#      endif
-#endif
-
-#if defined(__cplusplus)
-}
-#endif
-#endif
diff --git a/include/utf.h b/include/utf.h
deleted file mode 100644 (file)
index be1c46e..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#include "../src/lib9/utf/utf.h"
index f21331055f177df02b396ba4f3833cd3f33332b9..c13bace3604cd771003a9bd19fe74af66766ab4d 100644 (file)
@@ -10,7 +10,6 @@ import (
        "fmt"
        "os"
        "path/filepath"
-       "runtime"
        "strings"
 )
 
@@ -457,49 +456,9 @@ func setup() {
 }
 
 /*
- * C library and tool building
+ * Tool building
  */
 
-// gccargs is the gcc command line to use for compiling a single C file.
-var proto_gccargs = []string{
-       "-Wall",
-       // native Plan 9 compilers don't like non-standard prototypes
-       // so let gcc catch them.
-       "-Wstrict-prototypes",
-       "-Wextra",
-       "-Wunused",
-       "-Wno-sign-compare",
-       "-Wno-missing-braces",
-       "-Wno-parentheses",
-       "-Wno-unknown-pragmas",
-       "-Wno-switch",
-       "-Wno-comment",
-       "-Wno-missing-field-initializers",
-       "-fno-common",
-       "-ggdb",
-       "-pipe",
-}
-
-// gccargs2 is the second part of gccargs.
-// it is used if the environment isn't defining CFLAGS.
-var proto_gccargs2 = []string{
-       // on older versions of GCC, -Wuninitialized is not supported
-       // without -O, so put it here together with -O settings in case
-       // the user's $CFLAGS doesn't include -O.
-       "-Wuninitialized",
-       "-O2",
-}
-
-func init() {
-       if runtime.GOOS == "netbsd" && runtime.GOARCH == "arm" {
-               // GCC 4.5.4 (NetBSD nb1 20120916) on ARM is known to mis-optimize gc/mparith3.c
-               // Fix available at http://patchwork.ozlabs.org/patch/64562/.
-               proto_gccargs2[1] = "-O1"
-       }
-}
-
-var gccargs, ldargs []string
-
 // deptab lists changes to the default dependencies for a given prefix.
 // deps ending in /* read the whole directory; deps beginning with -
 // exclude files with that prefix.
@@ -517,8 +476,6 @@ var deptab = []struct {
 
 // depsuffix records the allowed suffixes for source files.
 var depsuffix = []string{
-       ".c",
-       ".h",
        ".s",
        ".go",
 }
@@ -561,40 +518,7 @@ func install(dir string) {
        path := pathf("%s/src/%s", goroot, dir)
        name := filepath.Base(dir)
 
-       // set up gcc command line on first run.
-       if gccargs == nil {
-               gccargs = splitfields(defaultcc + " " + defaultcflags)
-               gccargs = append(gccargs, proto_gccargs...)
-               if defaultcflags == "" {
-                       gccargs = append(gccargs, proto_gccargs2...)
-               }
-               if strings.Contains(gccargs[0], "clang") {
-                       // disable ASCII art in clang errors, if possible
-                       gccargs = append(gccargs, "-fno-caret-diagnostics")
-                       // clang is too smart about unused command-line arguments
-                       gccargs = append(gccargs, "-Qunused-arguments")
-               }
-               // disable word wrapping in error messages
-               gccargs = append(gccargs, "-fmessage-length=0")
-               if gohostos == "darwin" && gohostarch != "arm" {
-                       // golang.org/issue/5261
-                       gccargs = append(gccargs, "-mmacosx-version-min=10.6")
-               }
-       }
-       if ldargs == nil && defaultldflags != "" {
-               ldargs = splitfields(defaultldflags)
-       }
-
-       isgo := true
        ispkg := !strings.HasPrefix(dir, "cmd/") || strings.HasPrefix(dir, "cmd/internal/") || strings.HasPrefix(dir, "cmd/asm/internal/")
-       islib := false
-
-       // Legacy C exceptions.
-       switch dir {
-       case "lib9", "libbio", "liblink", "cmd/gc", "cmd/ld":
-               islib = true
-               isgo = false
-       }
 
        // Start final link command line.
        // Note: code below knows that link.p[targ] is the target.
@@ -603,27 +527,13 @@ func install(dir string) {
                targ      int
                ispackcmd bool
        )
-       switch {
-       case islib:
-               // C library.
-               prefix := ""
-               if !strings.HasPrefix(name, "lib") {
-                       prefix = "lib"
-               }
-               link = []string{"ar", "rsc", pathf("%s/pkg/obj/%s_%s/%s%s.a", goroot, gohostos, gohostarch, prefix, name)}
-               if gohostos == "plan9" {
-                       link[1] = "rc"
-               }
-               targ = len(link) - 1
-
-       case ispkg:
+       if ispkg {
                // Go library (package).
                ispackcmd = true
                link = []string{"pack", pathf("%s/pkg/%s_%s/%s.a", goroot, goos, goarch, dir)}
                targ = len(link) - 1
                xmkdirall(filepath.Dir(link[targ]))
-
-       case dir == "cmd/go" || dir == "cmd/cgo":
+       } else {
                // Go command.
                elem := name
                if elem == "go" {
@@ -631,27 +541,6 @@ func install(dir string) {
                }
                link = []string{fmt.Sprintf("%s/%sl", tooldir, gochar), "-o", pathf("%s/%s%s", tooldir, elem, exe)}
                targ = len(link) - 1
-
-       default:
-               // C command. Use gccargs and ldargs.
-               if gohostos == "plan9" {
-                       link = []string{fmt.Sprintf("%sl", gohostchar), "-o", pathf("%s/%s", tooldir, name)}
-                       targ = len(link) - 1
-               } else {
-                       link = append(link, gccargs...)
-                       link = append(link, ldargs...)
-                       if sflag {
-                               link = append(link, "-static")
-                       }
-                       link = append(link, "-o", pathf("%s/%s%s", tooldir, name, exe))
-                       targ = len(link) - 1
-                       switch gohostarch {
-                       case "amd64":
-                               link = append(link, "-m64")
-                       case "386":
-                               link = append(link, "-m32")
-                       }
-               }
        }
        ttarg := mtime(link[targ])
 
@@ -669,30 +558,11 @@ func install(dir string) {
                return !strings.HasPrefix(p, ".") && (!strings.HasPrefix(p, "_") || !strings.HasSuffix(p, ".go"))
        })
 
-       var libs []string
-
        for _, dt := range deptab {
                if dir == dt.prefix || strings.HasSuffix(dt.prefix, "/") && strings.HasPrefix(dir, dt.prefix) {
                        for _, p := range dt.dep {
                                p = os.ExpandEnv(p)
-                               switch {
-                               case strings.HasSuffix(p, ".a"):
-                                       libs = append(libs, p)
-
-                               case strings.HasSuffix(p, "/*"):
-                                       dir := strings.TrimSuffix(p, "/*")
-                                       for _, name := range xreaddir(pathf("%s/%s", path, dir)) {
-                                               files = append(files, pathf("%s/%s", dir, name))
-                                       }
-
-                               case strings.HasPrefix(p, "-"):
-                                       files = filter(files, func(s string) bool {
-                                               return !strings.HasPrefix(s, p[1:])
-                                       })
-
-                               default:
-                                       files = append(files, p)
-                               }
+                               files = append(files, p)
                        }
                }
        }
@@ -737,15 +607,6 @@ func install(dir string) {
                return
        }
 
-       if !stale {
-               for _, p := range libs {
-                       if mtime(p).After(ttarg) {
-                               stale = true
-                               break
-                       }
-               }
-       }
-
        if !stale {
                return
        }
@@ -788,7 +649,7 @@ func install(dir string) {
        built:
        }
 
-       if (goos != gohostos || goarch != gohostarch) && isgo {
+       if goos != gohostos || goarch != gohostarch {
                // We've generated the right files; the go command can do the build.
                if vflag > 1 {
                        errprintf("skip build for cross-compile %s\n", dir)
@@ -797,111 +658,47 @@ func install(dir string) {
        }
 
        var archive string
-       if isgo {
-               // The next loop will compile individual non-Go files.
-               // Hand the Go files to the compiler en masse.
-               // For package runtime, this writes go_asm.h, which
-               // the assembly files will need.
-               pkg := dir
-               if strings.HasPrefix(dir, "cmd/") {
-                       pkg = "main"
-               }
-               b := pathf("%s/_go_.a", workdir)
-               clean = append(clean, b)
-               if !ispackcmd {
-                       link = append(link, b)
-               } else {
-                       archive = b
-               }
-               compile := []string{pathf("%s/%sg", tooldir, gochar), "-pack", "-o", b, "-p", pkg}
-               if dir == "runtime" {
-                       compile = append(compile, "-+", "-asmhdr", pathf("%s/go_asm.h", workdir))
-               }
-               compile = append(compile, gofiles...)
-               run(path, CheckExit|ShowOutput, compile...)
+       // The next loop will compile individual non-Go files.
+       // Hand the Go files to the compiler en masse.
+       // For package runtime, this writes go_asm.h, which
+       // the assembly files will need.
+       pkg := dir
+       if strings.HasPrefix(dir, "cmd/") {
+               pkg = "main"
+       }
+       b := pathf("%s/_go_.a", workdir)
+       clean = append(clean, b)
+       if !ispackcmd {
+               link = append(link, b)
+       } else {
+               archive = b
+       }
+       compile := []string{pathf("%s/%sg", tooldir, gochar), "-pack", "-o", b, "-p", pkg}
+       if dir == "runtime" {
+               compile = append(compile, "-+", "-asmhdr", pathf("%s/go_asm.h", workdir))
        }
+       compile = append(compile, gofiles...)
+       run(path, CheckExit|ShowOutput, compile...)
 
        // Compile the files.
        for _, p := range files {
-               if !strings.HasSuffix(p, ".c") && !strings.HasSuffix(p, ".s") {
+               if !strings.HasSuffix(p, ".s") {
                        continue
                }
-               name := filepath.Base(p)
 
                var compile []string
-               if !isgo {
-                       // C library or tool.
-                       if gohostos == "plan9" {
-                               compile = []string{
-                                       gohostchar + "c", "-FTVwp",
-                                       "-DPLAN9",
-                                       "-D__STDC__=1",
-                                       "-D__SIZE_TYPE__=ulong", // for GNU bison
-                                       pathf("-I%s/include/plan9", goroot),
-                                       pathf("-I%s/include/plan9/%s", goroot, gohostarch),
-                               }
-                       } else {
-                               compile = gccargs[0:len(gccargs):len(gccargs)]
-                               compile = append(compile, "-c")
-                               switch gohostarch {
-                               case "amd64":
-                                       compile = append(compile, "-m64")
-                               case "386":
-                                       compile = append(compile, "-m32")
-                               }
-                               compile = append(compile, "-I", pathf("%s/include", goroot))
-                       }
-
-                       if dir == "lib9" {
-                               compile = append(compile, "-DPLAN9PORT")
-                       }
-
-                       compile = append(compile, "-I", path)
-
-                       // lib9/goos.c gets the default constants hard-coded.
-                       if name == "goos.c" {
-                               compile = append(compile,
-                                       "-D", fmt.Sprintf("GOOS=%q", goos),
-                                       "-D", fmt.Sprintf("GOARCH=%q", goarch),
-                                       "-D", fmt.Sprintf("GOHOSTOS=%q", gohostos),
-                                       "-D", fmt.Sprintf("GOHOSTARCH=%q", gohostarch),
-                                       "-D", fmt.Sprintf("GOROOT=%q", goroot_final),
-                                       "-D", fmt.Sprintf("GOVERSION=%q", findgoversion()),
-                                       "-D", fmt.Sprintf("GOARM=%q", goarm),
-                                       "-D", fmt.Sprintf("GO386=%q", go386),
-                                       "-D", fmt.Sprintf("GO_EXTLINK_ENABLED=%q", goextlinkenabled),
-                               )
-                       }
-
-                       // liblink/go.c records the GOEXPERIMENT setting used during the build.
-                       if name == "go.c" {
-                               compile = append(compile,
-                                       "-D", fmt.Sprintf("GOEXPERIMENT=%q", os.Getenv("GOEXPERIMENT")))
-                       }
-               } else {
-                       // Assembly file for a Go package.
-                       compile = []string{
-                               pathf("%s/%sa", tooldir, gochar),
-                               "-I", workdir,
-                               "-I", pathf("%s/pkg/%s_%s", goroot, goos, goarch),
-                               "-D", "GOOS_" + goos,
-                               "-D", "GOARCH_" + goarch,
-                               "-D", "GOOS_GOARCH_" + goos + "_" + goarch,
-                       }
+               // Assembly file for a Go package.
+               compile = []string{
+                       pathf("%s/%sa", tooldir, gochar),
+                       "-I", workdir,
+                       "-I", pathf("%s/pkg/%s_%s", goroot, goos, goarch),
+                       "-D", "GOOS_" + goos,
+                       "-D", "GOARCH_" + goarch,
+                       "-D", "GOOS_GOARCH_" + goos + "_" + goarch,
                }
 
                doclean := true
                b := pathf("%s/%s", workdir, filepath.Base(p))
-               if !isgo && gohostos == "darwin" {
-                       // To debug C programs on OS X, it is not enough to say -ggdb
-                       // on the command line.  You have to leave the object files
-                       // lying around too.  Leave them in pkg/obj/, which does not
-                       // get removed when this tool exits.
-                       obj := pathf("%s/pkg/obj/%s", goroot, dir)
-                       xmkdirall(obj)
-                       b = pathf("%s/%s", obj, filepath.Base(p))
-                       doclean = false
-               }
 
                // Change the last character of the output file (which was c or s).
                if gohostos == "plan9" {
@@ -919,20 +716,12 @@ func install(dir string) {
        }
        bgwait()
 
-       if isgo && ispackcmd {
+       if ispackcmd {
                xremove(link[targ])
                dopack(link[targ], archive, link[targ+1:])
                return
        }
 
-       if !islib && !isgo {
-               // C binaries need the libraries explicitly, and -lm.
-               link = append(link, libs...)
-               if gohostos != "plan9" {
-                       link = append(link, "-lm")
-               }
-       }
-
        // Remove target before writing it.
        xremove(link[targ])
        run("", CheckExit|ShowOutput, link...)
@@ -1128,9 +917,6 @@ var cleantab = []string{
        "cmd/9g",
        "cmd/9l",
        "cmd/go",
-       "lib9",
-       "libbio",
-       "liblink",
 
        // Go packages.
        "bufio",
diff --git a/src/lib9/Makefile b/src/lib9/Makefile
deleted file mode 100644 (file)
index 62aba5d..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-# Copyright 2012 The Go Authors.  All rights reserved.
-# Use of this source code is governed by a BSD-style
-# license that can be found in the LICENSE file.
-
-include ../Make.dist
diff --git a/src/lib9/_exits.c b/src/lib9/_exits.c
deleted file mode 100644 (file)
index af55181..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-// +build !plan9
-
-/*
-Plan 9 from User Space src/lib9/_exits.c
-http://code.swtch.com/plan9port/src/tip/src/lib9/_exits.c
-
-Copyright 2001-2007 Russ Cox.  All Rights Reserved.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-*/
-
-#include <u.h>
-#include <libc.h>
-
-void
-_exits(char *s)
-{
-       if(s == 0 || *s == 0)
-               _exit(0);
-       _exit(exitcode(s));
-}
diff --git a/src/lib9/_p9dir.c b/src/lib9/_p9dir.c
deleted file mode 100644 (file)
index 6b5a04e..0000000
+++ /dev/null
@@ -1,184 +0,0 @@
-// +build !plan9
-
-/*
-Plan 9 from User Space src/lib9/_p9dir.c
-http://code.swtch.com/plan9port/src/tip/src/lib9/_p9dir.c
-
-Copyright 2001-2007 Russ Cox.  All Rights Reserved.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-*/
-
-#include <u.h>
-#define NOPLAN9DEFINES
-#include <libc.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <dirent.h>
-
-/*
- * Caching the last group and passwd looked up is
- * a significant win (stupidly enough) on most systems.
- * It's not safe for threaded programs, but neither is using
- * getpwnam in the first place, so I'm not too worried.
- */
-int
-_p9dir(struct stat *lst, struct stat *st, char *name, Dir *d, char **str, char *estr)
-{
-       char *s;
-       char tmp[20];
-       int sz, fd;
-
-#ifdef _WIN32
-       USED(lst);
-#endif
-       fd = -1;
-       USED(fd);
-       sz = 0;
-       if(d)
-               memset(d, 0, sizeof *d);
-
-       /* name */
-       s = strrchr(name, '/');
-       if(s)
-               s++;
-       if(!s || !*s)
-               s = name;
-       if(*s == '/')
-               s++;
-       if(*s == 0)
-               s = "/";
-       if(d){
-               if(*str + strlen(s)+1 > estr)
-                       d->name = "oops";
-               else{
-                       strcpy(*str, s);
-                       d->name = *str;
-                       *str += strlen(*str)+1;
-               }
-       }
-       sz += (int)strlen(s)+1;
-
-       /* user */
-       snprint(tmp, sizeof tmp, "%d", (int)st->st_uid);
-       s = tmp;
-       sz += (int)strlen(s)+1;
-       if(d){
-               if(*str+strlen(s)+1 > estr)
-                       d->uid = "oops";
-               else{
-                       strcpy(*str, s);
-                       d->uid = *str;
-                       *str += strlen(*str)+1;
-               }
-       }
-
-       /* group */
-       snprint(tmp, sizeof tmp, "%d", (int)st->st_gid);
-       s = tmp;
-       sz += (int)strlen(s)+1;
-       if(d){
-               if(*str + strlen(s)+1 > estr)
-                       d->gid = "oops";
-               else{
-                       strcpy(*str, s);
-                       d->gid = *str;
-                       *str += strlen(*str)+1;
-               }
-       }
-
-       if(d){
-               d->type = 'M';
-
-               d->muid = "";
-               d->qid.path = ((uvlong)st->st_dev<<32) | st->st_ino;
-#ifdef _HAVESTGEN
-               d->qid.vers = st->st_gen;
-#endif
-               if(d->qid.vers == 0)
-                       d->qid.vers = (ulong)(st->st_mtime + st->st_ctime);
-               d->mode = st->st_mode&0777;
-               d->atime = (ulong)st->st_atime;
-               d->mtime = (ulong)st->st_mtime;
-               d->length = st->st_size;
-
-               if(S_ISDIR(st->st_mode)){
-                       d->length = 0;
-                       d->mode |= DMDIR;
-                       d->qid.type = QTDIR;
-               }
-#ifdef S_ISLNK
-               if(S_ISLNK(lst->st_mode))       /* yes, lst not st */
-                       d->mode |= DMSYMLINK;
-#endif
-               if(S_ISFIFO(st->st_mode))
-                       d->mode |= DMNAMEDPIPE;
-#ifdef S_ISSOCK
-               if(S_ISSOCK(st->st_mode))
-                       d->mode |= DMSOCKET;
-#endif
-               if(S_ISBLK(st->st_mode)){
-                       d->mode |= DMDEVICE;
-                       d->qid.path = ('b'<<16)|st->st_rdev;
-               }
-               if(S_ISCHR(st->st_mode)){
-                       d->mode |= DMDEVICE;
-                       d->qid.path = ('c'<<16)|st->st_rdev;
-               }
-               /* fetch real size for disks */
-               if(S_ISBLK(st->st_mode) && (fd = open(name, O_RDONLY)) >= 0){
-                       d->length = 0;
-                       close(fd);
-               }
-#if defined(DIOCGMEDIASIZE)
-               if(isdisk(st)){
-                       int fd;
-                       off_t mediasize;
-
-                       if((fd = open(name, O_RDONLY)) >= 0){
-                               if(ioctl(fd, DIOCGMEDIASIZE, &mediasize) >= 0)
-                                       d->length = mediasize;
-                               close(fd);
-                       }
-               }
-#elif defined(_HAVEDISKLABEL)
-               if(isdisk(st)){
-                       int fd, n;
-                       struct disklabel lab;
-
-                       if((fd = open(name, O_RDONLY)) < 0)
-                               goto nosize;
-                       if(ioctl(fd, DIOCGDINFO, &lab) < 0)
-                               goto nosize;
-                       n = minor(st->st_rdev)&7;
-                       if(n >= lab.d_npartitions)
-                               goto nosize;
-
-                       d->length = (vlong)(lab.d_partitions[n].p_size) * lab.d_secsize;
-
-               nosize:
-                       if(fd >= 0)
-                               close(fd);
-               }
-#endif
-       }
-
-       return sz;
-}
-
diff --git a/src/lib9/atoi.c b/src/lib9/atoi.c
deleted file mode 100644 (file)
index 5b002df..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-// +build !plan9
-
-/*
-Plan 9 from User Space src/lib9/ato*.c
-http://code.swtch.com/plan9port/src/tip/src/lib9/atoi.c
-
-Copyright 2001-2007 Russ Cox.  All Rights Reserved.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-*/
-
-#include <u.h>
-#include <libc.h>
-
-int
-atoi(char *s)
-{
-       return (int)strtol(s, 0, 0);
-}
-
-long
-atol(char *s)
-{
-       return strtol(s, 0, 0);
-}
-
-vlong
-atoll(char *s)
-{
-       return strtoll(s, 0, 0);
-}
diff --git a/src/lib9/await.c b/src/lib9/await.c
deleted file mode 100644 (file)
index dfb155b..0000000
+++ /dev/null
@@ -1,182 +0,0 @@
-// +build !plan9
-// +build !windows
-
-/*
-Plan 9 from User Space src/lib9/await.c
-http://code.swtch.com/plan9port/src/tip/src/lib9/await.c
-
-Copyright 2001-2007 Russ Cox.  All Rights Reserved.
-Portions Copyright 2009 The Go Authors.  All Rights Reserved.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-*/
-
-#define NOPLAN9DEFINES
-#include <u.h>
-#include <libc.h>
-
-#include <signal.h>
-#include <sys/types.h>
-#include <sys/wait.h>
-#include <sys/time.h>
-#include <sys/resource.h>
-
-#ifndef WCOREDUMP      /* not on Mac OS X Tiger */
-#define WCOREDUMP(status) 0
-#endif
-
-static struct {
-       int sig;
-       char *str;
-} tab[] = {
-       SIGHUP,         "hangup",
-       SIGINT,         "interrupt",
-       SIGQUIT,                "quit",
-       SIGILL,         "sys: illegal instruction",
-       SIGTRAP,                "sys: breakpoint",
-       SIGABRT,                "sys: abort",
-#ifdef SIGEMT
-       SIGEMT,         "sys: emulate instruction executed",
-#endif
-       SIGFPE,         "sys: fp: trap",
-       SIGKILL,                "sys: kill",
-       SIGBUS,         "sys: bus error",
-       SIGSEGV,                "sys: segmentation violation",
-       SIGALRM,                "alarm",
-       SIGTERM,                "kill",
-       SIGURG,         "sys: urgent condition on socket",
-       SIGSTOP,                "sys: stop",
-       SIGTSTP,                "sys: tstp",
-       SIGCONT,                "sys: cont",
-       SIGCHLD,                "sys: child",
-       SIGTTIN,                "sys: ttin",
-       SIGTTOU,                "sys: ttou",
-#ifdef SIGIO   /* not on Mac OS X Tiger */
-       SIGIO,          "sys: i/o possible on fd",
-#endif
-       SIGXCPU,                "sys: cpu time limit exceeded",
-       SIGXFSZ,                "sys: file size limit exceeded",
-       SIGVTALRM,      "sys: virtual time alarm",
-       SIGPROF,                "sys: profiling timer alarm",
-#ifdef SIGWINCH        /* not on Mac OS X Tiger */
-       SIGWINCH,       "sys: window size change",
-#endif
-#ifdef SIGINFO
-       SIGINFO,                "sys: status request",
-#endif
-       SIGUSR1,                "sys: usr1",
-       SIGUSR2,                "sys: usr2",
-       SIGPIPE,                "sys: write on closed pipe",
-};
-
-char*
-_p9sigstr(int sig, char *tmp)
-{
-       int i;
-
-       for(i=0; i<nelem(tab); i++)
-               if(tab[i].sig == sig)
-                       return tab[i].str;
-       if(tmp == nil)
-               return nil;
-       sprint(tmp, "sys: signal %d", sig);
-       return tmp;
-}
-
-int
-_p9strsig(char *s)
-{
-       int i;
-
-       for(i=0; i<nelem(tab); i++)
-               if(strcmp(s, tab[i].str) == 0)
-                       return tab[i].sig;
-       return 0;
-}
-
-static Waitmsg*
-_wait(int pid4, int opt)
-{
-       int pid, status, cd;
-       struct rusage ru;
-       char tmp[64];
-       ulong u, s;
-       Waitmsg *w;
-
-       w = malloc(sizeof *w + 200);
-       if(w == nil)
-               return nil;
-       memset(w, 0, sizeof *w);
-       w->msg = (char*)&w[1];
-
-       for(;;){
-               /* On Linux, pid==-1 means anyone; on SunOS, it's pid==0. */
-               if(pid4 == -1)
-                       pid = wait3(&status, opt, &ru);
-               else
-                       pid = wait4(pid4, &status, opt, &ru);
-               if(pid <= 0) {
-                       free(w);
-                       return nil;
-               }
-               u = (ulong)(ru.ru_utime.tv_sec*1000+((ru.ru_utime.tv_usec+500)/1000));
-               s = (ulong)(ru.ru_stime.tv_sec*1000+((ru.ru_stime.tv_usec+500)/1000));
-               w->pid = pid;
-               w->time[0] = u;
-               w->time[1] = s;
-               w->time[2] = u+s;
-               if(WIFEXITED(status)){
-                       if(status)
-                               sprint(w->msg, "%d", status);
-                       return w;
-               }
-               if(WIFSIGNALED(status)){
-                       cd = WCOREDUMP(status);
-                       sprint(w->msg, "signal: %s", _p9sigstr(WTERMSIG(status), tmp));
-                       if(cd)
-                               strcat(w->msg, " (core dumped)");
-                       return w;
-               }
-       }
-}
-
-Waitmsg*
-p9wait(void)
-{
-       return _wait(-1, 0);
-}
-
-Waitmsg*
-p9waitfor(int pid)
-{
-       return _wait(pid, 0);
-}
-
-Waitmsg*
-p9waitnohang(void)
-{
-       return _wait(-1, WNOHANG);
-}
-
-int
-p9waitpid(void)
-{
-       int status;
-       return wait(&status);
-}
diff --git a/src/lib9/cleanname.c b/src/lib9/cleanname.c
deleted file mode 100644 (file)
index cb8fce6..0000000
+++ /dev/null
@@ -1,80 +0,0 @@
-// +build !plan9
-
-/*
-Inferno libkern/cleanname.c
-http://code.google.com/p/inferno-os/source/browse/libkern/cleanname.c
-
-       Copyright © 1994-1999 Lucent Technologies Inc.  All rights reserved.
-       Revisions Copyright © 2000-2007 Vita Nuova Holdings Limited (www.vitanuova.com).  All rights reserved.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-*/
-
-#include <u.h>
-#include <libc.h>
-
-/*
- * In place, rewrite name to compress multiple /, eliminate ., and process ..
- */
-#define SEP(x) ((x)=='/' || (x) == 0)
-char*
-cleanname(char *name)
-{
-       char *p, *q, *dotdot;
-       int rooted;
-
-       rooted = name[0] == '/';
-
-       /*
-        * invariants:
-        *      p points at beginning of path element we're considering.
-        *      q points just past the last path element we wrote (no slash).
-        *      dotdot points just past the point where .. cannot backtrack
-        *              any further (no slash).
-        */
-       p = q = dotdot = name+rooted;
-       while(*p) {
-               if(p[0] == '/') /* null element */
-                       p++;
-               else if(p[0] == '.' && SEP(p[1]))
-                       p += 1; /* don't count the separator in case it is nul */
-               else if(p[0] == '.' && p[1] == '.' && SEP(p[2])) {
-                       p += 2;
-                       if(q > dotdot) {        /* can backtrack */
-                               while(--q > dotdot && *q != '/')
-                                       ;
-                       } else if(!rooted) {    /* /.. is / but ./../ is .. */
-                               if(q != name)
-                                       *q++ = '/';
-                               *q++ = '.';
-                               *q++ = '.';
-                               dotdot = q;
-                       }
-               } else {        /* real path element */
-                       if(q != name+rooted)
-                               *q++ = '/';
-                       while((*q = *p) != '/' && *q != 0)
-                               p++, q++;
-               }
-       }
-       if(q == name)   /* empty string is really ``.'' */
-               *q++ = '.';
-       *q = '\0';
-       return name;
-}
diff --git a/src/lib9/create.c b/src/lib9/create.c
deleted file mode 100644 (file)
index 4ac7f7d..0000000
+++ /dev/null
@@ -1,85 +0,0 @@
-// +build !plan9
-
-/*
-Plan 9 from User Space src/lib9/create.c
-http://code.swtch.com/plan9port/src/tip/src/lib9/create.c
-
-Copyright 2001-2007 Russ Cox.  All Rights Reserved.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-*/
-#define _GNU_SOURCE    /* for Linux O_DIRECT */
-#include <u.h>
-#define NOPLAN9DEFINES
-#include <sys/file.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <libc.h>
-#include <sys/stat.h>
-#ifndef O_DIRECT
-#define O_DIRECT 0
-#endif
-
-int
-p9create(char *path, int mode, ulong perm)
-{
-       int fd, umode, rclose;
-
-       rclose = mode&ORCLOSE;
-       mode &= ~ORCLOSE;
-
-       /* XXX should get mode mask right? */
-       fd = -1;
-       if(perm&DMDIR){
-               if(mode != OREAD){
-                       werrstr("bad mode in directory create");
-                       goto out;
-               }
-               if(mkdir(path, perm&0777) < 0)
-                       goto out;
-               fd = open(path, O_RDONLY);
-       }else{
-               umode = (mode&3)|O_CREAT|O_TRUNC;
-               mode &= ~(3|OTRUNC);
-               if(mode&ODIRECT){
-                       umode |= O_DIRECT;
-                       mode &= ~ODIRECT;
-               }
-               if(mode&OEXCL){
-                       umode |= O_EXCL;
-                       mode &= ~OEXCL;
-               }
-               if(mode&OAPPEND){
-                       umode |= O_APPEND;
-                       mode &= ~OAPPEND;
-               }
-               if(mode){
-                       werrstr("unsupported mode in create");
-                       goto out;
-               }
-               umode |= O_BINARY;
-               fd = open(path, umode, perm);
-       }
-out:
-       if(fd >= 0){
-               if(rclose)
-                       remove(path);
-       }
-       return fd;
-}
diff --git a/src/lib9/ctime.c b/src/lib9/ctime.c
deleted file mode 100644 (file)
index e16ad4a..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-// Copyright 2011 The Go Authors.  All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// +build !plan9
-
-#define NOPLAN9DEFINES
-#include <u.h>
-#include <libc.h>
-
-char*
-p9ctime(long t)
-{
-       static char buf[100];
-       time_t tt;
-       struct tm *tm;
-       
-       tt = t;
-       tm = localtime(&tt);
-       snprint(buf, sizeof buf, "%3.3s %3.3s %02d %02d:%02d:%02d %3.3s %d\n",
-               &"SunMonTueWedThuFriSat"[tm->tm_wday*3],
-               &"JanFebMarAprMayJunJulAugSepOctNovDec"[tm->tm_mon*3],
-               tm->tm_mday,
-               tm->tm_hour,
-               tm->tm_min,
-               tm->tm_sec,
-               "XXX",  // tm_zone is unavailable on windows, and no one cares
-               tm->tm_year + 1900);
-       return buf;
-}
diff --git a/src/lib9/dirfstat.c b/src/lib9/dirfstat.c
deleted file mode 100644 (file)
index c092a2a..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-// +build !plan9
-
-/*
-Plan 9 from User Space src/lib9/dirfstat.c
-http://code.swtch.com/plan9port/src/tip/src/lib9/dirfstat.c
-
-Copyright 2001-2007 Russ Cox.  All Rights Reserved.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-*/
-#include <u.h>
-#define NOPLAN9DEFINES
-#include <libc.h>
-
-#include <sys/stat.h>
-
-extern int _p9dir(struct stat*, struct stat*, char*, Dir*, char**, char*);
-
-Dir*
-dirfstat(int fd)
-{
-       struct stat st;
-       int nstr;
-       Dir *d;
-       char *str, tmp[100];
-
-       if(fstat(fd, &st) < 0)
-               return nil;
-
-       snprint(tmp, sizeof tmp, "/dev/fd/%d", fd);
-       nstr = _p9dir(&st, &st, tmp, nil, nil, nil);
-       d = malloc(sizeof(Dir)+(size_t)nstr);
-       if(d == nil)
-               return nil;
-       memset(d, 0, sizeof(Dir)+(size_t)nstr);
-       str = (char*)&d[1];
-       _p9dir(&st, &st, tmp, d, &str, str+nstr);
-       return d;
-}
-
diff --git a/src/lib9/dirfwstat.c b/src/lib9/dirfwstat.c
deleted file mode 100644 (file)
index 4666e21..0000000
+++ /dev/null
@@ -1,84 +0,0 @@
-// +build !plan9
-
-/*
-Plan 9 from User Space src/lib9/dirfwstat.c
-http://code.swtch.com/plan9port/src/tip/src/lib9/dirfwstat.c
-
-Copyright 2001-2007 Russ Cox.  All Rights Reserved.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-*/
-
-#define NOPLAN9DEFINES
-#include <u.h>
-#include <libc.h>
-#include <sys/time.h>
-#include <sys/stat.h>
-
-#if defined(__FreeBSD__) || defined(__APPLE__) || defined(__OpenBSD__) || defined(__linux__)
-/* do nothing -- futimes exists and is fine */
-
-#elif defined(__SunOS5_9__)
-/* use futimesat */
-static int
-futimes(int fd, struct timeval *tv)
-{
-       return futimesat(fd, 0, tv);
-}
-
-#else
-/* provide dummy */
-/* rename just in case -- linux provides an unusable one */
-#undef futimes
-#define futimes myfutimes
-static int
-futimes(int fd, struct timeval *tv)
-{
-       USED(fd);
-       USED(tv);
-       werrstr("futimes not available");
-       return -1;
-}
-
-#endif
-
-int
-dirfwstat(int fd, Dir *dir)
-{
-       int ret;
-       struct timeval tv[2];
-
-       ret = 0;
-#ifndef _WIN32
-       if(~dir->mode != 0){
-               if(fchmod(fd, (mode_t)dir->mode) < 0)
-                       ret = -1;
-       }
-#endif
-       if(~dir->mtime != 0){
-               tv[0].tv_sec = (time_t)dir->mtime;
-               tv[0].tv_usec = 0;
-               tv[1].tv_sec = (time_t)dir->mtime;
-               tv[1].tv_usec = 0;
-               if(futimes(fd, tv) < 0)
-                       ret = -1;
-       }
-       return ret;
-}
-
diff --git a/src/lib9/dirstat.c b/src/lib9/dirstat.c
deleted file mode 100644 (file)
index 33f0d7c..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-// +build !plan9
-
-/*
-Plan 9 from User Space src/lib9/dirstat.c
-http://code.swtch.com/plan9port/src/tip/src/lib9/dirstat.c
-
-Copyright 2001-2007 Russ Cox.  All Rights Reserved.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-*/
-#include <u.h>
-#define NOPLAN9DEFINES
-#include <libc.h>
-
-#include <sys/stat.h>
-
-extern int _p9dir(struct stat*, struct stat*, char*, Dir*, char**, char*);
-
-Dir*
-dirstat(char *file)
-{
-       struct stat lst;
-       struct stat st;
-       int nstr;
-       Dir *d;
-       char *str;
-
-#ifdef _WIN32
-       if(stat(file, &st) < 0)
-               return nil;
-       lst = st;
-#else
-       if(lstat(file, &lst) < 0)
-               return nil;
-       st = lst;
-       if((lst.st_mode&S_IFMT) == S_IFLNK)
-               stat(file, &st);
-#endif
-
-       nstr = _p9dir(&lst, &st, file, nil, nil, nil);
-       d = malloc(sizeof(Dir)+(size_t)nstr);
-       if(d == nil)
-               return nil;
-       memset(d, 0, sizeof(Dir)+(size_t)nstr);
-       str = (char*)&d[1];
-       _p9dir(&lst, &st, file, d, &str, str+nstr);
-       return d;
-}
-
diff --git a/src/lib9/dirwstat.c b/src/lib9/dirwstat.c
deleted file mode 100644 (file)
index 22e25ff..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-// +build !plan9
-
-/*
-Plan 9 from User Space src/lib9/dirwstat.c
-http://code.swtch.com/plan9port/src/tip/src/lib9/dirwstat.c
-
-Copyright 2001-2007 Russ Cox.  All Rights Reserved.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-*/
-#include <u.h>
-#define NOPLAN9DEFINES
-#include <libc.h>
-#include <sys/time.h>
-#include <utime.h>
-
-int
-dirwstat(char *file, Dir *dir)
-{
-       struct utimbuf ub;
-
-       /* BUG handle more */
-       if(~dir->mtime == 0)
-               return 0;
-
-       ub.actime = (time_t)dir->mtime;
-       ub.modtime = (time_t)dir->mtime;
-       return utime(file, &ub);
-}
diff --git a/src/lib9/dup.c b/src/lib9/dup.c
deleted file mode 100644 (file)
index 5cac831..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-// +build !plan9
-
-/*
-Plan 9 from User Space src/lib9/dup.c
-http://code.swtch.com/plan9port/src/tip/src/lib9/dup.c
-
-Copyright 2001-2007 Russ Cox.  All Rights Reserved.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-*/
-#include <u.h>
-#include <libc.h>
-
-#undef dup
-
-int
-p9dup(int old, int new)
-{
-       if(new == -1)
-               return dup(old);
-       return dup2(old, new);
-}
diff --git a/src/lib9/errstr.c b/src/lib9/errstr.c
deleted file mode 100644 (file)
index 9d91975..0000000
+++ /dev/null
@@ -1,107 +0,0 @@
-// +build !plan9
-
-/*
-Plan 9 from User Space src/lib9/errstr.c
-http://code.swtch.com/plan9port/src/tip/src/lib9/errstr.c
-
-Copyright 2001-2007 Russ Cox.  All Rights Reserved.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-*/
-
-/*
- * We assume there's only one error buffer for the whole system.
- * If you use ffork, you need to provide a _syserrstr.  Since most
- * people will use libthread (which provides a _syserrstr), this is
- * okay.
- */
-
-#include <u.h>
-#include <errno.h>
-#include <libc.h>
-
-enum
-{
-       EPLAN9 = 0x19283745
-};
-
-char *(*_syserrstr)(void);
-static char xsyserr[ERRMAX];
-static char*
-getsyserr(void)
-{
-       char *s;
-
-       s = nil;
-       if(_syserrstr)
-               s = (*_syserrstr)();
-       if(s == nil)
-               s = xsyserr;
-       return s;
-}
-
-int
-errstr(char *err, uint n)
-{
-       char tmp[ERRMAX];
-       char *syserr;
-
-       strecpy(tmp, tmp+ERRMAX, err);
-       rerrstr(err, n);
-       syserr = getsyserr();
-       strecpy(syserr, syserr+ERRMAX, tmp);
-       errno = EPLAN9;
-       return 0;
-}
-
-void
-rerrstr(char *err, uint n)
-{
-       char *syserr;
-
-       syserr = getsyserr();
-       if(errno == EINTR)
-               strcpy(syserr, "interrupted");
-       else if(errno != EPLAN9)
-               strcpy(syserr, strerror(errno));
-       strecpy(err, err+n, syserr);
-}
-
-/* replaces __errfmt in libfmt */
-
-int
-__errfmt(Fmt *f)
-{
-       if(errno == EPLAN9)
-               return fmtstrcpy(f, getsyserr());
-       return fmtstrcpy(f, strerror(errno));
-}
-
-void
-werrstr(char *fmt, ...)
-{
-       va_list arg;
-       char buf[ERRMAX];
-
-       va_start(arg, fmt);
-       vseprint(buf, buf+ERRMAX, fmt, arg);
-       va_end(arg);
-       errstr(buf, ERRMAX);
-}
-
diff --git a/src/lib9/exec.c b/src/lib9/exec.c
deleted file mode 100644 (file)
index 8e5fc57..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-// +build !plan9
-
-/*
-Plan 9 from User Space src/lib9/exec.c
-http://code.swtch.com/plan9port/src/tip/src/lib9/exec.c
-
-Copyright 2001-2007 Russ Cox.  All Rights Reserved.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-*/
-#include <u.h>
-#include <libc.h>
-
-int
-exec(char *prog, char *argv[])
-{
-       /* to mimic plan 9 should be just exec, but execvp is a better fit for unix */
-       return execvp(prog, argv);
-}
diff --git a/src/lib9/execl.c b/src/lib9/execl.c
deleted file mode 100644 (file)
index fd4d23d..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-// +build !plan9
-
-/*
-Plan 9 from User Space src/lib9/execl.c
-http://code.swtch.com/plan9port/src/tip/src/lib9/execl.c
-
-Copyright 2001-2007 Russ Cox.  All Rights Reserved.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-*/
-#include <u.h>
-#include <libc.h>
-
-int
-execl(char *prog, ...)
-{
-       int i;
-       va_list arg;
-       char **argv;
-
-       va_start(arg, prog);
-       for(i=0; va_arg(arg, char*) != nil; i++)
-               ;
-       va_end(arg);
-
-       argv = malloc((size_t)(i+1)*sizeof(char*));
-       if(argv == nil)
-               return -1;
-
-       va_start(arg, prog);
-       for(i=0; (argv[i] = va_arg(arg, char*)) != nil; i++)
-               ;
-       va_end(arg);
-
-       exec(prog, argv);
-       free(argv);
-       return -1;
-}
-
diff --git a/src/lib9/exitcode.c b/src/lib9/exitcode.c
deleted file mode 100644 (file)
index fc86344..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-// +build !plan9
-
-/*
-Plan 9 from User Space src/lib9/exitcode.c
-http://code.swtch.com/plan9port/src/tip/src/lib9/exitcode.c
-
-Copyright 2001-2007 Russ Cox.  All Rights Reserved.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-*/
-
-#include <u.h>
-#include <libc.h>
-
-int
-exitcode(char *s)
-{
-       USED(s);
-       return 1;
-}
-
diff --git a/src/lib9/exits.c b/src/lib9/exits.c
deleted file mode 100644 (file)
index 0be7cb9..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-// +build !plan9
-
-/*
-Plan 9 from User Space src/lib9/_exits.c
-http://code.swtch.com/plan9port/src/tip/src/lib9/_exits.c
-
-Copyright 2001-2007 Russ Cox.  All Rights Reserved.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-*/
-#include <u.h>
-#include <libc.h>
-
-void
-exits(char *s)
-{
-       if(s == 0 || *s == 0)
-               exit(0);
-       exit(exitcode(s));
-}
diff --git a/src/lib9/flag.c b/src/lib9/flag.c
deleted file mode 100644 (file)
index db46b98..0000000
+++ /dev/null
@@ -1,307 +0,0 @@
-// Copyright 2012 The Go Authors.  All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-#include <u.h>
-#include <libc.h>
-
-// Flag hash.
-typedef struct Flag Flag;
-
-struct Flag
-{
-       char *name;
-       int namelen;
-       char *desc;
-       int iscount;
-       void (*set)(char*, void*);
-       void (*set2)(char*, char*, void*);
-       void *arg;
-       Flag *next;
-       Flag *allnext;
-};
-
-static Flag *curflag;
-
-static Flag *fhash[512];
-static Flag *first, *last;
-
-char *argv0;
-
-/*
- * Mac OS can't deal with files that only declare data.
- * ARGBEGIN mentions this function so that this file gets pulled in.
- */
-void __fixargv0(void) { }
-
-// FNV-1 hash. http://isthe.com/chongo/tech/comp/fnv/
-static uint32
-fnv(char *p, int n)
-{
-       uint32 h;
-       
-       h = 2166136261U;
-       while(n-- > 0)
-               h = (h*16777619) ^ (uchar)*p++;
-       return h;
-}
-
-static Flag*
-lookflag(char *name, int namelen, int creat)
-{
-       uint32 h;
-       Flag *f;
-
-       h = fnv(name, namelen) & (nelem(fhash)-1);
-       for(f=fhash[h]; f; f=f->next) {
-               if(f->namelen == namelen && memcmp(f->name, name, (size_t)namelen) == 0) {
-                       if(creat)
-                               sysfatal("multiple definitions of flag -%s", name);
-                       return f;
-               }
-       }
-       
-       if(!creat)
-               return nil;
-
-       f = malloc(sizeof *f);
-       if(f == nil)
-               sysfatal("out of memory");
-       memset(f, 0, sizeof *f);
-       f->name = name;
-       f->namelen = namelen;
-       f->next = fhash[h];
-       if(first == nil)
-               first = f;
-       else
-               last->allnext = f;
-       last = f;
-       fhash[h] = f;
-       return f;
-}
-
-static void
-count(char *arg, void *p)
-{
-       int *ip;
-       
-       ip = p;
-       if(arg != nil)
-               *ip = atoi(arg);
-       else
-               (*ip)++;
-}
-
-void
-flagcount(char *name, char *desc, int *p)
-{
-       Flag *f;
-       
-       f = lookflag(name, (int)strlen(name), 1);
-       f->desc = desc;
-       f->iscount = 1;
-       f->set = count;
-       f->arg = p;
-}
-
-static void
-atollwhex(char *s, void *p)
-{
-       char *t;
-
-       *(int64*)p = strtoll(s, &t, 0);
-       if(*s == '\0' || *t != '\0')
-               sysfatal("invalid numeric argument -%s=%s", curflag->name, s);
-}
-
-void
-flagint64(char *name, char *desc, int64 *p)
-{
-       Flag *f;
-       
-       f = lookflag(name, (int)strlen(name), 1);
-       f->desc = desc;
-       f->set = atollwhex;
-       f->arg = p;
-}
-
-static void
-atolwhex(char *s, void *p)
-{
-       char *t;
-
-       *(int32*)p = (int32)strtol(s, &t, 0);
-       if(*s == '\0' || *t != '\0')
-               sysfatal("invalid numeric argument -%s=%s", curflag->name, s);
-}
-
-void
-flagint32(char *name, char *desc, int32 *p)
-{
-       Flag *f;
-       
-       f = lookflag(name, (int)strlen(name), 1);
-       f->desc = desc;
-       f->set = atolwhex;
-       f->arg = p;
-}
-
-static void
-string(char *s, void *p)
-{
-       *(char**)p = s;
-}
-
-void
-flagstr(char *name, char *desc, char **p)
-{
-
-       Flag *f;
-       
-       f = lookflag(name, (int)strlen(name), 1);
-       f->desc = desc;
-       f->set = string;
-       f->arg = p;
-}      
-
-static void
-fn0(char *s, void *p)
-{
-       USED(s);
-       ((void(*)(void))p)();
-}
-
-void
-flagfn0(char *name, char *desc, void (*fn)(void))
-{
-       Flag *f;
-       
-       f = lookflag(name, (int)strlen(name), 1);
-       f->desc = desc;
-       f->set = fn0;
-       f->arg = fn;
-       f->iscount = 1;
-}
-
-static void
-fn1(char *s, void *p)
-{
-       ((void(*)(char*))p)(s);
-}
-
-void
-flagfn1(char *name, char *desc, void (*fn)(char*))
-{
-       Flag *f;
-       
-       f = lookflag(name, (int)strlen(name), 1);
-       f->desc = desc;
-       f->set = fn1;
-       f->arg = fn;
-}
-
-static void
-fn2(char *s, char *t, void *p)
-{
-       ((void(*)(char*, char*))p)(s, t);
-}
-
-void
-flagfn2(char *name, char *desc, void (*fn)(char*, char*))
-{
-       Flag *f;
-       
-       f = lookflag(name, (int)strlen(name), 1);
-       f->desc = desc;
-       f->set2 = fn2;
-       f->arg = fn;
-}
-
-void
-flagparse(int *argcp, char ***argvp, void (*usage)(void))
-{
-       int argc;
-       char **argv, *p, *q;
-       char *name;
-       int namelen;
-       Flag *f;
-       
-       argc = *argcp;
-       argv = *argvp;
-
-       argv0 = argv[0];
-       argc--;
-       argv++;
-       
-       while(argc > 0) {
-               p = *argv;
-               // stop before non-flag or -
-               if(*p != '-' || p[1] == '\0')
-                       break;
-               argc--;
-               argv++;
-               // stop after --
-               if(p[1] == '-' && p[2] == '\0') {
-                       break;
-               }
-               
-               // turn --foo into -foo
-               if(p[1] == '-' && p[2] != '-')
-                       p++;
-               
-               // allow -flag=arg if present
-               name = p+1;
-               q = strchr(name, '=');
-               if(q != nil)
-                       namelen = (int)(q++ - name);
-               else
-                       namelen = (int)strlen(name);
-               f = lookflag(name, namelen, 0);
-               if(f == nil) {
-                       if(strcmp(p, "-h") == 0 || strcmp(p, "-help") == 0 || strcmp(p, "-?") == 0)
-                               usage();
-                       sysfatal("unknown flag %s", p);
-               }
-               curflag = f;
-
-               // otherwise consume next argument if non-boolean
-               if(!f->iscount && q == nil) {
-                       if(argc-- == 0)
-                               sysfatal("missing argument to flag %s", p);
-                       q = *argv++;
-               }
-               
-               // and another if we need two
-               if(f->set2 != nil) {
-                       if(argc-- == 0)
-                               sysfatal("missing second argument to flag %s", p);
-                       f->set2(q, *argv++, f->arg);
-                       continue;
-               }
-
-               f->set(q, f->arg);                      
-       }
-       
-       *argcp = argc;
-       *argvp = argv;          
-}
-
-void
-flagprint(int fd)
-{
-       Flag *f;
-       char *p, *q;
-       
-       for(f=first; f; f=f->allnext) {
-               p = f->desc;
-               if(p == nil || *p == '\0') // undocumented flag
-                       continue;
-               q = strstr(p, ": ");
-               if(q)
-                       fprint(fd, "  -%s %.*s\n    \t%s\n", f->name, utfnlen(p, q-p), p, q+2);
-               else if(f->namelen > 1)
-                       fprint(fd, "  -%s\n    \t%s\n", f->name, p);
-               else
-                       fprint(fd, "  -%s\t%s\n", f->name, p);
-       }
-}
diff --git a/src/lib9/fmt/charstod.c b/src/lib9/fmt/charstod.c
deleted file mode 100644 (file)
index b8096e8..0000000
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * The authors of this software are Rob Pike and Ken Thompson,
- * with contributions from Mike Burrows and Sean Dorward.
- *
- *     Copyright (c) 2002-2006 by Lucent Technologies.
- *     Portions Copyright (c) 2004 Google Inc.
- * 
- * Permission to use, copy, modify, and distribute this software for any
- * purpose without fee is hereby granted, provided that this entire notice
- * is included in all copies of any software which is or includes a copy
- * or modification of this software and in all copies of the supporting
- * documentation for such software.
- * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED
- * WARRANTY.  IN PARTICULAR, NEITHER THE AUTHORS NOR LUCENT TECHNOLOGIES 
- * NOR GOOGLE INC MAKE ANY REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING 
- * THE MERCHANTABILITY OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE.
- */
-
-#include <u.h>
-#include <libc.h>
-#include "fmtdef.h"
-
-/*
- * Reads a floating-point number by interpreting successive characters
- * returned by (*f)(vp).  The last call it makes to f terminates the
- * scan, so is not a character in the number.  It may therefore be
- * necessary to back up the input stream up one byte after calling charstod.
- */
-
-double
-fmtcharstod(int(*f)(void*), void *vp)
-{
-       double num, dem;
-       int neg, eneg, dig, exp, c;
-
-       num = 0;
-       neg = 0;
-       dig = 0;
-       exp = 0;
-       eneg = 0;
-
-       c = (*f)(vp);
-       while(c == ' ' || c == '\t')
-               c = (*f)(vp);
-       if(c == '-' || c == '+'){
-               if(c == '-')
-                       neg = 1;
-               c = (*f)(vp);
-       }
-       while(c >= '0' && c <= '9'){
-               num = num*10 + c-'0';
-               c = (*f)(vp);
-       }
-       if(c == '.')
-               c = (*f)(vp);
-       while(c >= '0' && c <= '9'){
-               num = num*10 + c-'0';
-               dig++;
-               c = (*f)(vp);
-       }
-       if(c == 'e' || c == 'E'){
-               c = (*f)(vp);
-               if(c == '-' || c == '+'){
-                       if(c == '-'){
-                               dig = -dig;
-                               eneg = 1;
-                       }
-                       c = (*f)(vp);
-               }
-               while(c >= '0' && c <= '9'){
-                       exp = exp*10 + c-'0';
-                       c = (*f)(vp);
-               }
-       }
-       exp -= dig;
-       if(exp < 0){
-               exp = -exp;
-               eneg = !eneg;
-       }
-       dem = __fmtpow10(exp);
-       if(eneg)
-               num /= dem;
-       else
-               num *= dem;
-       if(neg)
-               return -num;
-       return num;
-}
diff --git a/src/lib9/fmt/dofmt.c b/src/lib9/fmt/dofmt.c
deleted file mode 100644 (file)
index 3b9dc36..0000000
+++ /dev/null
@@ -1,624 +0,0 @@
-/*
- * The authors of this software are Rob Pike and Ken Thompson,
- * with contributions from Mike Burrows and Sean Dorward.
- *
- *     Copyright (c) 2002-2006 by Lucent Technologies.
- *     Portions Copyright (c) 2004 Google Inc.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose without fee is hereby granted, provided that this entire notice
- * is included in all copies of any software which is or includes a copy
- * or modification of this software and in all copies of the supporting
- * documentation for such software.
- * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED
- * WARRANTY.  IN PARTICULAR, NEITHER THE AUTHORS NOR LUCENT TECHNOLOGIES
- * NOR GOOGLE INC MAKE ANY REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING
- * THE MERCHANTABILITY OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE.
- */
-
-#include <u.h>
-#include <libc.h>
-#include "fmtdef.h"
-
-/* format the output into f->to and return the number of characters fmted  */
-int
-dofmt(Fmt *f, char *fmt)
-{
-       Rune rune, *rt, *rs;
-       Rune r;
-       char *t, *s;
-       int n, nfmt;
-
-       nfmt = f->nfmt;
-       for(;;){
-               if(f->runes){
-                       rt = (Rune*)f->to;
-                       rs = (Rune*)f->stop;
-                       while((r = (Rune)*(uchar*)fmt) && r != '%'){
-                               if(r < Runeself)
-                                       fmt++;
-                               else{
-                                       fmt += chartorune(&rune, fmt);
-                                       r = rune;
-                               }
-                               FMTRCHAR(f, rt, rs, r);
-                       }
-                       fmt++;
-                       f->nfmt += (int)(rt - (Rune *)f->to);
-                       f->to = rt;
-                       if(!r)
-                               return f->nfmt - nfmt;
-                       f->stop = rs;
-               }else{
-                       t = (char*)f->to;
-                       s = (char*)f->stop;
-                       while((r = (Rune)*(uchar*)fmt) && r != '%'){
-                               if(r < Runeself){
-                                       FMTCHAR(f, t, s, r);
-                                       fmt++;
-                               }else{
-                                       n = chartorune(&rune, fmt);
-                                       if(t + n > s){
-                                               t = (char*)__fmtflush(f, t, n);
-                                               if(t != nil)
-                                                       s = (char*)f->stop;
-                                               else
-                                                       return -1;
-                                       }
-                                       while(n--)
-                                               *t++ = *fmt++;
-                               }
-                       }
-                       fmt++;
-                       f->nfmt += (int)(t - (char *)f->to);
-                       f->to = t;
-                       if(!r)
-                               return f->nfmt - nfmt;
-                       f->stop = s;
-               }
-
-               fmt = (char*)__fmtdispatch(f, fmt, 0);
-               if(fmt == nil)
-                       return -1;
-       }
-}
-
-void *
-__fmtflush(Fmt *f, void *t, int len)
-{
-       if(f->runes)
-               f->nfmt += (int)((Rune*)t - (Rune*)f->to);
-       else
-               f->nfmt += (int)((char*)t - (char *)f->to);
-       f->to = t;
-       if(f->flush == 0 || (*f->flush)(f) == 0 || (char*)f->to + len > (char*)f->stop){
-               f->stop = f->to;
-               return nil;
-       }
-       return f->to;
-}
-
-/*
- * put a formatted block of memory sz bytes long of n runes into the output buffer,
- * left/right justified in a field of at least f->width characters (if FmtWidth is set)
- */
-int
-__fmtpad(Fmt *f, int n)
-{
-       char *t, *s;
-       int i;
-
-       t = (char*)f->to;
-       s = (char*)f->stop;
-       for(i = 0; i < n; i++)
-               FMTCHAR(f, t, s, ' ');
-       f->nfmt += (int)(t - (char *)f->to);
-       f->to = t;
-       return 0;
-}
-
-int
-__rfmtpad(Fmt *f, int n)
-{
-       Rune *t, *s;
-       int i;
-
-       t = (Rune*)f->to;
-       s = (Rune*)f->stop;
-       for(i = 0; i < n; i++)
-               FMTRCHAR(f, t, s, ' ');
-       f->nfmt += (int)(t - (Rune *)f->to);
-       f->to = t;
-       return 0;
-}
-
-int
-__fmtcpy(Fmt *f, const void *vm, int n, int sz)
-{
-       Rune *rt, *rs, r;
-       char *t, *s, *m, *me;
-       ulong fl;
-       int nc, w;
-
-       m = (char*)vm;
-       me = m + sz;
-       fl = f->flags;
-       w = 0;
-       if(fl & FmtWidth)
-               w = f->width;
-       if((fl & FmtPrec) && n > f->prec)
-               n = f->prec;
-       if(f->runes){
-               if(!(fl & FmtLeft) && __rfmtpad(f, w - n) < 0)
-                       return -1;
-               rt = (Rune*)f->to;
-               rs = (Rune*)f->stop;
-               for(nc = n; nc > 0; nc--){
-                       r = *(uchar*)m;
-                       if(r < Runeself)
-                               m++;
-                       else if((me - m) >= UTFmax || fullrune(m, (int)(me-m)))
-                               m += chartorune(&r, m);
-                       else
-                               break;
-                       FMTRCHAR(f, rt, rs, r);
-               }
-               f->nfmt += (int)(rt - (Rune *)f->to);
-               f->to = rt;
-               if(fl & FmtLeft && __rfmtpad(f, w - n) < 0)
-                       return -1;
-       }else{
-               if(!(fl & FmtLeft) && __fmtpad(f, w - n) < 0)
-                       return -1;
-               t = (char*)f->to;
-               s = (char*)f->stop;
-               for(nc = n; nc > 0; nc--){
-                       r = *(uchar*)m;
-                       if(r < Runeself)
-                               m++;
-                       else if((me - m) >= UTFmax || fullrune(m, (int)(me-m)))
-                               m += chartorune(&r, m);
-                       else
-                               break;
-                       FMTRUNE(f, t, s, r);
-               }
-               f->nfmt += (int)(t - (char *)f->to);
-               f->to = t;
-               if(fl & FmtLeft && __fmtpad(f, w - n) < 0)
-                       return -1;
-       }
-       return 0;
-}
-
-int
-__fmtrcpy(Fmt *f, const void *vm, int n)
-{
-       Rune r, *m, *me, *rt, *rs;
-       char *t, *s;
-       ulong fl;
-       int w;
-
-       m = (Rune*)vm;
-       fl = f->flags;
-       w = 0;
-       if(fl & FmtWidth)
-               w = f->width;
-       if((fl & FmtPrec) && n > f->prec)
-               n = f->prec;
-       if(f->runes){
-               if(!(fl & FmtLeft) && __rfmtpad(f, w - n) < 0)
-                       return -1;
-               rt = (Rune*)f->to;
-               rs = (Rune*)f->stop;
-               for(me = m + n; m < me; m++)
-                       FMTRCHAR(f, rt, rs, *m);
-               f->nfmt += (int)(rt - (Rune *)f->to);
-               f->to = rt;
-               if(fl & FmtLeft && __rfmtpad(f, w - n) < 0)
-                       return -1;
-       }else{
-               if(!(fl & FmtLeft) && __fmtpad(f, w - n) < 0)
-                       return -1;
-               t = (char*)f->to;
-               s = (char*)f->stop;
-               for(me = m + n; m < me; m++){
-                       r = *m;
-                       FMTRUNE(f, t, s, r);
-               }
-               f->nfmt += (int)(t - (char *)f->to);
-               f->to = t;
-               if(fl & FmtLeft && __fmtpad(f, w - n) < 0)
-                       return -1;
-       }
-       return 0;
-}
-
-/* fmt out one character */
-int
-__charfmt(Fmt *f)
-{
-       char x[1];
-
-       x[0] = (char)va_arg(f->args, int);
-       f->prec = 1;
-       return __fmtcpy(f, (const char*)x, 1, 1);
-}
-
-/* fmt out one rune */
-int
-__runefmt(Fmt *f)
-{
-       Rune x[1];
-
-       x[0] = (Rune)va_arg(f->args, int);
-       return __fmtrcpy(f, (const void*)x, 1);
-}
-
-/* public helper routine: fmt out a null terminated string already in hand */
-int
-fmtstrcpy(Fmt *f, char *s)
-{
-       int i, j;
-
-       if(!s)
-               return __fmtcpy(f, "<nil>", 5, 5);
-       /* if precision is specified, make sure we don't wander off the end */
-       if(f->flags & FmtPrec){
-#ifdef PLAN9PORT
-               Rune r;
-               i = 0;
-               for(j=0; j<f->prec && s[i]; j++)
-                       i += chartorune(&r, s+i);
-#else
-               /* ANSI requires precision in bytes, not Runes */
-               for(i=0; i<f->prec; i++)
-                       if(s[i] == 0)
-                               break;
-               j = utfnlen(s, i);      /* won't print partial at end */
-#endif
-               return __fmtcpy(f, s, j, i);
-       }
-       return __fmtcpy(f, s, utflen(s), (int)strlen(s));
-}
-
-/* fmt out a null terminated utf string */
-int
-__strfmt(Fmt *f)
-{
-       char *s;
-
-       s = va_arg(f->args, char *);
-       return fmtstrcpy(f, s);
-}
-
-/* public helper routine: fmt out a null terminated rune string already in hand */
-int
-fmtrunestrcpy(Fmt *f, Rune *s)
-{
-       Rune *e;
-       int n, p;
-
-       if(!s)
-               return __fmtcpy(f, "<nil>", 5, 5);
-       /* if precision is specified, make sure we don't wander off the end */
-       if(f->flags & FmtPrec){
-               p = f->prec;
-               for(n = 0; n < p; n++)
-                       if(s[n] == 0)
-                               break;
-       }else{
-               for(e = s; *e; e++)
-                       ;
-               n = (int)(e - s);
-       }
-       return __fmtrcpy(f, s, n);
-}
-
-/* fmt out a null terminated rune string */
-int
-__runesfmt(Fmt *f)
-{
-       Rune *s;
-
-       s = va_arg(f->args, Rune *);
-       return fmtrunestrcpy(f, s);
-}
-
-/* fmt a % */
-int
-__percentfmt(Fmt *f)
-{
-       Rune x[1];
-
-       x[0] = f->r;
-       f->prec = 1;
-       return __fmtrcpy(f, (const void*)x, 1);
-}
-
-/* fmt an integer */
-int
-__ifmt(Fmt *f)
-{
-       char buf[140], *p, *conv;
-       /* 140: for 64 bits of binary + 3-byte sep every 4 digits */
-       uvlong vu;
-       ulong fl, u;
-       int neg, base, i, n, w, isv;
-       int ndig, len, excess, bytelen;
-       char *grouping;
-       char *thousands;
-
-       neg = 0;
-       fl = f->flags;
-       isv = 0;
-       vu = 0;
-       u = 0;
-#ifndef PLAN9PORT
-       /*
-        * Unsigned verbs for ANSI C
-        */
-       switch(f->r){
-       case 'o':
-       case 'p':
-       case 'u':
-       case 'x':
-       case 'X':
-               fl |= FmtUnsigned;
-               fl &= ~(FmtSign|FmtSpace);
-               break;
-       }
-#endif
-       if(f->r == 'p'){
-               u = (uintptr)va_arg(f->args, void*);
-               f->r = 'x';
-               fl |= FmtUnsigned;
-       }else if(fl & FmtVLong){
-               isv = 1;
-               if(fl & FmtUnsigned)
-                       vu = va_arg(f->args, uvlong);
-               else
-                       vu = (uvlong)va_arg(f->args, vlong);
-       }else if(fl & FmtLong){
-               if(fl & FmtUnsigned)
-                       u = va_arg(f->args, ulong);
-               else
-                       u = (ulong)va_arg(f->args, long);
-       }else if(fl & FmtByte){
-               if(fl & FmtUnsigned)
-                       u = (uchar)va_arg(f->args, int);
-               else
-                       u = (ulong)(char)va_arg(f->args, int);
-       }else if(fl & FmtShort){
-               if(fl & FmtUnsigned)
-                       u = (ushort)va_arg(f->args, int);
-               else
-                       u = (ulong)(short)va_arg(f->args, int);
-       }else{
-               if(fl & FmtUnsigned)
-                       u = va_arg(f->args, uint);
-               else
-                       u = (ulong)va_arg(f->args, int);
-       }
-       conv = "0123456789abcdef";
-       grouping = "\4";        /* for hex, octal etc. (undefined by spec but nice) */
-       thousands = f->thousands;
-       switch(f->r){
-       case 'd':
-       case 'i':
-       case 'u':
-               base = 10;
-               grouping = f->grouping;
-               break;
-       case 'X':
-               conv = "0123456789ABCDEF";
-               /* fall through */
-       case 'x':
-               base = 16;
-               thousands = ":";
-               break;
-       case 'b':
-               base = 2;
-               thousands = ":";
-               break;
-       case 'o':
-               base = 8;
-               break;
-       default:
-               return -1;
-       }
-       if(!(fl & FmtUnsigned)){
-               if(isv && (vlong)vu < 0){
-                       vu = (uvlong)-(vlong)vu;
-                       neg = 1;
-               }else if(!isv && (long)u < 0){
-                       u = (ulong)-(long)u;
-                       neg = 1;
-               }
-       }
-       p = buf + sizeof buf - 1;
-       n = 0;  /* in runes */
-       excess = 0;     /* number of bytes > number runes */
-       ndig = 0;
-       len = utflen(thousands);
-       bytelen = (int)strlen(thousands);
-       if(isv){
-               while(vu){
-                       i = (int)(vu % (uvlong)base);
-                       vu /= (uvlong)base;
-                       if((fl & FmtComma) && n % 4 == 3){
-                               *p-- = ',';
-                               n++;
-                       }
-                       if((fl & FmtApost) && __needsep(&ndig, &grouping)){
-                               n += len;
-                               excess += bytelen - len;
-                               p -= bytelen;
-                               memmove(p+1, thousands, (size_t)bytelen);
-                       }
-                       *p-- = conv[i];
-                       n++;
-               }
-       }else{
-               while(u){
-                       i = (int)(u % (ulong)base);
-                       u /= (ulong)base;
-                       if((fl & FmtComma) && n % 4 == 3){
-                               *p-- = ',';
-                               n++;
-                       }
-                       if((fl & FmtApost) && __needsep(&ndig, &grouping)){
-                               n += len;
-                               excess += bytelen - len;
-                               p -= bytelen;
-                               memmove(p+1, thousands, (size_t)bytelen);
-                       }
-                       *p-- = conv[i];
-                       n++;
-               }
-       }
-       if(n == 0){
-               /*
-                * "The result of converting a zero value with
-                * a precision of zero is no characters."  - ANSI
-                *
-                * "For o conversion, # increases the precision, if and only if
-                * necessary, to force the first digit of the result to be a zero
-                * (if the value and precision are both 0, a single 0 is printed)." - ANSI
-                */
-               if(!(fl & FmtPrec) || f->prec != 0 || (f->r == 'o' && (fl & FmtSharp))){
-                       *p-- = '0';
-                       n = 1;
-                       if(fl & FmtApost)
-                               __needsep(&ndig, &grouping);
-               }
-       }
-       for(w = f->prec; n < w && p > buf+3; n++){
-               if((fl & FmtApost) && __needsep(&ndig, &grouping)){
-                       n += len;
-                       excess += bytelen - len;
-                       p -= bytelen;
-                       memmove(p+1, thousands, (size_t)bytelen);
-               }
-               *p-- = '0';
-       }
-       if(neg || (fl & (FmtSign|FmtSpace)))
-               n++;
-       if(fl & FmtSharp){
-               if(base == 16)
-                       n += 2;
-               else if(base == 8){
-                       if(p[1] == '0')
-                               fl &= ~(ulong)FmtSharp;
-                       else
-                               n++;
-               }
-       }
-       if((fl & FmtZero) && !(fl & (FmtLeft|FmtPrec))){
-               w = 0;
-               if(fl & FmtWidth)
-                       w = f->width;
-               for(; n < w && p > buf+3; n++){
-                       if((fl & FmtApost) && __needsep(&ndig, &grouping)){
-                               n += len;
-                               excess += bytelen - len;
-                               p -= bytelen;
-                               memmove(p+1, thousands, (size_t)bytelen);
-                       }
-                       *p-- = '0';
-               }
-               f->flags &= ~(ulong)FmtWidth;
-       }
-       if(fl & FmtSharp){
-               if(base == 16)
-                       *p-- = (char)f->r;
-               if(base == 16 || base == 8)
-                       *p-- = '0';
-       }
-       if(neg)
-               *p-- = '-';
-       else if(fl & FmtSign)
-               *p-- = '+';
-       else if(fl & FmtSpace)
-               *p-- = ' ';
-       f->flags &= ~(ulong)FmtPrec;
-       return __fmtcpy(f, p + 1, n, n + excess);
-}
-
-int
-__countfmt(Fmt *f)
-{
-       void *p;
-       ulong fl;
-
-       fl = f->flags;
-       p = va_arg(f->args, void*);
-       if(fl & FmtVLong){
-               *(vlong*)p = f->nfmt;
-       }else if(fl & FmtLong){
-               *(long*)p = f->nfmt;
-       }else if(fl & FmtByte){
-               *(char*)p = (char)f->nfmt;
-       }else if(fl & FmtShort){
-               *(short*)p = (short)f->nfmt;
-       }else{
-               *(int*)p = f->nfmt;
-       }
-       return 0;
-}
-
-int
-__flagfmt(Fmt *f)
-{
-       switch(f->r){
-       case ',':
-               f->flags |= FmtComma;
-               break;
-       case '-':
-               f->flags |= FmtLeft;
-               break;
-       case '+':
-               f->flags |= FmtSign;
-               break;
-       case '#':
-               f->flags |= FmtSharp;
-               break;
-       case '\'':
-               f->flags |= FmtApost;
-               break;
-       case ' ':
-               f->flags |= FmtSpace;
-               break;
-       case 'u':
-               f->flags |= FmtUnsigned;
-               break;
-       case 'h':
-               if(f->flags & FmtShort)
-                       f->flags |= FmtByte;
-               f->flags |= FmtShort;
-               break;
-       case 'L':
-               f->flags |= FmtLDouble;
-               break;
-       case 'l':
-               if(f->flags & FmtLong)
-                       f->flags |= FmtVLong;
-               f->flags |= FmtLong;
-               break;
-       }
-       return 1;
-}
-
-/* default error format */
-int
-__badfmt(Fmt *f)
-{
-       char x[2+UTFmax];
-       int n;
-
-       x[0] = '%';
-       n = 1 + runetochar(x+1, &f->r);
-       x[n++] = '%';
-       f->prec = n;
-       __fmtcpy(f, (const void*)x, n, n);
-       return 0;
-}
diff --git a/src/lib9/fmt/dorfmt.c b/src/lib9/fmt/dorfmt.c
deleted file mode 100644 (file)
index f760d47..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * The authors of this software are Rob Pike and Ken Thompson,
- * with contributions from Mike Burrows and Sean Dorward.
- *
- *     Copyright (c) 2002-2006 by Lucent Technologies.
- *     Portions Copyright (c) 2004 Google Inc.
- * 
- * Permission to use, copy, modify, and distribute this software for any
- * purpose without fee is hereby granted, provided that this entire notice
- * is included in all copies of any software which is or includes a copy
- * or modification of this software and in all copies of the supporting
- * documentation for such software.
- * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED
- * WARRANTY.  IN PARTICULAR, NEITHER THE AUTHORS NOR LUCENT TECHNOLOGIES 
- * NOR GOOGLE INC MAKE ANY REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING 
- * THE MERCHANTABILITY OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE.
- */
-
-#include <u.h>
-#include <libc.h>
-#include "fmtdef.h"
-
-/* format the output into f->to and return the number of characters fmted  */
-
-/* BUG: THIS FILE IS NOT UPDATED TO THE  NEW SPEC */
-int
-dorfmt(Fmt *f, const Rune *fmt)
-{
-       Rune *rt, *rs;
-       Rune r;
-       char *t, *s;
-       int nfmt;
-
-       nfmt = f->nfmt;
-       for(;;){
-               if(f->runes){
-                       rt = (Rune*)f->to;
-                       rs = (Rune*)f->stop;
-                       while((r = *fmt++) && r != '%'){
-                               FMTRCHAR(f, rt, rs, r);
-                       }
-                       f->nfmt += (int)(rt - (Rune *)f->to);
-                       f->to = rt;
-                       if(!r)
-                               return f->nfmt - nfmt;
-                       f->stop = rs;
-               }else{
-                       t = (char*)f->to;
-                       s = (char*)f->stop;
-                       while((r = *fmt++) && r != '%'){
-                               FMTRUNE(f, t, f->stop, r);
-                       }
-                       f->nfmt += (int)(t - (char *)f->to);
-                       f->to = t;
-                       if(!r)
-                               return f->nfmt - nfmt;
-                       f->stop = s;
-               }
-
-               fmt = (Rune*)__fmtdispatch(f, (Rune*)fmt, 1);
-               if(fmt == nil)
-                       return -1;
-       }
-}
diff --git a/src/lib9/fmt/errfmt.c b/src/lib9/fmt/errfmt.c
deleted file mode 100644 (file)
index a867093..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-// +build plan9
-
-/*
- * The authors of this software are Rob Pike and Ken Thompson,
- * with contributions from Mike Burrows and Sean Dorward.
- *
- *     Copyright (c) 2002-2006 by Lucent Technologies.
- *     Portions Copyright (c) 2004 Google Inc.
- * 
- * Permission to use, copy, modify, and distribute this software for any
- * purpose without fee is hereby granted, provided that this entire notice
- * is included in all copies of any software which is or includes a copy
- * or modification of this software and in all copies of the supporting
- * documentation for such software.
- * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED
- * WARRANTY.  IN PARTICULAR, NEITHER THE AUTHORS NOR LUCENT TECHNOLOGIES 
- * NOR GOOGLE INC MAKE ANY REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING 
- * THE MERCHANTABILITY OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE.
- */
-
-#include <u.h>
-#include <libc.h>
-#include "fmtdef.h"
-
-int
-__errfmt(Fmt *f)
-{
-       char buf[ERRMAX];
-
-       rerrstr(buf, sizeof buf);
-       return __fmtcpy(f, buf, utflen(buf), strlen(buf));
-}
diff --git a/src/lib9/fmt/fltfmt.c b/src/lib9/fmt/fltfmt.c
deleted file mode 100644 (file)
index 6fe8192..0000000
+++ /dev/null
@@ -1,683 +0,0 @@
-/*
- * The authors of this software are Rob Pike and Ken Thompson,
- * with contributions from Mike Burrows and Sean Dorward.
- *
- *     Copyright (c) 2002-2006 by Lucent Technologies.
- *     Portions Copyright (c) 2004 Google Inc.
- * 
- * Permission to use, copy, modify, and distribute this software for any
- * purpose without fee is hereby granted, provided that this entire notice
- * is included in all copies of any software which is or includes a copy
- * or modification of this software and in all copies of the supporting
- * documentation for such software.
- * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED
- * WARRANTY.  IN PARTICULAR, NEITHER THE AUTHORS NOR LUCENT TECHNOLOGIES 
- * NOR GOOGLE INC MAKE ANY REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING 
- * THE MERCHANTABILITY OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE.
- */
-
-/* Copyright (c) 2002-2006 Lucent Technologies; see LICENSE */
-#include <u.h>
-#include <errno.h>
-#include <libc.h>
-#include "fmtdef.h"
-
-enum
-{
-       FDIGIT  = 30,
-       FDEFLT  = 6,
-       NSIGNIF = 17
-};
-
-/*
- * first few powers of 10, enough for about 1/2 of the
- * total space for doubles.
- */
-static double pows10[] =
-{
-         1e0,   1e1,   1e2,   1e3,   1e4,   1e5,   1e6,   1e7,   1e8,   1e9,
-        1e10,  1e11,  1e12,  1e13,  1e14,  1e15,  1e16,  1e17,  1e18,  1e19,
-        1e20,  1e21,  1e22,  1e23,  1e24,  1e25,  1e26,  1e27,  1e28,  1e29,
-        1e30,  1e31,  1e32,  1e33,  1e34,  1e35,  1e36,  1e37,  1e38,  1e39,
-        1e40,  1e41,  1e42,  1e43,  1e44,  1e45,  1e46,  1e47,  1e48,  1e49,
-        1e50,  1e51,  1e52,  1e53,  1e54,  1e55,  1e56,  1e57,  1e58,  1e59,
-        1e60,  1e61,  1e62,  1e63,  1e64,  1e65,  1e66,  1e67,  1e68,  1e69,
-        1e70,  1e71,  1e72,  1e73,  1e74,  1e75,  1e76,  1e77,  1e78,  1e79,
-        1e80,  1e81,  1e82,  1e83,  1e84,  1e85,  1e86,  1e87,  1e88,  1e89,
-        1e90,  1e91,  1e92,  1e93,  1e94,  1e95,  1e96,  1e97,  1e98,  1e99,
-       1e100, 1e101, 1e102, 1e103, 1e104, 1e105, 1e106, 1e107, 1e108, 1e109,
-       1e110, 1e111, 1e112, 1e113, 1e114, 1e115, 1e116, 1e117, 1e118, 1e119,
-       1e120, 1e121, 1e122, 1e123, 1e124, 1e125, 1e126, 1e127, 1e128, 1e129,
-       1e130, 1e131, 1e132, 1e133, 1e134, 1e135, 1e136, 1e137, 1e138, 1e139,
-       1e140, 1e141, 1e142, 1e143, 1e144, 1e145, 1e146, 1e147, 1e148, 1e149,
-       1e150, 1e151, 1e152, 1e153, 1e154, 1e155, 1e156, 1e157, 1e158, 1e159,
-};
-
-#undef pow10
-#define        npows10 ((int)(sizeof(pows10)/sizeof(pows10[0])))
-#define        pow10(x)  fmtpow10(x)
-
-static double
-pow10(int n)
-{
-       double d;
-       int neg;
-
-       neg = 0;
-       if(n < 0){
-               neg = 1;
-               n = -n;
-       }
-
-       if(n < npows10)
-               d = pows10[n];
-       else{
-               d = pows10[npows10-1];
-               for(;;){
-                       n -= npows10 - 1;
-                       if(n < npows10){
-                               d *= pows10[n];
-                               break;
-                       }
-                       d *= pows10[npows10 - 1];
-               }
-       }
-       if(neg)
-               return 1./d;
-       return d;
-}
-
-/*
- * add 1 to the decimal integer string a of length n.
- * if 99999 overflows into 10000, return 1 to tell caller
- * to move the virtual decimal point.
- */
-static int
-xadd1(char *a, int n)
-{
-       char *b;
-       int c;
-
-       if(n < 0 || n > NSIGNIF)
-               return 0;
-       for(b = a+n-1; b >= a; b--) {
-               c = *b + 1;
-               if(c <= '9') {
-                       *b = (char)c;
-                       return 0;
-               }
-               *b = '0';
-       }
-       /*
-        * need to overflow adding digit.
-        * shift number down and insert 1 at beginning.
-        * decimal is known to be 0s or we wouldn't
-        * have gotten this far.  (e.g., 99999+1 => 00000)
-        */
-       a[0] = '1';
-       return 1;
-}
-
-/*
- * subtract 1 from the decimal integer string a.
- * if 10000 underflows into 09999, make it 99999
- * and return 1 to tell caller to move the virtual
- * decimal point.  this way, xsub1 is inverse of xadd1.
- */
-static int
-xsub1(char *a, int n)
-{
-       char *b;
-       int c;
-
-       if(n < 0 || n > NSIGNIF)
-               return 0;
-       for(b = a+n-1; b >= a; b--) {
-               c = *b - 1;
-               if(c >= '0') {
-                       if(c == '0' && b == a) {
-                               /*
-                                * just zeroed the top digit; shift everyone up.
-                                * decimal is known to be 9s or we wouldn't
-                                * have gotten this far.  (e.g., 10000-1 => 09999)
-                                */
-                               *b = '9';
-                               return 1;
-                       }
-                       *b = (char)c;
-                       return 0;
-               }
-               *b = '9';
-       }
-       /*
-        * can't get here.  the number a is always normalized
-        * so that it has a nonzero first digit.
-        */
-       abort();
-       return 0;
-}
-
-/*
- * format exponent like sprintf(p, "e%+02d", e)
- */
-static void
-xfmtexp(char *p, int e, int ucase)
-{
-       char se[9];
-       int i;
-
-       *p++ = ucase ? 'E' : 'e';
-       if(e < 0) {
-               *p++ = '-';
-               e = -e;
-       } else
-               *p++ = '+';
-       i = 0;
-       while(e) {
-               se[i++] = (char)(e % 10 + '0');
-               e /= 10;
-       }
-       while(i < 2)
-               se[i++] = '0';
-       while(i > 0)
-               *p++ = se[--i];
-       *p = '\0';
-}
-
-/*
- * compute decimal integer m, exp such that:
- *     f = m*10^exp
- *     m is as short as possible with losing exactness
- * assumes special cases (NaN, +Inf, -Inf) have been handled.
- */
-static void
-xdtoa(double f, char *s, int *exp, int *neg, int *ns)
-{
-       int d, e2, e, ee, i, ndigit;
-       int oerrno;
-       char c;
-       char tmp[NSIGNIF+10];
-       double g;
-
-       oerrno = errno; /* in case strtod smashes errno */
-
-       /*
-        * make f non-negative.
-        */
-       *neg = 0;
-       if(f < 0) {
-               f = -f;
-               *neg = 1;
-       }
-
-       /*
-        * must handle zero specially.
-        */
-       if(f == 0){
-               *exp = 0;
-               s[0] = '0';
-               s[1] = '\0';
-               *ns = 1;
-               return;
-       }
-
-       /*
-        * find g,e such that f = g*10^e.
-        * guess 10-exponent using 2-exponent, then fine tune.
-        */
-       frexp(f, &e2);
-       e = (int)(e2 * .301029995664);
-       g = f * pow10(-e);
-       while(g < 1) {
-               e--;
-               g = f * pow10(-e);
-       }
-       while(g >= 10) {
-               e++;
-               g = f * pow10(-e);
-       }
-
-       /*
-        * convert NSIGNIF digits as a first approximation.
-        */
-       for(i=0; i<NSIGNIF; i++) {
-               d = (int)g;
-               s[i] = (char)(d+'0');
-               g = (g-d) * 10;
-       }
-       s[i] = 0;
-
-       /*
-        * adjust e because s is 314159... not 3.14159...
-        */
-       e -= NSIGNIF-1;
-       xfmtexp(s+NSIGNIF, e, 0);
-
-       /*
-        * adjust conversion until strtod(s) == f exactly.
-        */
-       for(i=0; i<10; i++) {
-               g = strtod(s, nil);
-               if(f > g) {
-                       if(xadd1(s, NSIGNIF)) {
-                               /* gained a digit */
-                               e--;
-                               xfmtexp(s+NSIGNIF, e, 0);
-                       }
-                       continue;
-               }
-               if(f < g) {
-                       if(xsub1(s, NSIGNIF)) {
-                               /* lost a digit */
-                               e++;
-                               xfmtexp(s+NSIGNIF, e, 0);
-                       }
-                       continue;
-               }
-               break;
-       }
-
-       /*
-        * play with the decimal to try to simplify.
-        */
-
-       /*
-        * bump last few digits up to 9 if we can
-        */
-       for(i=NSIGNIF-1; i>=NSIGNIF-3; i--) {
-               c = s[i];
-               if(c != '9') {
-                       s[i] = '9';
-                       g = strtod(s, nil);
-                       if(g != f) {
-                               s[i] = c;
-                               break;
-                       }
-               }
-       }
-
-       /*
-        * add 1 in hopes of turning 9s to 0s
-        */
-       if(s[NSIGNIF-1] == '9') {
-               strcpy(tmp, s);
-               ee = e;
-               if(xadd1(tmp, NSIGNIF)) {
-                       ee--;
-                       xfmtexp(tmp+NSIGNIF, ee, 0);
-               }
-               g = strtod(tmp, nil);
-               if(g == f) {
-                       strcpy(s, tmp);
-                       e = ee;
-               }
-       }
-
-       /*
-        * bump last few digits down to 0 as we can.
-        */
-       for(i=NSIGNIF-1; i>=NSIGNIF-3; i--) {
-               c = s[i];
-               if(c != '0') {
-                       s[i] = '0';
-                       g = strtod(s, nil);
-                       if(g != f) {
-                               s[i] = c;
-                               break;
-                       }
-               }
-       }
-
-       /*
-        * remove trailing zeros.
-        */
-       ndigit = NSIGNIF;
-       while(ndigit > 1 && s[ndigit-1] == '0'){
-               e++;
-               --ndigit;
-       }
-       s[ndigit] = 0;
-       *exp = e;
-       *ns = ndigit;
-       errno = oerrno;
-}
-
-#ifdef PLAN9PORT
-static char *special[] = { "NaN", "NaN", "+Inf", "+Inf", "-Inf", "-Inf" };
-#else
-static char *special[] = { "nan", "NAN", "inf", "INF", "-inf", "-INF" };
-#endif
-
-int
-__efgfmt(Fmt *fmt)
-{
-       char buf[NSIGNIF+10], *dot, *digits, *p, *s, suf[10], *t;
-       double f;
-       int c, chr, dotwid, e, exp, ndigits, neg, newndigits;
-       int pad, point, prec, realchr, sign, sufwid, ucase, wid, z1, z2;
-       ulong fl;
-       Rune r, *rs, *rt;
-
-       if(fmt->flags&FmtLong)
-               f = (double)va_arg(fmt->args, long double);
-       else
-               f = va_arg(fmt->args, double);
-
-       /*
-        * extract formatting flags
-        */
-       fl = fmt->flags;
-       fmt->flags = 0;
-       prec = FDEFLT;
-       if(fl & FmtPrec)
-               prec = fmt->prec;
-       chr = (int)fmt->r;
-       ucase = 0;
-       switch(chr) {
-       case 'A':
-       case 'E':
-       case 'F':
-       case 'G':
-               chr += 'a'-'A';
-               ucase = 1;
-               break;
-       }
-
-       /*
-        * pick off special numbers.
-        */
-       if(__isNaN(f)) {
-               s = special[0+ucase];
-       special:
-               fmt->flags = fl & (FmtWidth|FmtLeft);
-               return __fmtcpy(fmt, s, (int)strlen(s), (int)strlen(s));
-       }
-       if(__isInf(f, 1)) {
-               s = special[2+ucase];
-               goto special;
-       }
-       if(__isInf(f, -1)) {
-               s = special[4+ucase];
-               goto special;
-       }
-
-       /*
-        * get exact representation.
-        */
-       digits = buf;
-       xdtoa(f, digits, &exp, &neg, &ndigits);
-
-       /*
-        * get locale's decimal point.
-        */
-       dot = fmt->decimal;
-       if(dot == nil)
-               dot = ".";
-       dotwid = utflen(dot);
-
-       /*
-        * now the formatting fun begins.
-        * compute parameters for actual fmt:
-        *
-        *      pad: number of spaces to insert before/after field.
-        *      z1: number of zeros to insert before digits
-        *      z2: number of zeros to insert after digits
-        *      point: number of digits to print before decimal point
-        *      ndigits: number of digits to use from digits[]
-        *      suf: trailing suffix, like "e-5"
-        */
-       realchr = chr;
-       switch(chr){
-       case 'g':
-               /*
-                * convert to at most prec significant digits. (prec=0 means 1)
-                */
-               if(prec == 0)
-                       prec = 1;
-               if(ndigits > prec) {
-                       if(digits[prec] >= '5' && xadd1(digits, prec))
-                               exp++;
-                       exp += ndigits-prec;
-                       ndigits = prec;
-               }
-
-               /*
-                * extra rules for %g (implemented below):
-                *      trailing zeros removed after decimal unless FmtSharp.
-                *      decimal point only if digit follows.
-                */
-
-               /* fall through to %e */
-       default:
-       case 'e':
-               /*
-                * one significant digit before decimal, no leading zeros.
-                */
-               point = 1;
-               z1 = 0;
-
-               /*
-                * decimal point is after ndigits digits right now.
-                * slide to be after first.
-                */
-               e  = exp + (ndigits-1);
-
-               /*
-                * if this is %g, check exponent and convert prec
-                */
-               if(realchr == 'g') {
-                       if(-4 <= e && e < prec)
-                               goto casef;
-                       prec--; /* one digit before decimal; rest after */
-               }
-
-               /*
-                * compute trailing zero padding or truncate digits.
-                */
-               if(1+prec >= ndigits)
-                       z2 = 1+prec - ndigits;
-               else {
-                       /*
-                        * truncate digits
-                        */
-                       assert(realchr != 'g');
-                       newndigits = 1+prec;
-                       if(digits[newndigits] >= '5' && xadd1(digits, newndigits)) {
-                               /*
-                                * had 999e4, now have 100e5
-                                */
-                               e++;
-                       }
-                       ndigits = newndigits;
-                       z2 = 0;
-               }
-               xfmtexp(suf, e, ucase);
-               sufwid = (int)strlen(suf);
-               break;
-
-       casef:
-       case 'f':
-               /*
-                * determine where digits go with respect to decimal point
-                */
-               if(ndigits+exp > 0) {
-                       point = ndigits+exp;
-                       z1 = 0;
-               } else {
-                       point = 1;
-                       z1 = 1 + -(ndigits+exp);
-               }
-
-               /*
-                * %g specifies prec = number of significant digits
-                * convert to number of digits after decimal point
-                */
-               if(realchr == 'g')
-                       prec += z1 - point;
-
-               /*
-                * compute trailing zero padding or truncate digits.
-                */
-               if(point+prec >= z1+ndigits)
-                       z2 = point+prec - (z1+ndigits);
-               else {
-                       /*
-                        * truncate digits
-                        */
-                       assert(realchr != 'g');
-                       newndigits = point+prec - z1;
-                       if(newndigits < 0) {
-                               z1 += newndigits;
-                               newndigits = 0;
-                       } else if(newndigits == 0) {
-                               /* perhaps round up */
-                               if(digits[0] >= '5'){
-                                       digits[0] = '1';
-                                       newndigits = 1;
-                                       goto newdigit;
-                               }
-                       } else if(digits[newndigits] >= '5' && xadd1(digits, newndigits)) {
-                               /*
-                                * digits was 999, is now 100; make it 1000
-                                */
-                               digits[newndigits++] = '0';
-                       newdigit:
-                               /*
-                                * account for new digit
-                                */
-                               if(z1)  /* 0.099 => 0.100 or 0.99 => 1.00*/
-                                       z1--;
-                               else    /* 9.99 => 10.00 */
-                                       point++;
-                       }
-                       z2 = 0;
-                       ndigits = newndigits;
-               }
-               sufwid = 0;
-               break;
-       }
-
-       /*
-        * if %g is given without FmtSharp, remove trailing zeros.
-        * must do after truncation, so that e.g. print %.3g 1.001
-        * produces 1, not 1.00.  sorry, but them's the rules.
-        */
-       if(realchr == 'g' && !(fl & FmtSharp)) {
-               if(z1+ndigits+z2 >= point) {
-                       if(z1+ndigits < point)
-                               z2 = point - (z1+ndigits);
-                       else{
-                               z2 = 0;
-                               while(z1+ndigits > point && digits[ndigits-1] == '0')
-                                       ndigits--;
-                       }
-               }
-       }
-
-       /*
-        * compute width of all digits and decimal point and suffix if any
-        */
-       wid = z1+ndigits+z2;
-       if(wid > point)
-               wid += dotwid;
-       else if(wid == point){
-               if(fl & FmtSharp)
-                       wid += dotwid;
-               else
-                       point++;        /* do not print any decimal point */
-       }
-       wid += sufwid;
-
-       /*
-        * determine sign
-        */
-       sign = 0;
-       if(neg)
-               sign = '-';
-       else if(fl & FmtSign)
-               sign = '+';
-       else if(fl & FmtSpace)
-               sign = ' ';
-       if(sign)
-               wid++;
-
-       /*
-        * compute padding
-        */
-       pad = 0;
-       if((fl & FmtWidth) && fmt->width > wid)
-               pad = fmt->width - wid;
-       if(pad && !(fl & FmtLeft) && (fl & FmtZero)){
-               z1 += pad;
-               point += pad;
-               pad = 0;
-       }
-
-       /*
-        * format the actual field.  too bad about doing this twice.
-        */
-       if(fmt->runes){
-               if(pad && !(fl & FmtLeft) && __rfmtpad(fmt, pad) < 0)
-                       return -1;
-               rt = (Rune*)fmt->to;
-               rs = (Rune*)fmt->stop;
-               if(sign)
-                       FMTRCHAR(fmt, rt, rs, sign);
-               while(z1>0 || ndigits>0 || z2>0) {
-                       if(z1 > 0){
-                               z1--;
-                               c = '0';
-                       }else if(ndigits > 0){
-                               ndigits--;
-                               c = *digits++;
-                       }else{
-                               z2--;
-                               c = '0';
-                       }
-                       FMTRCHAR(fmt, rt, rs, c);
-                       if(--point == 0) {
-                               for(p = dot; *p; ){
-                                       p += chartorune(&r, p);
-                                       FMTRCHAR(fmt, rt, rs, r);
-                               }
-                       }
-               }
-               fmt->nfmt += (int)(rt - (Rune*)fmt->to);
-               fmt->to = rt;
-               if(sufwid && __fmtcpy(fmt, suf, sufwid, sufwid) < 0)
-                       return -1;
-               if(pad && (fl & FmtLeft) && __rfmtpad(fmt, pad) < 0)
-                       return -1;
-       }else{
-               if(pad && !(fl & FmtLeft) && __fmtpad(fmt, pad) < 0)
-                       return -1;
-               t = (char*)fmt->to;
-               s = (char*)fmt->stop;
-               if(sign)
-                       FMTCHAR(fmt, t, s, sign);
-               while(z1>0 || ndigits>0 || z2>0) {
-                       if(z1 > 0){
-                               z1--;
-                               c = '0';
-                       }else if(ndigits > 0){
-                               ndigits--;
-                               c = *digits++;
-                       }else{
-                               z2--;
-                               c = '0';
-                       }
-                       FMTCHAR(fmt, t, s, c);
-                       if(--point == 0)
-                               for(p=dot; *p; p++)
-                                       FMTCHAR(fmt, t, s, *p);
-               }
-               fmt->nfmt += (int)(t - (char*)fmt->to);
-               fmt->to = t;
-               if(sufwid && __fmtcpy(fmt, suf, sufwid, sufwid) < 0)
-                       return -1;
-               if(pad && (fl & FmtLeft) && __fmtpad(fmt, pad) < 0)
-                       return -1;
-       }
-       return 0;
-}
-
diff --git a/src/lib9/fmt/fmt.c b/src/lib9/fmt/fmt.c
deleted file mode 100644 (file)
index 7e57677..0000000
+++ /dev/null
@@ -1,235 +0,0 @@
-/*
- * The authors of this software are Rob Pike and Ken Thompson,
- * with contributions from Mike Burrows and Sean Dorward.
- *
- *     Copyright (c) 2002-2006 by Lucent Technologies.
- *     Portions Copyright (c) 2004 Google Inc.
- * 
- * Permission to use, copy, modify, and distribute this software for any
- * purpose without fee is hereby granted, provided that this entire notice
- * is included in all copies of any software which is or includes a copy
- * or modification of this software and in all copies of the supporting
- * documentation for such software.
- * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED
- * WARRANTY.  IN PARTICULAR, NEITHER THE AUTHORS NOR LUCENT TECHNOLOGIES 
- * NOR GOOGLE INC MAKE ANY REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING 
- * THE MERCHANTABILITY OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE.
- */
-
-#include <u.h>
-#include <libc.h>
-#include "fmtdef.h"
-
-enum
-{
-       Maxfmt = 64
-};
-
-typedef struct Convfmt Convfmt;
-struct Convfmt
-{
-       int     c;
-       volatile        Fmts    fmt;    /* for spin lock in fmtfmt; avoids race due to write order */
-};
-
-static struct
-{
-       /* lock by calling __fmtlock, __fmtunlock */
-       int     nfmt;
-       Convfmt fmt[Maxfmt];
-} fmtalloc;
-
-static Convfmt knownfmt[] = {
-       ' ',    __flagfmt,
-       '#',    __flagfmt,
-       '%',    __percentfmt,
-       '\'',   __flagfmt,
-       '+',    __flagfmt,
-       ',',    __flagfmt,
-       '-',    __flagfmt,
-       'C',    __runefmt,      /* Plan 9 addition */
-       'E',    __efgfmt,
-#ifndef PLAN9PORT
-       'F',    __efgfmt,       /* ANSI only */
-#endif
-       'G',    __efgfmt,
-#ifndef PLAN9PORT
-       'L',    __flagfmt,      /* ANSI only */
-#endif
-       'S',    __runesfmt,     /* Plan 9 addition */
-       'X',    __ifmt,
-       'b',    __ifmt,         /* Plan 9 addition */
-       'c',    __charfmt,
-       'd',    __ifmt,
-       'e',    __efgfmt,
-       'f',    __efgfmt,
-       'g',    __efgfmt,
-       'h',    __flagfmt,
-#ifndef PLAN9PORT
-       'i',    __ifmt,         /* ANSI only */
-#endif
-       'l',    __flagfmt,
-       'n',    __countfmt,
-       'o',    __ifmt,
-       'p',    __ifmt,
-       'r',    __errfmt,
-       's',    __strfmt,
-#ifdef PLAN9PORT
-       'u',    __flagfmt,
-#else
-       'u',    __ifmt,
-#endif
-       'x',    __ifmt,
-       0,      nil,
-};
-
-
-int    (*fmtdoquote)(int);
-
-/*
- * __fmtlock() must be set
- */
-static int
-__fmtinstall(int c, Fmts f)
-{
-       Convfmt *p, *ep;
-
-       if(c<=0 || c>=65536)
-               return -1;
-       if(!f)
-               f = __badfmt;
-
-       ep = &fmtalloc.fmt[fmtalloc.nfmt];
-       for(p=fmtalloc.fmt; p<ep; p++)
-               if(p->c == c)
-                       break;
-
-       if(p == &fmtalloc.fmt[Maxfmt])
-               return -1;
-
-       p->fmt = f;
-       if(p == ep){    /* installing a new format character */
-               fmtalloc.nfmt++;
-               p->c = c;
-       }
-
-       return 0;
-}
-
-int
-fmtinstall(int c, int (*f)(Fmt*))
-{
-       int ret;
-
-       __fmtlock();
-       ret = __fmtinstall(c, f);
-       __fmtunlock();
-       return ret;
-}
-
-static Fmts
-fmtfmt(int c)
-{
-       Convfmt *p, *ep;
-
-       ep = &fmtalloc.fmt[fmtalloc.nfmt];
-       for(p=fmtalloc.fmt; p<ep; p++)
-               if(p->c == c){
-                       while(p->fmt == nil)    /* loop until value is updated */
-                               ;
-                       return p->fmt;
-               }
-
-       /* is this a predefined format char? */
-       __fmtlock();
-       for(p=knownfmt; p->c; p++)
-               if(p->c == c){
-                       __fmtinstall(p->c, p->fmt);
-                       __fmtunlock();
-                       return p->fmt;
-               }
-       __fmtunlock();
-
-       return __badfmt;
-}
-
-void*
-__fmtdispatch(Fmt *f, void *fmt, int isrunes)
-{
-       Rune rune, r;
-       int i, n;
-
-       f->flags = 0;
-       f->width = f->prec = 0;
-
-       for(;;){
-               if(isrunes){
-                       r = *(Rune*)fmt;
-                       fmt = (Rune*)fmt + 1;
-               }else{
-                       fmt = (char*)fmt + chartorune(&rune, (char*)fmt);
-                       r = rune;
-               }
-               f->r = r;
-               switch(r){
-               case '\0':
-                       return nil;
-               case '.':
-                       f->flags |= FmtWidth|FmtPrec;
-                       continue;
-               case '0':
-                       if(!(f->flags & FmtWidth)){
-                               f->flags |= FmtZero;
-                               continue;
-                       }
-                       /* fall through */
-               case '1': case '2': case '3': case '4':
-               case '5': case '6': case '7': case '8': case '9':
-                       i = 0;
-                       while(r >= '0' && r <= '9'){
-                               i = i * 10 + (int)r - '0';
-                               if(isrunes){
-                                       r = *(Rune*)fmt;
-                                       fmt = (Rune*)fmt + 1;
-                               }else{
-                                       r = (Rune)*(char*)fmt;
-                                       fmt = (char*)fmt + 1;
-                               }
-                       }
-                       if(isrunes)
-                               fmt = (Rune*)fmt - 1;
-                       else
-                               fmt = (char*)fmt - 1;
-               numflag:
-                       if(f->flags & FmtWidth){
-                               f->flags |= FmtPrec;
-                               f->prec = i;
-                       }else{
-                               f->flags |= FmtWidth;
-                               f->width = i;
-                       }
-                       continue;
-               case '*':
-                       i = va_arg(f->args, int);
-                       if(i < 0){
-                               /*
-                                * negative precision =>
-                                * ignore the precision.
-                                */
-                               if(f->flags & FmtPrec){
-                                       f->flags &= ~(ulong)FmtPrec;
-                                       f->prec = 0;
-                                       continue;
-                               }
-                               i = -i;
-                               f->flags |= FmtLeft;
-                       }
-                       goto numflag;
-               }
-               n = (*fmtfmt((int)r))(f);
-               if(n < 0)
-                       return nil;
-               if(n == 0)
-                       return fmt;
-       }
-}
diff --git a/src/lib9/fmt/fmtdef.h b/src/lib9/fmt/fmtdef.h
deleted file mode 100644 (file)
index 4bbd9f5..0000000
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
- * The authors of this software are Rob Pike and Ken Thompson.
- *
- *     Copyright (c) 2002-2006 by Lucent Technologies.
- * 
- * Permission to use, copy, modify, and distribute this software for any
- * purpose without fee is hereby granted, provided that this entire notice
- * is included in all copies of any software which is or includes a copy
- * or modification of this software and in all copies of the supporting
- * documentation for such software.
- * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED
- * WARRANTY.  IN PARTICULAR, NEITHER THE AUTHORS NOR LUCENT TECHNOLOGIES 
- * NOR GOOGLE INC MAKE ANY REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING 
- * THE MERCHANTABILITY OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE.
- */
-
-/*
- * dofmt -- format to a buffer
- * the number of characters formatted is returned,
- * or -1 if there was an error.
- * if the buffer is ever filled, flush is called.
- * it should reset the buffer and return whether formatting should continue.
- */
-
-typedef int (*Fmts)(Fmt*);
-
-typedef struct Quoteinfo Quoteinfo;
-struct Quoteinfo
-{
-       int     quoted;         /* if set, string must be quoted */
-       int     nrunesin;       /* number of input runes that can be accepted */
-       int     nbytesin;       /* number of input bytes that can be accepted */
-       int     nrunesout;      /* number of runes that will be generated */
-       int     nbytesout;      /* number of bytes that will be generated */
-};
-
-/* Edit .+1,/^$/ |cfn |grep -v static | grep __ */
-double       __Inf(int sign);
-double       __NaN(void);
-int          __badfmt(Fmt *f);
-int          __charfmt(Fmt *f);
-int          __countfmt(Fmt *f);
-int          __efgfmt(Fmt *fmt);
-int          __errfmt(Fmt *f);
-int          __flagfmt(Fmt *f);
-int          __fmtFdFlush(Fmt *f);
-int          __fmtcpy(Fmt *f, const void *vm, int n, int sz);
-void*        __fmtdispatch(Fmt *f, void *fmt, int isrunes);
-void *       __fmtflush(Fmt *f, void *t, int len);
-void         __fmtlock(void);
-int          __fmtpad(Fmt *f, int n);
-double       __fmtpow10(int n);
-int          __fmtrcpy(Fmt *f, const void *vm, int n);
-void         __fmtunlock(void);
-int          __ifmt(Fmt *f);
-int          __isInf(double d, int sign);
-int          __isNaN(double d);
-int          __needsep(int*, char**);
-int          __needsquotes(char *s, int *quotelenp);
-int          __percentfmt(Fmt *f);
-void         __quotesetup(char *s, Rune *r, int nin, int nout, Quoteinfo *q, int sharp, int runesout);
-int          __quotestrfmt(int runesin, Fmt *f);
-int          __rfmtpad(Fmt *f, int n);
-int          __runefmt(Fmt *f);
-int          __runeneedsquotes(Rune *r, int *quotelenp);
-int          __runesfmt(Fmt *f);
-int          __strfmt(Fmt *f);
-
-#define FMTCHAR(f, t, s, c)\
-       do{\
-       if(t + 1 > (char*)s){\
-               t = (char*)__fmtflush(f, t, 1);\
-               if(t != nil)\
-                       s = (char*)f->stop;\
-               else\
-                       return -1;\
-       }\
-       *t++ = (char)c;\
-       }while(0)
-
-#define FMTRCHAR(f, t, s, c)\
-       do{\
-       if(t + 1 > (Rune*)s){\
-               t = (Rune*)__fmtflush(f, t, sizeof(Rune));\
-               if(t != nil)\
-                       s = (Rune*)f->stop;\
-               else\
-                       return -1;\
-       }\
-       *t++ = (Rune)c;\
-       }while(0)
-
-#define FMTRUNE(f, t, s, r)\
-       do{\
-       Rune _rune;\
-       int _runelen;\
-       if(t + UTFmax > (char*)s && t + (_runelen = runelen(r)) > (char*)s){\
-               t = (char*)__fmtflush(f, t, _runelen);\
-               if(t != nil)\
-                       s = (char*)f->stop;\
-               else\
-                       return -1;\
-       }\
-       if(r < Runeself)\
-               *t++ = (char)r;\
-       else{\
-               _rune = r;\
-               t += runetochar(t, &_rune);\
-       }\
-       }while(0)
-
-#ifdef va_copy
-#      define VA_COPY(a,b) va_copy(a,b)
-#      define VA_END(a) va_end(a)
-#else
-#      define VA_COPY(a,b) (a) = (b)
-#      define VA_END(a)
-#endif
-
diff --git a/src/lib9/fmt/fmtfd.c b/src/lib9/fmt/fmtfd.c
deleted file mode 100644 (file)
index dde05b7..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * The authors of this software are Rob Pike and Ken Thompson,
- * with contributions from Mike Burrows and Sean Dorward.
- *
- *     Copyright (c) 2002-2006 by Lucent Technologies.
- *     Portions Copyright (c) 2004 Google Inc.
- * 
- * Permission to use, copy, modify, and distribute this software for any
- * purpose without fee is hereby granted, provided that this entire notice
- * is included in all copies of any software which is or includes a copy
- * or modification of this software and in all copies of the supporting
- * documentation for such software.
- * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED
- * WARRANTY.  IN PARTICULAR, NEITHER THE AUTHORS NOR LUCENT TECHNOLOGIES 
- * NOR GOOGLE INC MAKE ANY REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING 
- * THE MERCHANTABILITY OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE.
- */
-
-#include <u.h>
-#include <libc.h>
-#include "fmtdef.h"
-
-/*
- * public routine for final flush of a formatting buffer
- * to a file descriptor; returns total char count.
- */
-int
-fmtfdflush(Fmt *f)
-{
-       if(__fmtFdFlush(f) <= 0)
-               return -1;
-       return f->nfmt;
-}
-
-/*
- * initialize an output buffer for buffered printing
- */
-int
-fmtfdinit(Fmt *f, int fd, char *buf, int size)
-{
-       f->runes = 0;
-       f->start = buf;
-       f->to = buf;
-       f->stop = buf + size;
-       f->flush = __fmtFdFlush;
-       f->farg = (void*)(uintptr)fd;
-       f->flags = 0;
-       f->nfmt = 0;
-       fmtlocaleinit(f, nil, nil, nil);
-       return 0;
-}
diff --git a/src/lib9/fmt/fmtfdflush.c b/src/lib9/fmt/fmtfdflush.c
deleted file mode 100644 (file)
index 401acbe..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * The authors of this software are Rob Pike and Ken Thompson,
- * with contributions from Mike Burrows and Sean Dorward.
- *
- *     Copyright (c) 2002-2006 by Lucent Technologies.
- *     Portions Copyright (c) 2004 Google Inc.
- * 
- * Permission to use, copy, modify, and distribute this software for any
- * purpose without fee is hereby granted, provided that this entire notice
- * is included in all copies of any software which is or includes a copy
- * or modification of this software and in all copies of the supporting
- * documentation for such software.
- * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED
- * WARRANTY.  IN PARTICULAR, NEITHER THE AUTHORS NOR LUCENT TECHNOLOGIES 
- * NOR GOOGLE INC MAKE ANY REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING 
- * THE MERCHANTABILITY OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE.
- */
-
-#include <u.h>
-#include <libc.h>
-#include "fmtdef.h"
-
-/*
- * generic routine for flushing a formatting buffer
- * to a file descriptor
- */
-int
-__fmtFdFlush(Fmt *f)
-{
-       int n;
-
-       n = (int)((char*)f->to - (char*)f->start);
-       if(n && (int)write((int)(uintptr)f->farg, f->start, (size_t)n) != n)
-               return 0;
-       f->to = f->start;
-       return 1;
-}
diff --git a/src/lib9/fmt/fmtlocale.c b/src/lib9/fmt/fmtlocale.c
deleted file mode 100644 (file)
index 64ed10f..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * The authors of this software are Rob Pike and Ken Thompson,
- * with contributions from Mike Burrows and Sean Dorward.
- *
- *     Copyright (c) 2002-2006 by Lucent Technologies.
- *     Portions Copyright (c) 2004 Google Inc.
- * 
- * Permission to use, copy, modify, and distribute this software for any
- * purpose without fee is hereby granted, provided that this entire notice
- * is included in all copies of any software which is or includes a copy
- * or modification of this software and in all copies of the supporting
- * documentation for such software.
- * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED
- * WARRANTY.  IN PARTICULAR, NEITHER THE AUTHORS NOR LUCENT TECHNOLOGIES 
- * NOR GOOGLE INC MAKE ANY REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING 
- * THE MERCHANTABILITY OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE.
- */
-
-#include <u.h>
-#include <libc.h>
-#include "fmtdef.h"
-
-/*
- * Fill in the internationalization stuff in the State structure.
- * For nil arguments, provide the sensible defaults:
- *     decimal is a period
- *     thousands separator is a comma
- *     thousands are marked every three digits
- */
-void
-fmtlocaleinit(Fmt *f, char *decimal, char *thousands, char *grouping)
-{
-       if(decimal == nil || decimal[0] == '\0')
-               decimal = ".";
-       if(thousands == nil)
-               thousands = ",";
-       if(grouping == nil)
-               grouping = "\3";
-       f->decimal = decimal;
-       f->thousands = thousands;
-       f->grouping = grouping;
-}
-
-/*
- * We are about to emit a digit in e.g. %'d.  If that digit would
- * overflow a thousands (e.g.) grouping, tell the caller to emit
- * the thousands separator.  Always advance the digit counter
- * and pointer into the grouping descriptor.
- */
-int
-__needsep(int *ndig, char **grouping)
-{
-       int group;
-
-       (*ndig)++;
-       group = *(unsigned char*)*grouping;
-       /* CHAR_MAX means no further grouping. \0 means we got the empty string */
-       if(group == 0xFF || group == 0x7f || group == 0x00)
-               return 0;
-       if(*ndig > group){
-               /* if we're at end of string, continue with this grouping; else advance */
-               if((*grouping)[1] != '\0')
-                       (*grouping)++;
-               *ndig = 1;
-               return 1;
-       }
-       return 0;
-}
-
diff --git a/src/lib9/fmt/fmtlock.c b/src/lib9/fmt/fmtlock.c
deleted file mode 100644 (file)
index 297acd8..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * The authors of this software are Rob Pike and Ken Thompson,
- * with contributions from Mike Burrows and Sean Dorward.
- *
- *     Copyright (c) 2002-2006 by Lucent Technologies.
- *     Portions Copyright (c) 2004 Google Inc.
- * 
- * Permission to use, copy, modify, and distribute this software for any
- * purpose without fee is hereby granted, provided that this entire notice
- * is included in all copies of any software which is or includes a copy
- * or modification of this software and in all copies of the supporting
- * documentation for such software.
- * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED
- * WARRANTY.  IN PARTICULAR, NEITHER THE AUTHORS NOR LUCENT TECHNOLOGIES 
- * NOR GOOGLE INC MAKE ANY REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING 
- * THE MERCHANTABILITY OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE.
- */
-
-#include <u.h>
-#include <libc.h>
-#include "fmtdef.h"
-
-void
-__fmtlock(void)
-{
-}
-
-void
-__fmtunlock(void)
-{
-}
diff --git a/src/lib9/fmt/fmtnull.c b/src/lib9/fmt/fmtnull.c
deleted file mode 100644 (file)
index b8caacb..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * The authors of this software are Rob Pike and Ken Thompson,
- * with contributions from Mike Burrows and Sean Dorward.
- *
- *     Copyright (c) 2002-2006 by Lucent Technologies.
- *     Portions Copyright (c) 2004 Google Inc.
- * 
- * Permission to use, copy, modify, and distribute this software for any
- * purpose without fee is hereby granted, provided that this entire notice
- * is included in all copies of any software which is or includes a copy
- * or modification of this software and in all copies of the supporting
- * documentation for such software.
- * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED
- * WARRANTY.  IN PARTICULAR, NEITHER THE AUTHORS NOR LUCENT TECHNOLOGIES 
- * NOR GOOGLE INC MAKE ANY REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING 
- * THE MERCHANTABILITY OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE.
- */
-
-#include <u.h>
-#include <libc.h>
-#include "fmtdef.h"
-
-/*
- * Absorb output without using resources.
- */
-static Rune nullbuf[32];
-
-static int
-__fmtnullflush(Fmt *f)
-{
-       f->to = nullbuf;
-       f->nfmt = 0;
-       return 0;
-}
-
-int
-fmtnullinit(Fmt *f)
-{
-       memset(f, 0, sizeof *f);
-       f->runes = 1;
-       f->start = nullbuf;
-       f->to = nullbuf;
-       f->stop = nullbuf+nelem(nullbuf);
-       f->flush = __fmtnullflush;
-       fmtlocaleinit(f, nil, nil, nil);
-       return 0;
-}
-
diff --git a/src/lib9/fmt/fmtprint.c b/src/lib9/fmt/fmtprint.c
deleted file mode 100644 (file)
index 6848ab4..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * The authors of this software are Rob Pike and Ken Thompson,
- * with contributions from Mike Burrows and Sean Dorward.
- *
- *     Copyright (c) 2002-2006 by Lucent Technologies.
- *     Portions Copyright (c) 2004 Google Inc.
- * 
- * Permission to use, copy, modify, and distribute this software for any
- * purpose without fee is hereby granted, provided that this entire notice
- * is included in all copies of any software which is or includes a copy
- * or modification of this software and in all copies of the supporting
- * documentation for such software.
- * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED
- * WARRANTY.  IN PARTICULAR, NEITHER THE AUTHORS NOR LUCENT TECHNOLOGIES 
- * NOR GOOGLE INC MAKE ANY REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING 
- * THE MERCHANTABILITY OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE.
- */
-
-#include <u.h>
-#include <libc.h>
-#include "fmtdef.h"
-
-/*
- * Format a string into the output buffer.
- * Designed for formats which themselves call fmt.
- * Flags, precision and width are preserved.
- */
-int
-fmtprint(Fmt *f, char *fmt, ...)
-{
-       int n;
-       va_list va;
-
-       va_start(va, fmt);
-       n = fmtvprint(f, fmt, va);
-       va_end(va);
-       return n;
-}
-
diff --git a/src/lib9/fmt/fmtquote.c b/src/lib9/fmt/fmtquote.c
deleted file mode 100644 (file)
index 93b2abb..0000000
+++ /dev/null
@@ -1,274 +0,0 @@
-/*
- * The authors of this software are Rob Pike and Ken Thompson,
- * with contributions from Mike Burrows and Sean Dorward.
- *
- *     Copyright (c) 2002-2006 by Lucent Technologies.
- *     Portions Copyright (c) 2004 Google Inc.
- * 
- * Permission to use, copy, modify, and distribute this software for any
- * purpose without fee is hereby granted, provided that this entire notice
- * is included in all copies of any software which is or includes a copy
- * or modification of this software and in all copies of the supporting
- * documentation for such software.
- * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED
- * WARRANTY.  IN PARTICULAR, NEITHER THE AUTHORS NOR LUCENT TECHNOLOGIES 
- * NOR GOOGLE INC MAKE ANY REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING 
- * THE MERCHANTABILITY OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE.
- */
-
-#include <u.h>
-#include <libc.h>
-#include "fmtdef.h"
-
-/*
- * How many bytes of output UTF will be produced by quoting (if necessary) this string?
- * How many runes? How much of the input will be consumed?
- * The parameter q is filled in by __quotesetup.
- * The string may be UTF or Runes (s or r).
- * Return count does not include NUL.
- * Terminate the scan at the first of:
- *     NUL in input
- *     count exceeded in input
- *     count exceeded on output
- * *ninp is set to number of input bytes accepted.
- * nin may be <0 initially, to avoid checking input by count.
- */
-void
-__quotesetup(char *s, Rune *r, int nin, int nout, Quoteinfo *q, int sharp, int runesout)
-{
-       int w;
-       Rune c;
-
-       q->quoted = 0;
-       q->nbytesout = 0;
-       q->nrunesout = 0;
-       q->nbytesin = 0;
-       q->nrunesin = 0;
-       if(sharp || nin==0 || (s && *s=='\0') || (r && *r=='\0')){
-               if(nout < 2)
-                       return;
-               q->quoted = 1;
-               q->nbytesout = 2;
-               q->nrunesout = 2;
-       }
-       for(; nin!=0; nin--){
-               if(s)
-                       w = chartorune(&c, s);
-               else{
-                       c = *r;
-                       w = runelen(c);
-               }
-
-               if(c == '\0')
-                       break;
-               if(runesout){
-                       if(q->nrunesout+1 > nout)
-                               break;
-               }else{
-                       if(q->nbytesout+w > nout)
-                               break;
-               }
-
-               if((c <= L' ') || (c == L'\'') || (fmtdoquote!=nil && fmtdoquote((int)c))){
-                       if(!q->quoted){
-                               if(runesout){
-                                       if(1+q->nrunesout+1+1 > nout)   /* no room for quotes */
-                                               break;
-                               }else{
-                                       if(1+q->nbytesout+w+1 > nout)   /* no room for quotes */
-                                               break;
-                               }
-                               q->nrunesout += 2;      /* include quotes */
-                               q->nbytesout += 2;      /* include quotes */
-                               q->quoted = 1;
-                       }
-                       if(c == '\'')   {
-                               if(runesout){
-                                       if(1+q->nrunesout+1 > nout)     /* no room for quotes */
-                                               break;
-                               }else{
-                                       if(1+q->nbytesout+w > nout)     /* no room for quotes */
-                                               break;
-                               }
-                               q->nbytesout++;
-                               q->nrunesout++; /* quotes reproduce as two characters */
-                       }
-               }
-
-               /* advance input */
-               if(s)
-                       s += w;
-               else
-                       r++;
-               q->nbytesin += w;
-               q->nrunesin++;
-
-               /* advance output */
-               q->nbytesout += w;
-               q->nrunesout++;
-
-#ifndef PLAN9PORT
-               /* ANSI requires precision in bytes, not Runes. */
-               nin-= w-1;      /* and then n-- in the loop */
-#endif
-       }
-}
-
-static int
-qstrfmt(char *sin, Rune *rin, Quoteinfo *q, Fmt *f)
-{
-       Rune r, *rm, *rme;
-       char *t, *s, *m, *me;
-       Rune *rt, *rs;
-       ulong fl;
-       int nc, w;
-
-       m = sin;
-       me = m + q->nbytesin;
-       rm = rin;
-       rme = rm + q->nrunesin;
-
-       fl = f->flags;
-       w = 0;
-       if(fl & FmtWidth)
-               w = f->width;
-       if(f->runes){
-               if(!(fl & FmtLeft) && __rfmtpad(f, w - q->nrunesout) < 0)
-                       return -1;
-       }else{
-               if(!(fl & FmtLeft) && __fmtpad(f, w - q->nbytesout) < 0)
-                       return -1;
-       }
-       t = (char*)f->to;
-       s = (char*)f->stop;
-       rt = (Rune*)f->to;
-       rs = (Rune*)f->stop;
-       if(f->runes)
-               FMTRCHAR(f, rt, rs, '\'');
-       else
-               FMTRUNE(f, t, s, '\'');
-       for(nc = q->nrunesin; nc > 0; nc--){
-               if(sin){
-                       r = *(uchar*)m;
-                       if(r < Runeself)
-                               m++;
-                       else if((me - m) >= UTFmax || fullrune(m, (int)(me-m)))
-                               m += chartorune(&r, m);
-                       else
-                               break;
-               }else{
-                       if(rm >= rme)
-                               break;
-                       r = *(uchar*)rm++;
-               }
-               if(f->runes){
-                       FMTRCHAR(f, rt, rs, r);
-                       if(r == '\'')
-                               FMTRCHAR(f, rt, rs, r);
-               }else{
-                       FMTRUNE(f, t, s, r);
-                       if(r == '\'')
-                               FMTRUNE(f, t, s, r);
-               }
-       }
-
-       if(f->runes){
-               FMTRCHAR(f, rt, rs, '\'');
-               USED(rs);
-               f->nfmt += (int)(rt - (Rune *)f->to);
-               f->to = rt;
-               if(fl & FmtLeft && __rfmtpad(f, w - q->nrunesout) < 0)
-                       return -1;
-       }else{
-               FMTRUNE(f, t, s, '\'');
-               USED(s);
-               f->nfmt += (int)(t - (char *)f->to);
-               f->to = t;
-               if(fl & FmtLeft && __fmtpad(f, w - q->nbytesout) < 0)
-                       return -1;
-       }
-       return 0;
-}
-
-int
-__quotestrfmt(int runesin, Fmt *f)
-{
-       int nin, outlen;
-       Rune *r;
-       char *s;
-       Quoteinfo q;
-
-       nin = -1;
-       if(f->flags&FmtPrec)
-               nin = f->prec;
-       if(runesin){
-               r = va_arg(f->args, Rune *);
-               s = nil;
-       }else{
-               s = va_arg(f->args, char *);
-               r = nil;
-       }
-       if(!s && !r)
-               return __fmtcpy(f, (void*)"<nil>", 5, 5);
-
-       if(f->flush)
-               outlen = 0x7FFFFFFF;    /* if we can flush, no output limit */
-       else if(f->runes)
-               outlen = (int)((Rune*)f->stop - (Rune*)f->to);
-       else
-               outlen = (int)((char*)f->stop - (char*)f->to);
-
-       __quotesetup(s, r, nin, outlen, &q, f->flags&FmtSharp, f->runes);
-/*print("bytes in %d bytes out %d runes in %d runesout %d\n", q.nbytesin, q.nbytesout, q.nrunesin, q.nrunesout); */
-
-       if(runesin){
-               if(!q.quoted)
-                       return __fmtrcpy(f, r, q.nrunesin);
-               return qstrfmt(nil, r, &q, f);
-       }
-
-       if(!q.quoted)
-               return __fmtcpy(f, s, q.nrunesin, q.nbytesin);
-       return qstrfmt(s, nil, &q, f);
-}
-
-int
-quotestrfmt(Fmt *f)
-{
-       return __quotestrfmt(0, f);
-}
-
-int
-quoterunestrfmt(Fmt *f)
-{
-       return __quotestrfmt(1, f);
-}
-
-void
-quotefmtinstall(void)
-{
-       fmtinstall('q', quotestrfmt);
-       fmtinstall('Q', quoterunestrfmt);
-}
-
-int
-__needsquotes(char *s, int *quotelenp)
-{
-       Quoteinfo q;
-
-       __quotesetup(s, nil, -1, 0x7FFFFFFF, &q, 0, 0);
-       *quotelenp = q.nbytesout;
-
-       return q.quoted;
-}
-
-int
-__runeneedsquotes(Rune *r, int *quotelenp)
-{
-       Quoteinfo q;
-
-       __quotesetup(nil, r, -1, 0x7FFFFFFF, &q, 0, 0);
-       *quotelenp = q.nrunesout;
-
-       return q.quoted;
-}
diff --git a/src/lib9/fmt/fmtrune.c b/src/lib9/fmt/fmtrune.c
deleted file mode 100644 (file)
index 2bc8d28..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * The authors of this software are Rob Pike and Ken Thompson,
- * with contributions from Mike Burrows and Sean Dorward.
- *
- *     Copyright (c) 2002-2006 by Lucent Technologies.
- *     Portions Copyright (c) 2004 Google Inc.
- * 
- * Permission to use, copy, modify, and distribute this software for any
- * purpose without fee is hereby granted, provided that this entire notice
- * is included in all copies of any software which is or includes a copy
- * or modification of this software and in all copies of the supporting
- * documentation for such software.
- * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED
- * WARRANTY.  IN PARTICULAR, NEITHER THE AUTHORS NOR LUCENT TECHNOLOGIES 
- * NOR GOOGLE INC MAKE ANY REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING 
- * THE MERCHANTABILITY OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE.
- */
-
-#include <u.h>
-#include <libc.h>
-#include "fmtdef.h"
-
-int
-fmtrune(Fmt *f, int r)
-{
-       Rune *rt;
-       char *t;
-       int n;
-
-       if(f->runes){
-               rt = (Rune*)f->to;
-               FMTRCHAR(f, rt, f->stop, r);
-               f->to = rt;
-               n = 1;
-       }else{
-               t = (char*)f->to;
-               FMTRUNE(f, t, f->stop, (Rune)r);
-               n = (int)(t - (char*)f->to);
-               f->to = t;
-       }
-       f->nfmt += n;
-       return 0;
-}
diff --git a/src/lib9/fmt/fmtstr.c b/src/lib9/fmt/fmtstr.c
deleted file mode 100644 (file)
index a6ca772..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * The authors of this software are Rob Pike and Ken Thompson,
- * with contributions from Mike Burrows and Sean Dorward.
- *
- *     Copyright (c) 2002-2006 by Lucent Technologies.
- *     Portions Copyright (c) 2004 Google Inc.
- * 
- * Permission to use, copy, modify, and distribute this software for any
- * purpose without fee is hereby granted, provided that this entire notice
- * is included in all copies of any software which is or includes a copy
- * or modification of this software and in all copies of the supporting
- * documentation for such software.
- * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED
- * WARRANTY.  IN PARTICULAR, NEITHER THE AUTHORS NOR LUCENT TECHNOLOGIES 
- * NOR GOOGLE INC MAKE ANY REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING 
- * THE MERCHANTABILITY OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE.
- */
-
-#include <u.h>
-#include <libc.h>
-#include "fmtdef.h"
-
-char*
-fmtstrflush(Fmt *f)
-{
-       if(f->start == nil)
-               return nil;
-       *(char*)f->to = '\0';
-       f->to = f->start;
-       return (char*)f->start;
-}
diff --git a/src/lib9/fmt/fmtvprint.c b/src/lib9/fmt/fmtvprint.c
deleted file mode 100644 (file)
index f18d27b..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * The authors of this software are Rob Pike and Ken Thompson,
- * with contributions from Mike Burrows and Sean Dorward.
- *
- *     Copyright (c) 2002-2006 by Lucent Technologies.
- *     Portions Copyright (c) 2004 Google Inc.
- * 
- * Permission to use, copy, modify, and distribute this software for any
- * purpose without fee is hereby granted, provided that this entire notice
- * is included in all copies of any software which is or includes a copy
- * or modification of this software and in all copies of the supporting
- * documentation for such software.
- * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED
- * WARRANTY.  IN PARTICULAR, NEITHER THE AUTHORS NOR LUCENT TECHNOLOGIES 
- * NOR GOOGLE INC MAKE ANY REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING 
- * THE MERCHANTABILITY OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE.
- */
-
-#include <u.h>
-#include <libc.h>
-#include "fmtdef.h"
-
-
-/*
- * Format a string into the output buffer.
- * Designed for formats which themselves call fmt.
- * Flags, precision and width are preserved.
- */
-int
-fmtvprint(Fmt *f, char *fmt, va_list args)
-{
-       va_list va;
-       int n, w, p;
-       unsigned long fl;
-
-       w = f->width;
-       p = f->prec;
-       fl = f->flags;
-       VA_COPY(va, f->args);
-       VA_END(f->args);
-       VA_COPY(f->args, args);
-       n = dofmt(f, fmt);
-       VA_END(f->args);
-       VA_COPY(f->args, va);
-       VA_END(va);
-       f->width = w;
-       f->prec = p;
-       f->flags = fl;
-       if(n >= 0)
-               return 0;
-       return n;
-}
diff --git a/src/lib9/fmt/fprint.c b/src/lib9/fmt/fprint.c
deleted file mode 100644 (file)
index 70cb138..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * The authors of this software are Rob Pike and Ken Thompson,
- * with contributions from Mike Burrows and Sean Dorward.
- *
- *     Copyright (c) 2002-2006 by Lucent Technologies.
- *     Portions Copyright (c) 2004 Google Inc.
- * 
- * Permission to use, copy, modify, and distribute this software for any
- * purpose without fee is hereby granted, provided that this entire notice
- * is included in all copies of any software which is or includes a copy
- * or modification of this software and in all copies of the supporting
- * documentation for such software.
- * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED
- * WARRANTY.  IN PARTICULAR, NEITHER THE AUTHORS NOR LUCENT TECHNOLOGIES 
- * NOR GOOGLE INC MAKE ANY REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING 
- * THE MERCHANTABILITY OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE.
- */
-
-#include <u.h>
-#include <libc.h>
-#include "fmtdef.h"
-
-int
-fprint(int fd, char *fmt, ...)
-{
-       int n;
-       va_list args;
-
-       va_start(args, fmt);
-       n = vfprint(fd, fmt, args);
-       va_end(args);
-       return n;
-}
diff --git a/src/lib9/fmt/nan64.c b/src/lib9/fmt/nan64.c
deleted file mode 100644 (file)
index 1ea7027..0000000
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * The authors of this software are Rob Pike and Ken Thompson,
- * with contributions from Mike Burrows and Sean Dorward.
- *
- *     Copyright (c) 2002-2006 by Lucent Technologies.
- *     Portions Copyright (c) 2004 Google Inc.
- * 
- * Permission to use, copy, modify, and distribute this software for any
- * purpose without fee is hereby granted, provided that this entire notice
- * is included in all copies of any software which is or includes a copy
- * or modification of this software and in all copies of the supporting
- * documentation for such software.
- * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED
- * WARRANTY.  IN PARTICULAR, NEITHER THE AUTHORS NOR LUCENT TECHNOLOGIES 
- * NOR GOOGLE INC MAKE ANY REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING 
- * THE MERCHANTABILITY OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE.
- */
-
-/*
- * 64-bit IEEE not-a-number routines.
- * This is big/little-endian portable assuming that
- * the 64-bit doubles and 64-bit integers have the
- * same byte ordering.
- */
-
-#include <u.h>
-#include <libc.h>
-#include "fmtdef.h"
-
-static uvlong uvnan    = ((uvlong)0x7FF00000<<32)|0x00000001;
-static uvlong uvinf    = ((uvlong)0x7FF00000<<32)|0x00000000;
-static uvlong uvneginf = ((uvlong)0xFFF00000<<32)|0x00000000;
-
-/* gcc sees through the obvious casts. */
-static uvlong
-d2u(double d)
-{
-       union {
-               uvlong v;
-               double d;
-       } u;
-       assert(sizeof(u.d) == sizeof(u.v));
-       u.d = d;
-       return u.v;
-}
-
-static double
-u2d(uvlong v)
-{
-       union {
-               uvlong v;
-               double d;
-       } u;
-       assert(sizeof(u.d) == sizeof(u.v));
-       u.v = v;
-       return u.d;
-}
-
-double
-__NaN(void)
-{
-       return u2d(uvnan);
-}
-
-int
-__isNaN(double d)
-{
-       uvlong x;
-
-       x = d2u(d);
-       /* IEEE 754: exponent bits 0x7FF and non-zero mantissa */
-       return (x&uvinf) == uvinf && (x&~uvneginf) != 0;
-}
-
-double
-__Inf(int sign)
-{
-       return u2d(sign < 0 ? uvneginf : uvinf);
-}
-
-int
-__isInf(double d, int sign)
-{
-       uvlong x;
-
-       x = d2u(d);
-       if(sign == 0)
-               return x==uvinf || x==uvneginf;
-       else if(sign > 0)
-               return x==uvinf;
-       else
-               return x==uvneginf;
-}
diff --git a/src/lib9/fmt/pow10.c b/src/lib9/fmt/pow10.c
deleted file mode 100644 (file)
index e146884..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * The authors of this software are Rob Pike and Ken Thompson,
- * with contributions from Mike Burrows and Sean Dorward.
- *
- *     Copyright (c) 2002-2006 by Lucent Technologies.
- *     Portions Copyright (c) 2004 Google Inc.
- * 
- * Permission to use, copy, modify, and distribute this software for any
- * purpose without fee is hereby granted, provided that this entire notice
- * is included in all copies of any software which is or includes a copy
- * or modification of this software and in all copies of the supporting
- * documentation for such software.
- * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED
- * WARRANTY.  IN PARTICULAR, NEITHER THE AUTHORS NOR LUCENT TECHNOLOGIES 
- * NOR GOOGLE INC MAKE ANY REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING 
- * THE MERCHANTABILITY OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE.
- */
-
-#include <u.h>
-#include <libc.h>
-#include "fmtdef.h"
-
-/*
- * this table might overflow 127-bit exponent representations.
- * in that case, truncate it after 1.0e38.
- * it is important to get all one can from this
- * routine since it is used in atof to scale numbers.
- * the presumption is that C converts fp numbers better
- * than multipication of lower powers of 10.
- */
-
-static
-double tab[] =
-{
-       1.0e0, 1.0e1, 1.0e2, 1.0e3, 1.0e4, 1.0e5, 1.0e6, 1.0e7, 1.0e8, 1.0e9,
-       1.0e10,1.0e11,1.0e12,1.0e13,1.0e14,1.0e15,1.0e16,1.0e17,1.0e18,1.0e19,
-       1.0e20,1.0e21,1.0e22,1.0e23,1.0e24,1.0e25,1.0e26,1.0e27,1.0e28,1.0e29,
-       1.0e30,1.0e31,1.0e32,1.0e33,1.0e34,1.0e35,1.0e36,1.0e37,1.0e38,1.0e39,
-       1.0e40,1.0e41,1.0e42,1.0e43,1.0e44,1.0e45,1.0e46,1.0e47,1.0e48,1.0e49,
-       1.0e50,1.0e51,1.0e52,1.0e53,1.0e54,1.0e55,1.0e56,1.0e57,1.0e58,1.0e59,
-       1.0e60,1.0e61,1.0e62,1.0e63,1.0e64,1.0e65,1.0e66,1.0e67,1.0e68,1.0e69,
-};
-
-double
-__fmtpow10(int n)
-{
-       int m;
-
-       if(n < 0) {
-               n = -n;
-               if(n < (int)(sizeof(tab)/sizeof(tab[0])))
-                       return 1/tab[n];
-               m = n/2;
-               return __fmtpow10(-m) * __fmtpow10(m-n);
-       }
-       if(n < (int)(sizeof(tab)/sizeof(tab[0])))
-               return tab[n];
-       m = n/2;
-       return __fmtpow10(m) * __fmtpow10(n-m);
-}
diff --git a/src/lib9/fmt/print.c b/src/lib9/fmt/print.c
deleted file mode 100644 (file)
index 5c39457..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * The authors of this software are Rob Pike and Ken Thompson,
- * with contributions from Mike Burrows and Sean Dorward.
- *
- *     Copyright (c) 2002-2006 by Lucent Technologies.
- *     Portions Copyright (c) 2004 Google Inc.
- * 
- * Permission to use, copy, modify, and distribute this software for any
- * purpose without fee is hereby granted, provided that this entire notice
- * is included in all copies of any software which is or includes a copy
- * or modification of this software and in all copies of the supporting
- * documentation for such software.
- * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED
- * WARRANTY.  IN PARTICULAR, NEITHER THE AUTHORS NOR LUCENT TECHNOLOGIES 
- * NOR GOOGLE INC MAKE ANY REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING 
- * THE MERCHANTABILITY OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE.
- */
-
-#include <u.h>
-#include <libc.h>
-#include "fmtdef.h"
-
-int
-print(char *fmt, ...)
-{
-       int n;
-       va_list args;
-
-       va_start(args, fmt);
-       n = vfprint(1, fmt, args);
-       va_end(args);
-       return n;
-}
diff --git a/src/lib9/fmt/seprint.c b/src/lib9/fmt/seprint.c
deleted file mode 100644 (file)
index 88779d9..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * The authors of this software are Rob Pike and Ken Thompson,
- * with contributions from Mike Burrows and Sean Dorward.
- *
- *     Copyright (c) 2002-2006 by Lucent Technologies.
- *     Portions Copyright (c) 2004 Google Inc.
- * 
- * Permission to use, copy, modify, and distribute this software for any
- * purpose without fee is hereby granted, provided that this entire notice
- * is included in all copies of any software which is or includes a copy
- * or modification of this software and in all copies of the supporting
- * documentation for such software.
- * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED
- * WARRANTY.  IN PARTICULAR, NEITHER THE AUTHORS NOR LUCENT TECHNOLOGIES 
- * NOR GOOGLE INC MAKE ANY REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING 
- * THE MERCHANTABILITY OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE.
- */
-
-#include <u.h>
-#include <libc.h>
-#include "fmtdef.h"
-
-char*
-seprint(char *buf, char *e, char *fmt, ...)
-{
-       char *p;
-       va_list args;
-
-       va_start(args, fmt);
-       p = vseprint(buf, e, fmt, args);
-       va_end(args);
-       return p;
-}
diff --git a/src/lib9/fmt/smprint.c b/src/lib9/fmt/smprint.c
deleted file mode 100644 (file)
index c13ffd7..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * The authors of this software are Rob Pike and Ken Thompson,
- * with contributions from Mike Burrows and Sean Dorward.
- *
- *     Copyright (c) 2002-2006 by Lucent Technologies.
- *     Portions Copyright (c) 2004 Google Inc.
- * 
- * Permission to use, copy, modify, and distribute this software for any
- * purpose without fee is hereby granted, provided that this entire notice
- * is included in all copies of any software which is or includes a copy
- * or modification of this software and in all copies of the supporting
- * documentation for such software.
- * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED
- * WARRANTY.  IN PARTICULAR, NEITHER THE AUTHORS NOR LUCENT TECHNOLOGIES 
- * NOR GOOGLE INC MAKE ANY REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING 
- * THE MERCHANTABILITY OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE.
- */
-
-#include <u.h>
-#include <libc.h>
-#include "fmtdef.h"
-
-char*
-smprint(char *fmt, ...)
-{
-       va_list args;
-       char *p;
-
-       va_start(args, fmt);
-       p = vsmprint(fmt, args);
-       va_end(args);
-       return p;
-}
diff --git a/src/lib9/fmt/snprint.c b/src/lib9/fmt/snprint.c
deleted file mode 100644 (file)
index 372399c..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * The authors of this software are Rob Pike and Ken Thompson,
- * with contributions from Mike Burrows and Sean Dorward.
- *
- *     Copyright (c) 2002-2006 by Lucent Technologies.
- *     Portions Copyright (c) 2004 Google Inc.
- * 
- * Permission to use, copy, modify, and distribute this software for any
- * purpose without fee is hereby granted, provided that this entire notice
- * is included in all copies of any software which is or includes a copy
- * or modification of this software and in all copies of the supporting
- * documentation for such software.
- * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED
- * WARRANTY.  IN PARTICULAR, NEITHER THE AUTHORS NOR LUCENT TECHNOLOGIES 
- * NOR GOOGLE INC MAKE ANY REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING 
- * THE MERCHANTABILITY OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE.
- */
-
-#include <u.h>
-#include <libc.h>
-#include "fmtdef.h"
-
-int
-snprint(char *buf, int len, char *fmt, ...)
-{
-       int n;
-       va_list args;
-
-       va_start(args, fmt);
-       n = vsnprint(buf, len, fmt, args);
-       va_end(args);
-       return n;
-}
-
diff --git a/src/lib9/fmt/sprint.c b/src/lib9/fmt/sprint.c
deleted file mode 100644 (file)
index 02655ad..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * The authors of this software are Rob Pike and Ken Thompson,
- * with contributions from Mike Burrows and Sean Dorward.
- *
- *     Copyright (c) 2002-2006 by Lucent Technologies.
- *     Portions Copyright (c) 2004 Google Inc.
- * 
- * Permission to use, copy, modify, and distribute this software for any
- * purpose without fee is hereby granted, provided that this entire notice
- * is included in all copies of any software which is or includes a copy
- * or modification of this software and in all copies of the supporting
- * documentation for such software.
- * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED
- * WARRANTY.  IN PARTICULAR, NEITHER THE AUTHORS NOR LUCENT TECHNOLOGIES 
- * NOR GOOGLE INC MAKE ANY REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING 
- * THE MERCHANTABILITY OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE.
- */
-
-#include <u.h>
-#include <libc.h>
-#include "fmtdef.h"
-
-int
-sprint(char *buf, char *fmt, ...)
-{
-       int n;
-       uint len;
-       va_list args;
-
-       len = 1<<30;  /* big number, but sprint is deprecated anyway */
-       /*
-        * on PowerPC, the stack is near the top of memory, so
-        * we must be sure not to overflow a 32-bit pointer.
-        *
-        * careful!  gcc-4.2 assumes buf+len < buf can never be true and
-        * optimizes the test away.  casting to uintptr works around this bug.
-        */
-       if((uintptr)buf+len < (uintptr)buf)
-               len = (uint)-(uintptr)buf-1;
-
-       va_start(args, fmt);
-       n = (int)vsnprint(buf, (int)len, fmt, args);
-       va_end(args);
-       return n;
-}
diff --git a/src/lib9/fmt/strtod.c b/src/lib9/fmt/strtod.c
deleted file mode 100644 (file)
index ec185d2..0000000
+++ /dev/null
@@ -1,533 +0,0 @@
-/*
- * The authors of this software are Rob Pike and Ken Thompson,
- * with contributions from Mike Burrows and Sean Dorward.
- *
- *     Copyright (c) 2002-2006 by Lucent Technologies.
- *     Portions Copyright (c) 2004 Google Inc.
- * 
- * Permission to use, copy, modify, and distribute this software for any
- * purpose without fee is hereby granted, provided that this entire notice
- * is included in all copies of any software which is or includes a copy
- * or modification of this software and in all copies of the supporting
- * documentation for such software.
- * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED
- * WARRANTY.  IN PARTICULAR, NEITHER THE AUTHORS NOR LUCENT TECHNOLOGIES 
- * NOR GOOGLE INC MAKE ANY REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING 
- * THE MERCHANTABILITY OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE.
- */
-
-#include <u.h>
-#include <errno.h>
-#include <libc.h>
-#include "fmtdef.h"
-
-static ulong
-umuldiv(ulong a, ulong b, ulong c)
-{
-       double d;
-
-       d = ((double)a * (double)b) / (double)c;
-       if(d >= 4294967295.)
-               d = 4294967295.;
-       return (ulong)d;
-}
-
-/*
- * This routine will convert to arbitrary precision
- * floating point entirely in multi-precision fixed.
- * The answer is the closest floating point number to
- * the given decimal number. Exactly half way are
- * rounded ala ieee rules.
- * Method is to scale input decimal between .500 and .999...
- * with external power of 2, then binary search for the
- * closest mantissa to this decimal number.
- * Nmant is is the required precision. (53 for ieee dp)
- * Nbits is the max number of bits/word. (must be <= 28)
- * Prec is calculated - the number of words of fixed mantissa.
- */
-enum
-{
-       Nbits   = 28,                           /* bits safely represented in a ulong */
-       Nmant   = 53,                           /* bits of precision required */
-       Prec    = (Nmant+Nbits+1)/Nbits,        /* words of Nbits each to represent mantissa */
-       Sigbit  = 1<<(Prec*Nbits-Nmant),        /* first significant bit of Prec-th word */
-       Ndig    = 1500,
-       One     = (ulong)(1<<Nbits),
-       Half    = (ulong)(One>>1),
-       Maxe    = 310,
-
-       Fsign   = 1<<0,         /* found - */
-       Fesign  = 1<<1,         /* found e- */
-       Fdpoint = 1<<2,         /* found . */
-
-       S0      = 0,            /* _            _S0     +S1     #S2     .S3 */
-       S1,                     /* _+           #S2     .S3 */
-       S2,                     /* _+#          #S2     .S4     eS5 */
-       S3,                     /* _+.          #S4 */
-       S4,                     /* _+#.#        #S4     eS5 */
-       S5,                     /* _+#.#e       +S6     #S7 */
-       S6,                     /* _+#.#e+      #S7 */
-       S7                      /* _+#.#e+#     #S7 */
-};
-
-static int     xcmp(char*, char*);
-static int     fpcmp(char*, ulong*);
-static void    frnorm(ulong*);
-static void    divascii(char*, int*, int*, int*);
-static void    mulascii(char*, int*, int*, int*);
-
-typedef        struct  Tab     Tab;
-struct Tab
-{
-       int     bp;
-       int     siz;
-       char*   cmp;
-};
-
-double
-fmtstrtod(const char *as, char **aas)
-{
-       int na, ex, dp, bp, c, i, flag, state;
-       ulong low[Prec], hig[Prec], mid[Prec];
-       double d;
-       char *s, a[Ndig];
-
-       flag = 0;       /* Fsign, Fesign, Fdpoint */
-       na = 0;         /* number of digits of a[] */
-       dp = 0;         /* na of decimal point */
-       ex = 0;         /* exonent */
-
-       state = S0;
-       for(s=(char*)as;; s++) {
-               c = *s;
-               if(c >= '0' && c <= '9') {
-                       switch(state) {
-                       case S0:
-                       case S1:
-                       case S2:
-                               state = S2;
-                               break;
-                       case S3:
-                       case S4:
-                               state = S4;
-                               break;
-
-                       case S5:
-                       case S6:
-                       case S7:
-                               state = S7;
-                               ex = ex*10 + (c-'0');
-                               continue;
-                       }
-                       if(na == 0 && c == '0') {
-                               dp--;
-                               continue;
-                       }
-                       if(na < Ndig-50)
-                               a[na++] = (char)c;
-                       continue;
-               }
-               switch(c) {
-               case '\t':
-               case '\n':
-               case '\v':
-               case '\f':
-               case '\r':
-               case ' ':
-                       if(state == S0)
-                               continue;
-                       break;
-               case '-':
-                       if(state == S0)
-                               flag |= Fsign;
-                       else
-                               flag |= Fesign;
-               case '+':
-                       if(state == S0)
-                               state = S1;
-                       else
-                       if(state == S5)
-                               state = S6;
-                       else
-                               break;  /* syntax */
-                       continue;
-               case '.':
-                       flag |= Fdpoint;
-                       dp = na;
-                       if(state == S0 || state == S1) {
-                               state = S3;
-                               continue;
-                       }
-                       if(state == S2) {
-                               state = S4;
-                               continue;
-                       }
-                       break;
-               case 'e':
-               case 'E':
-                       if(state == S2 || state == S4) {
-                               state = S5;
-                               continue;
-                       }
-                       break;
-               }
-               break;
-       }
-
-       /*
-        * clean up return char-pointer
-        */
-       switch(state) {
-       case S0:
-               if(xcmp(s, "nan") == 0) {
-                       if(aas != nil)
-                               *aas = s+3;
-                       goto retnan;
-               }
-       case S1:
-               if(xcmp(s, "infinity") == 0) {
-                       if(aas != nil)
-                               *aas = s+8;
-                       goto retinf;
-               }
-               if(xcmp(s, "inf") == 0) {
-                       if(aas != nil)
-                               *aas = s+3;
-                       goto retinf;
-               }
-       case S3:
-               if(aas != nil)
-                       *aas = (char*)as;
-               goto ret0;      /* no digits found */
-       case S6:
-               s--;            /* back over +- */
-       case S5:
-               s--;            /* back over e */
-               break;
-       }
-       if(aas != nil)
-               *aas = s;
-
-       if(flag & Fdpoint)
-       while(na > 0 && a[na-1] == '0')
-               na--;
-       if(na == 0)
-               goto ret0;      /* zero */
-       a[na] = 0;
-       if(!(flag & Fdpoint))
-               dp = na;
-       if(flag & Fesign)
-               ex = -ex;
-       dp += ex;
-       if(dp < -Maxe){
-               errno = ERANGE;
-               goto ret0;      /* underflow by exp */
-       } else
-       if(dp > +Maxe)
-               goto retinf;    /* overflow by exp */
-
-       /*
-        * normalize the decimal ascii number
-        * to range .[5-9][0-9]* e0
-        */
-       bp = 0;         /* binary exponent */
-       while(dp > 0)
-               divascii(a, &na, &dp, &bp);
-       while(dp < 0 || a[0] < '5')
-               mulascii(a, &na, &dp, &bp);
-
-       /* close approx by naive conversion */
-       mid[0] = 0;
-       mid[1] = 1;
-       for(i=0; (c=a[i]) != '\0'; i++) {
-               mid[0] = mid[0]*10 + (ulong)(c-'0');
-               mid[1] = mid[1]*10;
-               if(i >= 8)
-                       break;
-       }
-       low[0] = umuldiv(mid[0], One, mid[1]);
-       hig[0] = umuldiv(mid[0]+1, One, mid[1]);
-       for(i=1; i<Prec; i++) {
-               low[i] = 0;
-               hig[i] = One-1;
-       }
-
-       /* binary search for closest mantissa */
-       for(;;) {
-               /* mid = (hig + low) / 2 */
-               c = 0;
-               for(i=0; i<Prec; i++) {
-                       mid[i] = hig[i] + low[i];
-                       if(c)
-                               mid[i] += One;
-                       c = mid[i] & 1;
-                       mid[i] >>= 1;
-               }
-               frnorm(mid);
-
-               /* compare */
-               c = fpcmp(a, mid);
-               if(c > 0) {
-                       c = 1;
-                       for(i=0; i<Prec; i++)
-                               if(low[i] != mid[i]) {
-                                       c = 0;
-                                       low[i] = mid[i];
-                               }
-                       if(c)
-                               break;  /* between mid and hig */
-                       continue;
-               }
-               if(c < 0) {
-                       for(i=0; i<Prec; i++)
-                               hig[i] = mid[i];
-                       continue;
-               }
-
-               /* only hard part is if even/odd roundings wants to go up */
-               c = mid[Prec-1] & (Sigbit-1);
-               if(c == Sigbit/2 && (mid[Prec-1]&Sigbit) == 0)
-                       mid[Prec-1] -= (ulong)c;
-               break;  /* exactly mid */
-       }
-
-       /* normal rounding applies */
-       c = mid[Prec-1] & (Sigbit-1);
-       mid[Prec-1] -= (ulong)c;
-       if(c >= Sigbit/2) {
-               mid[Prec-1] += Sigbit;
-               frnorm(mid);
-       }
-       goto out;
-
-ret0:
-       return 0;
-
-retnan:
-       return __NaN();
-
-retinf:
-       /*
-        * Unix strtod requires these.  Plan 9 would return Inf(0) or Inf(-1). */
-       errno = ERANGE;
-       if(flag & Fsign)
-               return -HUGE_VAL;
-       return HUGE_VAL;
-
-out:
-       d = 0;
-       for(i=0; i<Prec; i++)
-               d = d*One + (double)mid[i];
-       if(flag & Fsign)
-               d = -d;
-       d = ldexp(d, bp - Prec*Nbits);
-       if(d == 0){     /* underflow */
-               errno = ERANGE;
-       }
-       return d;
-}
-
-static void
-frnorm(ulong *f)
-{
-       int i;
-       ulong c;
-
-       c = 0;
-       for(i=Prec-1; i>0; i--) {
-               f[i] += c;
-               c = f[i] >> Nbits;
-               f[i] &= One-1;
-       }
-       f[0] += c;
-}
-
-static int
-fpcmp(char *a, ulong* f)
-{
-       ulong tf[Prec];
-       int i, d, c;
-
-       for(i=0; i<Prec; i++)
-               tf[i] = f[i];
-
-       for(;;) {
-               /* tf *= 10 */
-               for(i=0; i<Prec; i++)
-                       tf[i] = tf[i]*10;
-               frnorm(tf);
-               d = (int)(tf[0] >> Nbits) + '0';
-               tf[0] &= One-1;
-
-               /* compare next digit */
-               c = *a;
-               if(c == 0) {
-                       if('0' < d)
-                               return -1;
-                       if(tf[0] != 0)
-                               goto cont;
-                       for(i=1; i<Prec; i++)
-                               if(tf[i] != 0)
-                                       goto cont;
-                       return 0;
-               }
-               if(c > d)
-                       return +1;
-               if(c < d)
-                       return -1;
-               a++;
-       cont:;
-       }
-}
-
-static void
-divby(char *a, int *na, int b)
-{
-       int n, c;
-       char *p;
-
-       p = a;
-       n = 0;
-       while(n>>b == 0) {
-               c = *a++;
-               if(c == 0) {
-                       while(n) {
-                               c = n*10;
-                               if(c>>b)
-                                       break;
-                               n = c;
-                       }
-                       goto xx;
-               }
-               n = n*10 + c-'0';
-               (*na)--;
-       }
-       for(;;) {
-               c = n>>b;
-               n -= c<<b;
-               *p++ = (char)(c + '0');
-               c = *a++;
-               if(c == 0)
-                       break;
-               n = n*10 + c-'0';
-       }
-       (*na)++;
-xx:
-       while(n) {
-               n = n*10;
-               c = n>>b;
-               n -= c<<b;
-               *p++ = (char)(c + '0');
-               (*na)++;
-       }
-       *p = 0;
-}
-
-static Tab     tab1[] =
-{
-        1,  0, "",
-        3,  1, "7",
-        6,  2, "63",
-        9,  3, "511",
-       13,  4, "8191",
-       16,  5, "65535",
-       19,  6, "524287",
-       23,  7, "8388607",
-       26,  8, "67108863",
-       27,  9, "134217727",
-};
-
-static void
-divascii(char *a, int *na, int *dp, int *bp)
-{
-       int b, d;
-       Tab *t;
-
-       d = *dp;
-       if(d >= (int)(nelem(tab1)))
-               d = (int)(nelem(tab1))-1;
-       t = tab1 + d;
-       b = t->bp;
-       if(memcmp(a, t->cmp, (size_t)t->siz) > 0)
-               d--;
-       *dp -= d;
-       *bp += b;
-       divby(a, na, b);
-}
-
-static void
-mulby(char *a, char *p, char *q, int b)
-{
-       int n, c;
-
-       n = 0;
-       *p = 0;
-       for(;;) {
-               q--;
-               if(q < a)
-                       break;
-               c = *q - '0';
-               c = (c<<b) + n;
-               n = c/10;
-               c -= n*10;
-               p--;
-               *p = (char)(c + '0');
-       }
-       while(n) {
-               c = n;
-               n = c/10;
-               c -= n*10;
-               p--;
-               *p = (char)(c + '0');
-       }
-}
-
-static Tab     tab2[] =
-{
-        1,  1, "",                             /* dp = 0-0 */
-        3,  3, "125",
-        6,  5, "15625",
-        9,  7, "1953125",
-       13, 10, "1220703125",
-       16, 12, "152587890625",
-       19, 14, "19073486328125",
-       23, 17, "11920928955078125",
-       26, 19, "1490116119384765625",
-       27, 19, "7450580596923828125",          /* dp 8-9 */
-};
-
-static void
-mulascii(char *a, int *na, int *dp, int *bp)
-{
-       char *p;
-       int d, b;
-       Tab *t;
-
-       d = -*dp;
-       if(d >= (int)(nelem(tab2)))
-               d = (int)(nelem(tab2))-1;
-       t = tab2 + d;
-       b = t->bp;
-       if(memcmp(a, t->cmp, (size_t)t->siz) < 0)
-               d--;
-       p = a + *na;
-       *bp -= b;
-       *dp += d;
-       *na += d;
-       mulby(a, p+d, p, b);
-}
-
-static int
-xcmp(char *a, char *b)
-{
-       int c1, c2;
-
-       while((c1 = *b++) != '\0') {
-               c2 = *a++;
-               if(isupper(c2))
-                       c2 = tolower(c2);
-               if(c1 != c2)
-                       return 1;
-       }
-       return 0;
-}
diff --git a/src/lib9/fmt/test.c b/src/lib9/fmt/test.c
deleted file mode 100644 (file)
index d82ff78..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-// +build ignore
-
-/*
- * The authors of this software are Rob Pike and Ken Thompson,
- * with contributions from Mike Burrows and Sean Dorward.
- *
- *     Copyright (c) 2002-2006 by Lucent Technologies.
- *     Portions Copyright (c) 2004 Google Inc.
- * 
- * Permission to use, copy, modify, and distribute this software for any
- * purpose without fee is hereby granted, provided that this entire notice
- * is included in all copies of any software which is or includes a copy
- * or modification of this software and in all copies of the supporting
- * documentation for such software.
- * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED
- * WARRANTY.  IN PARTICULAR, NEITHER THE AUTHORS NOR LUCENT TECHNOLOGIES 
- * NOR GOOGLE INC MAKE ANY REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING 
- * THE MERCHANTABILITY OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE.
- */
-
-#include <u.h>
-#include <libc.h>
-#include "fmtdef.h"
-
-int
-main(int argc, char *argv[])
-{
-       quotefmtinstall();
-       print("hello world\n");
-       print("x: %x\n", 0x87654321);
-       print("u: %u\n", 0x87654321);
-       print("d: %d\n", 0x87654321);
-       print("s: %s\n", "hi there");
-       print("q: %q\n", "hi i'm here");
-       print("c: %c\n", '!');
-       print("g: %g %g %g\n", 3.14159, 3.14159e10, 3.14159e-10);
-       print("e: %e %e %e\n", 3.14159, 3.14159e10, 3.14159e-10);
-       print("f: %f %f %f\n", 3.14159, 3.14159e10, 3.14159e-10);
-       print("smiley: %C\n", (Rune)0x263a);
-       print("%g %.18g\n", 2e25, 2e25);
-       print("%2.18g\n", 1.0);
-       print("%2.18f\n", 1.0);
-       print("%f\n", 3.1415927/4);
-       print("%d\n", 23);
-       print("%i\n", 23);
-       print("%0.10d\n", 12345);
-
-       /* test %4$d formats */
-       print("%3$d %4$06d %2$d %1$d\n", 444, 333, 111, 222);
-       print("%3$d %4$06d %2$d %1$d\n", 444, 333, 111, 222);
-       print("%3$d %4$*5$06d %2$d %1$d\n", 444, 333, 111, 222, 20);
-       print("%3$hd %4$*5$06d %2$d %1$d\n", 444, 333, (short)111, 222, 20);
-       print("%3$lld %4$*5$06d %2$d %1$d\n", 444, 333, 111LL, 222, 20);
-
-       /* test %'d formats */
-       print("%'d %'d %'d\n", 1, 2222, 33333333);
-       print("%'019d\n", 0);
-       print("%08d %08d %08d\n", 1, 2222, 33333333);
-       print("%'08d %'08d %'08d\n", 1, 2222, 33333333);
-       print("%'x %'X %'b\n", 0x11111111, 0xabcd1234, 12345);
-       print("%'lld %'lld %'lld\n", 1LL, 222222222LL, 3333333333333LL);
-       print("%019lld %019lld %019lld\n", 1LL, 222222222LL, 3333333333333LL);
-       print("%'019lld %'019lld %'019lld\n", 1LL, 222222222LL, 3333333333333LL);
-       print("%'020lld %'020lld %'020lld\n", 1LL, 222222222LL, 3333333333333LL);
-       print("%'llx %'llX %'llb\n", 0x111111111111LL, 0xabcd12345678LL, 112342345LL);
-       return 0;
-}
diff --git a/src/lib9/fmt/vfprint.c b/src/lib9/fmt/vfprint.c
deleted file mode 100644 (file)
index a23c5a0..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * The authors of this software are Rob Pike and Ken Thompson,
- * with contributions from Mike Burrows and Sean Dorward.
- *
- *     Copyright (c) 2002-2006 by Lucent Technologies.
- *     Portions Copyright (c) 2004 Google Inc.
- * 
- * Permission to use, copy, modify, and distribute this software for any
- * purpose without fee is hereby granted, provided that this entire notice
- * is included in all copies of any software which is or includes a copy
- * or modification of this software and in all copies of the supporting
- * documentation for such software.
- * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED
- * WARRANTY.  IN PARTICULAR, NEITHER THE AUTHORS NOR LUCENT TECHNOLOGIES 
- * NOR GOOGLE INC MAKE ANY REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING 
- * THE MERCHANTABILITY OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE.
- */
-
-#include <u.h>
-#include <libc.h>
-#include "fmtdef.h"
-
-int
-vfprint(int fd, char *fmt, va_list args)
-{
-       Fmt f;
-       char buf[256];
-       int n;
-
-       fmtfdinit(&f, fd, buf, sizeof(buf));
-       VA_COPY(f.args,args);
-       n = dofmt(&f, fmt);
-       VA_END(f.args);
-       if(n > 0 && __fmtFdFlush(&f) == 0)
-               return -1;
-       return n;
-}
diff --git a/src/lib9/fmt/vseprint.c b/src/lib9/fmt/vseprint.c
deleted file mode 100644 (file)
index c9fbfb9..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * The authors of this software are Rob Pike and Ken Thompson,
- * with contributions from Mike Burrows and Sean Dorward.
- *
- *     Copyright (c) 2002-2006 by Lucent Technologies.
- *     Portions Copyright (c) 2004 Google Inc.
- * 
- * Permission to use, copy, modify, and distribute this software for any
- * purpose without fee is hereby granted, provided that this entire notice
- * is included in all copies of any software which is or includes a copy
- * or modification of this software and in all copies of the supporting
- * documentation for such software.
- * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED
- * WARRANTY.  IN PARTICULAR, NEITHER THE AUTHORS NOR LUCENT TECHNOLOGIES 
- * NOR GOOGLE INC MAKE ANY REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING 
- * THE MERCHANTABILITY OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE.
- */
-
-#include <u.h>
-#include <libc.h>
-#include "fmtdef.h"
-
-char*
-vseprint(char *buf, char *e, char *fmt, va_list args)
-{
-       Fmt f;
-
-       if(e <= buf)
-               return nil;
-       f.runes = 0;
-       f.start = buf;
-       f.to = buf;
-       f.stop = e - 1;
-       f.flush = 0;
-       f.farg = nil;
-       f.nfmt = 0;
-       VA_COPY(f.args,args);
-       fmtlocaleinit(&f, nil, nil, nil);
-       dofmt(&f, fmt);
-       VA_END(f.args);
-       *(char*)f.to = '\0';
-       return (char*)f.to;
-}
-
diff --git a/src/lib9/fmt/vsmprint.c b/src/lib9/fmt/vsmprint.c
deleted file mode 100644 (file)
index 46086f9..0000000
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * The authors of this software are Rob Pike and Ken Thompson,
- * with contributions from Mike Burrows and Sean Dorward.
- *
- *     Copyright (c) 2002-2006 by Lucent Technologies.
- *     Portions Copyright (c) 2004 Google Inc.
- * 
- * Permission to use, copy, modify, and distribute this software for any
- * purpose without fee is hereby granted, provided that this entire notice
- * is included in all copies of any software which is or includes a copy
- * or modification of this software and in all copies of the supporting
- * documentation for such software.
- * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED
- * WARRANTY.  IN PARTICULAR, NEITHER THE AUTHORS NOR LUCENT TECHNOLOGIES 
- * NOR GOOGLE INC MAKE ANY REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING 
- * THE MERCHANTABILITY OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE.
- */
-
-#include <u.h>
-#include <libc.h>
-#include "fmtdef.h"
-
-static int
-fmtStrFlush(Fmt *f)
-{
-       char *s;
-       int n;
-
-       if(f->start == nil)
-               return 0;
-       n = (int)(uintptr)f->farg;
-       n *= 2;
-       s = (char*)f->start;
-       f->start = realloc(s, (size_t)n);
-       if(f->start == nil){
-               f->farg = nil;
-               f->to = nil;
-               f->stop = nil;
-               free(s);
-               return 0;
-       }
-       f->farg = (void*)(uintptr)n;
-       f->to = (char*)f->start + ((char*)f->to - s);
-       f->stop = (char*)f->start + n - 1;
-       return 1;
-}
-
-int
-fmtstrinit(Fmt *f)
-{
-       int n;
-
-       memset(f, 0, sizeof *f);
-       f->runes = 0;
-       n = 32;
-       f->start = malloc((size_t)n);
-       if(f->start == nil)
-               return -1;
-       f->to = f->start;
-       f->stop = (char*)f->start + n - 1;
-       f->flush = fmtStrFlush;
-       f->farg = (void*)(uintptr)n;
-       f->nfmt = 0;
-       fmtlocaleinit(f, nil, nil, nil);
-       return 0;
-}
-
-/*
- * print into an allocated string buffer
- */
-char*
-vsmprint(char *fmt, va_list args)
-{
-       Fmt f;
-       int n;
-
-       if(fmtstrinit(&f) < 0)
-               return nil;
-       VA_COPY(f.args,args);
-       n = dofmt(&f, fmt);
-       VA_END(f.args);
-       if(n < 0){
-               free(f.start);
-               return nil;
-       }
-       return fmtstrflush(&f);
-}
diff --git a/src/lib9/fmt/vsnprint.c b/src/lib9/fmt/vsnprint.c
deleted file mode 100644 (file)
index 6b38772..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * The authors of this software are Rob Pike and Ken Thompson,
- * with contributions from Mike Burrows and Sean Dorward.
- *
- *     Copyright (c) 2002-2006 by Lucent Technologies.
- *     Portions Copyright (c) 2004 Google Inc.
- * 
- * Permission to use, copy, modify, and distribute this software for any
- * purpose without fee is hereby granted, provided that this entire notice
- * is included in all copies of any software which is or includes a copy
- * or modification of this software and in all copies of the supporting
- * documentation for such software.
- * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED
- * WARRANTY.  IN PARTICULAR, NEITHER THE AUTHORS NOR LUCENT TECHNOLOGIES 
- * NOR GOOGLE INC MAKE ANY REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING 
- * THE MERCHANTABILITY OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE.
- */
-
-#include <u.h>
-#include <libc.h>
-#include "fmtdef.h"
-
-int
-vsnprint(char *buf, int len, char *fmt, va_list args)
-{
-       Fmt f;
-
-       if(len <= 0)
-               return -1;
-       f.runes = 0;
-       f.start = buf;
-       f.to = buf;
-       f.stop = buf + len - 1;
-       f.flush = 0;
-       f.farg = nil;
-       f.nfmt = 0;
-       VA_COPY(f.args,args);
-       fmtlocaleinit(&f, nil, nil, nil);
-       dofmt(&f, fmt);
-       VA_END(f.args);
-       *(char*)f.to = '\0';
-       return (int)((char*)f.to - buf);
-}
diff --git a/src/lib9/fmtlock2.c b/src/lib9/fmtlock2.c
deleted file mode 100644 (file)
index a0e2636..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-// +build !plan9
-
-/*
-Plan 9 from User Space src/lib9/fmtlock2.c
-http://code.swtch.com/plan9port/src/tip/src/lib9/fmtlock2.c
-
-Copyright 2001-2007 Russ Cox.  All Rights Reserved.
-Portions Copyright 2009 The Go Authors.  All Rights Reserved.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-*/
-
-#include <u.h>
-#include <libc.h>
-
-void
-__fmtlock(void)
-{
-}
-
-void
-__fmtunlock(void)
-{
-}
diff --git a/src/lib9/getenv.c b/src/lib9/getenv.c
deleted file mode 100644 (file)
index 2454b6b..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-// +build !plan9
-
-/*
-Plan 9 from User Space src/lib9/getenv.c
-http://code.swtch.com/plan9port/src/tip/src/lib9/getenv.c
-
-Copyright 2001-2007 Russ Cox.  All Rights Reserved.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-*/
-#include <u.h>
-#define NOPLAN9DEFINES
-#include <libc.h>
-
-char*
-p9getenv(char *s)
-{
-       char *t;
-
-       t = getenv(s);
-       if(t == 0)
-               return 0;
-       return strdup(t);
-}
-
-int
-p9putenv(char *s, char *v)
-{
-       char *t;
-
-       t = smprint("%s=%s", s, v);
-       if(t == nil)
-               return -1;
-       putenv(t);
-       return 0;
-}
diff --git a/src/lib9/getfields.c b/src/lib9/getfields.c
deleted file mode 100644 (file)
index 0af8388..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
-Inferno libkern/getfields.c
-http://code.google.com/p/inferno-os/source/browse/libkern/getfields.c
-
-       Copyright © 1994-1999 Lucent Technologies Inc.  All rights reserved.
-       Revisions Copyright © 2000-2007 Vita Nuova Holdings Limited (www.vitanuova.com).  All rights reserved.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-*/
-
-#include <u.h>
-#include <libc.h>
-
-int
-getfields(char *str, char **args, int max, int mflag, char *set)
-{
-       Rune r;
-       int nr, intok, narg;
-
-       if(max <= 0)
-               return 0;
-
-       narg = 0;
-       args[narg] = str;
-       if(!mflag)
-               narg++;
-       intok = 0;
-       for(;; str += nr) {
-               nr = chartorune(&r, str);
-               if(r == 0)
-                       break;
-               if(utfrune(set, r)) {
-                       if(narg >= max)
-                               break;
-                       *str = 0;
-                       intok = 0;
-                       args[narg] = str + nr;
-                       if(!mflag)
-                               narg++;
-               } else {
-                       if(!intok && mflag)
-                               narg++;
-                       intok = 1;
-               }
-       }
-       return narg;
-}
diff --git a/src/lib9/getwd.c b/src/lib9/getwd.c
deleted file mode 100644 (file)
index 03a8ff1..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-// +build !plan9
-
-/*
-Plan 9 from User Space src/lib9/getwd.c
-http://code.swtch.com/plan9port/src/tip/src/lib9/getwd.c
-
-Copyright 2001-2007 Russ Cox.  All Rights Reserved.
-Portions Copyright 2011 The Go Authors.  All Rights Reserved.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-*/
-#include <u.h>
-#include <errno.h>
-#include <sys/stat.h>
-#define NOPLAN9DEFINES
-#include <libc.h>
-
-char*
-p9getwd(char *s, int ns)
-{
-       char *pwd;
-       struct stat st1, st2;
-
-       // Clumsy but widespread kludge:
-       // if $PWD is set and matches ".", use it.
-       // Matches glibc's get_current_dir_name and Go's os.Getwd.
-       pwd = getenv("PWD");  // note: getenv, not p9getenv, so no free
-       if(pwd != nil && pwd[0] &&
-                       stat(pwd, &st1) >= 0 && stat(".", &st2) >= 0 &&
-                       st1.st_dev == st2.st_dev && st1.st_ino == st2.st_ino) {
-               if(strlen(pwd) >= ns) {
-                       errno = ERANGE;
-                       return nil;
-               }
-               strcpy(s, pwd);
-               return s;
-       }
-
-       return getcwd(s, (size_t)ns);
-}
diff --git a/src/lib9/goos.c b/src/lib9/goos.c
deleted file mode 100644 (file)
index 68b94d6..0000000
+++ /dev/null
@@ -1,71 +0,0 @@
-// Copyright 2010 The Go Authors.  All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-#include <u.h>
-#include <libc.h>
-
-static char*
-defgetenv(char *name, char *def)
-{
-       char *p;
-       
-       p = getenv(name);
-       if(p == nil || p[0] == '\0')
-               p = def;
-       return p;
-}
-
-char*
-getgoos(void)
-{
-       return defgetenv("GOOS", GOOS);
-}
-
-char*
-getgoarch(void)
-{
-       return defgetenv("GOARCH", GOARCH);
-}
-
-char*
-getgoroot(void)
-{
-       return defgetenv("GOROOT", GOROOT);
-}
-
-char*
-getgoversion(void)
-{
-       return GOVERSION;
-}
-
-char*
-getgoarm(void)
-{
-       return defgetenv("GOARM", GOARM);
-}
-
-char*
-getgo386(void)
-{
-       return defgetenv("GO386", GO386);
-}
-
-char*
-getgoextlinkenabled(void)
-{
-       return GO_EXTLINK_ENABLED;
-}
-
-char*
-getgohostarch(void)
-{
-       return GOHOSTARCH;
-}
-
-char*
-getgohostos(void)
-{
-       return GOHOSTOS;
-}
diff --git a/src/lib9/jmp.c b/src/lib9/jmp.c
deleted file mode 100644 (file)
index 733ed70..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-// +build !plan9
-// +build !windows
-
-/*
-Plan 9 from User Space src/lib9/jmp.c
-http://code.swtch.com/plan9port/src/tip/src/lib9/jmp.c
-
-Copyright 2001-2007 Russ Cox.  All Rights Reserved.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-*/
-
-#include <u.h>
-#define NOPLAN9DEFINES
-#include <libc.h>
-
-void
-p9longjmp(p9jmp_buf buf, int val)
-{
-       siglongjmp((void*)buf, val);
-}
-
-void
-p9notejmp(void *x, p9jmp_buf buf, int val)
-{
-       USED(x);
-       siglongjmp((void*)buf, val);
-}
-
diff --git a/src/lib9/main.c b/src/lib9/main.c
deleted file mode 100644 (file)
index 088b095..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-// +build !plan9
-
-/*
-Plan 9 from User Space src/lib9/main.c
-http://code.swtch.com/plan9port/src/tip/src/lib9/main.c
-
-Copyright 2001-2007 Russ Cox.  All Rights Reserved.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-*/
-
-#include <u.h>
-#define NOPLAN9DEFINES
-#include <libc.h>
-
-#ifdef WIN32
-#include <windows.h>
-
-static void
-crashhandler(int sig)
-{
-       USED(sig);
-       fprint(2, "%s: internal fatal error.\n", argv0);
-       exit(1);
-}
-#endif
-
-extern void p9main(int, char**);
-
-int
-main(int argc, char **argv)
-{
-#ifdef WIN32
-       signal(SIGSEGV, crashhandler);
-       signal(SIGBUS, crashhandler);
-       // don't display the crash dialog
-       DWORD mode = SetErrorMode(SEM_NOGPFAULTERRORBOX);
-       SetErrorMode(mode | SEM_FAILCRITICALERRORS | SEM_NOGPFAULTERRORBOX | SEM_NOOPENFILEERRORBOX);
-#endif
-       argv0 = argv[0];
-       p9main(argc, argv);
-       exits("main");
-       return 99;
-}
diff --git a/src/lib9/math_darwin_arm.c b/src/lib9/math_darwin_arm.c
deleted file mode 100644 (file)
index ff5b0ce..0000000
+++ /dev/null
@@ -1,102 +0,0 @@
-// Copyright 2014 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Some Darwin/ARM libc versions fail to provide a standard compliant version
-// of frexp and ldexp that could handle denormal floating point numbers.
-// The frexp and ldexp implementations are translated from their Go version.
-
-#include <stdint.h>
-
-// Assume double and uint64_t are using the same endian.
-union dint64 {
-       double d;
-       uint64_t u;
-};
-
-static const uint64_t mask = 0x7FF, bias = 1023;
-static const int shift = 64 - 11 - 1;
-static const uint64_t uvnan = 0x7FF8000000000001ULL, uvinf = 0x7FF0000000000000ULL,
-         uvneginf = 0xFFF0000000000000ULL;
-static const double smallestnormal = 2.2250738585072014e-308; // 2**-1022
-
-static inline uint64_t float64bits(double x) {
-       union dint64 u;
-       u.d = x;
-       return u.u;
-}
-static inline double float64frombits(uint64_t x) {
-       union dint64 u;
-       u.u = x;
-       return u.d;
-}
-static inline int isinf(double x) {
-       return float64bits(x) == uvinf || float64bits(x) == uvneginf;
-}
-static inline int isnan(double x) {
-       return x != x;
-}
-extern double fabs(double);
-static double normalize(double x, int *exp) {
-       if (fabs(x) < smallestnormal) {
-               *exp = -52;
-               return x * (double)(1LL<<52);
-       }
-       *exp = 0;
-       return x;
-}
-
-double ldexp(double frac, int exp) {
-       // special cases
-       if (frac == 0.0) return frac;
-       if (isinf(frac) || isnan(frac)) return frac;
-
-       int e;
-       frac = normalize(frac, &e);
-       exp += e;
-       uint64_t x = float64bits(frac);
-       exp += (int)((x>>shift)&mask) - bias;
-       if (exp < -1074) { // underflow
-               if (frac < 0.0) return float64frombits(1ULL<<63); // -0.0
-               return 0.0;
-       }
-       if (exp > 1023) { // overflow
-               if (frac < 0.0) return float64frombits(uvneginf);
-               return float64frombits(uvinf);
-       }
-       double m = 1;
-       if (exp < -1022) { // denormal
-               exp += 52;
-               m = 1.0 / (double)(1ULL<<52);
-       }
-       x &= ~(mask << shift);
-       x |= (uint64_t)(exp+bias) << shift;
-       return m * float64frombits(x);
-}
-
-double frexp(double f, int *exp) {
-       *exp = 0;
-       // special cases
-       if (f == 0.0) return f;
-       if (isinf(f) || isnan(f)) return f;
-
-       f = normalize(f, exp);
-       uint64_t x = float64bits(f);
-       *exp += (int)((x>>shift)&mask) - bias + 1;
-       x &= ~(mask << shift);
-       x |= (-1 + bias) << shift;
-       return float64frombits(x);
-}
-
-// On Darwin/ARM, the kernel insists on running VFP in runfast mode, and it
-// cannot deal with denormal floating point numbers in that mode, so we have
-// to disable the runfast mode if the client uses ldexp/frexp (i.e. 5g).
-void disable_vfp_runfast(void) __attribute__((constructor));
-void disable_vfp_runfast(void) {
-    __asm__ volatile (
-                     "fmrx r0, fpscr\n"
-                     "bic r0, r0, $0x03000000\n"
-                     "fmxr fpscr, r0\n"
-                     : : : "r0"
-                    );
-}
diff --git a/src/lib9/nan.c b/src/lib9/nan.c
deleted file mode 100644 (file)
index f17b441..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-// +build !plan9
-
-/*
-Plan 9 from User Space src/lib9/nan.c
-http://code.swtch.com/plan9port/src/tip/src/lib9/nan.c
-
-Copyright 2001-2007 Russ Cox.  All Rights Reserved.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-*/
-
-#include <u.h>
-#include <libc.h>
-#include "fmt/fmtdef.h"
-
-double
-NaN(void)
-{
-       return __NaN();
-}
-
-double
-Inf(int sign)
-{
-       return __Inf(sign);
-}
-
-int
-isNaN(double x)
-{
-       return __isNaN(x);
-}
-
-int
-isInf(double x, int sign)
-{
-       return __isInf(x, sign);
-}
diff --git a/src/lib9/notify.c b/src/lib9/notify.c
deleted file mode 100644 (file)
index 7843d34..0000000
+++ /dev/null
@@ -1,300 +0,0 @@
-// +build !plan9
-// +build !windows
-
-/*
-Plan 9 from User Space src/lib9/notify.c
-http://code.swtch.com/plan9port/src/tip/src/lib9/notify.c
-
-Copyright 2001-2007 Russ Cox.  All Rights Reserved.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-*/
-
-/*
- * Signal handling for Plan 9 programs.
- * We stubbornly use the strings from Plan 9 instead
- * of the enumerated Unix constants.
- * There are some weird translations.  In particular,
- * a "kill" note is the same as SIGTERM in Unix.
- * There is no equivalent note to Unix's SIGKILL, since
- * it's not a deliverable signal anyway.
- *
- * We do not handle SIGABRT or SIGSEGV, mainly because
- * the thread library queues its notes for later, and we want
- * to dump core with the state at time of delivery.
- *
- * We have to add some extra entry points to provide the
- * ability to tweak which signals are deliverable and which
- * are acted upon.  Notifydisable and notifyenable play with
- * the process signal mask.  Notifyignore enables the signal
- * but will not call notifyf when it comes in.  This is occasionally
- * useful.
- */
-
-#include <u.h>
-#include <signal.h>
-#define NOPLAN9DEFINES
-#include <libc.h>
-
-extern char *_p9sigstr(int, char*);
-extern int _p9strsig(char*);
-
-typedef struct Sig Sig;
-struct Sig
-{
-       int sig;                        /* signal number */
-       int flags;
-};
-
-enum
-{
-       Restart = 1<<0,
-       Ignore = 1<<1
-};
-
-static Sig sigs[] = {
-       SIGHUP,         0,
-       SIGINT,         0,
-       SIGQUIT,                0,
-       SIGILL,         0,
-       SIGTRAP,                0,
-/*     SIGABRT,                0,      */
-#ifdef SIGEMT
-       SIGEMT,         0,
-#endif
-       SIGFPE,         0,
-       SIGBUS,         0,
-/*     SIGSEGV,                0,      */
-       SIGCHLD,                Restart|Ignore,
-       SIGSYS,         0,
-       SIGPIPE,                Ignore,
-       SIGALRM,                0,
-       SIGTERM,                0,
-       SIGTSTP,                Restart|Ignore,
-/*     SIGTTIN,                Restart|Ignore, */
-/*     SIGTTOU,                Restart|Ignore, */
-       SIGXCPU,                0,
-       SIGXFSZ,                0,
-       SIGVTALRM,      0,
-       SIGUSR1,                0,
-       SIGUSR2,                0,
-#ifdef SIGWINCH
-       SIGWINCH,       Restart|Ignore,
-#endif
-#ifdef SIGINFO
-       SIGINFO,                Restart|Ignore,
-#endif
-};
-
-static Sig*
-findsig(int s)
-{
-       int i;
-
-       for(i=0; i<nelem(sigs); i++)
-               if(sigs[i].sig == s)
-                       return &sigs[i];
-       return nil;
-}
-
-/*
- * The thread library initializes _notejmpbuf to its own
- * routine which provides a per-pthread jump buffer.
- * If we're not using the thread library, we assume we are
- * single-threaded.
- */
-typedef struct Jmp Jmp;
-struct Jmp
-{
-       p9jmp_buf b;
-};
-
-static Jmp onejmp;
-
-static Jmp*
-getonejmp(void)
-{
-       return &onejmp;
-}
-
-Jmp *(*_notejmpbuf)(void) = getonejmp;
-static void noteinit(void);
-
-/*
- * Actual signal handler.
- */
-
-static void (*notifyf)(void*, char*);  /* Plan 9 handler */
-
-static void
-signotify(int sig)
-{
-       char tmp[64];
-       Jmp *j;
-       Sig *s;
-
-       j = (*_notejmpbuf)();
-       switch(p9setjmp(j->b)){
-       case 0:
-               if(notifyf)
-                       (*notifyf)(nil, _p9sigstr(sig, tmp));
-               /* fall through */
-       case 1: /* noted(NDFLT) */
-               if(0)print("DEFAULT %d\n", sig);
-               s = findsig(sig);
-               if(s && (s->flags&Ignore))
-                       return;
-               signal(sig, SIG_DFL);
-               raise(sig);
-               _exit(1);
-       case 2: /* noted(NCONT) */
-               if(0)print("HANDLED %d\n", sig);
-               return;
-       }
-}
-
-static void
-signonotify(int sig)
-{
-       USED(sig);
-}
-
-int
-noted(int v)
-{
-       p9longjmp((*_notejmpbuf)()->b, v==NCONT ? 2 : 1);
-       abort();
-       return 0;
-}
-
-int
-notify(void (*f)(void*, char*))
-{
-       static int init;
-
-       notifyf = f;
-       if(!init){
-               init = 1;
-               noteinit();
-       }
-       return 0;
-}
-
-/*
- * Nonsense about enabling and disabling signals.
- */
-typedef void Sighandler(int);
-static Sighandler*
-handler(int s)
-{
-       struct sigaction sa;
-
-       sigaction(s, nil, &sa);
-       return sa.sa_handler;
-}
-
-static int
-notesetenable(int sig, int enabled)
-{
-       sigset_t mask, omask;
-
-       if(sig == 0)
-               return -1;
-
-       sigemptyset(&mask);
-       sigaddset(&mask, sig);
-       sigprocmask(enabled ? SIG_UNBLOCK : SIG_BLOCK, &mask, &omask);
-       return !sigismember(&omask, sig);
-}
-
-int
-noteenable(char *msg)
-{
-       return notesetenable(_p9strsig(msg), 1);
-}
-
-int
-notedisable(char *msg)
-{
-       return notesetenable(_p9strsig(msg), 0);
-}
-
-static int
-notifyseton(int s, int on)
-{
-       Sig *sig;
-       struct sigaction sa, osa;
-
-       sig = findsig(s);
-       if(sig == nil)
-               return -1;
-       memset(&sa, 0, sizeof sa);
-       sa.sa_handler = on ? signotify : signonotify;
-       if(sig->flags&Restart)
-               sa.sa_flags |= SA_RESTART;
-
-       /*
-        * We can't allow signals within signals because there's
-        * only one jump buffer.
-        */
-       sigfillset(&sa.sa_mask);
-
-       /*
-        * Install handler.
-        */
-       sigaction(sig->sig, &sa, &osa);
-       return osa.sa_handler == signotify;
-}
-
-int
-notifyon(char *msg)
-{
-       return notifyseton(_p9strsig(msg), 1);
-}
-
-int
-notifyoff(char *msg)
-{
-       return notifyseton(_p9strsig(msg), 0);
-}
-
-/*
- * Initialization follows sigs table.
- */
-static void
-noteinit(void)
-{
-       int i;
-       Sig *sig;
-
-       for(i=0; i<nelem(sigs); i++){
-               sig = &sigs[i];
-               /*
-                * If someone has already installed a handler,
-                * It's probably some ld preload nonsense,
-                * like pct (a SIGVTALRM-based profiler).
-                * Or maybe someone has already called notifyon/notifyoff.
-                * Leave it alone.
-                */
-               if(handler(sig->sig) != SIG_DFL)
-                       continue;
-               notifyseton(sig->sig, 1);
-       }
-}
-
diff --git a/src/lib9/nulldir.c b/src/lib9/nulldir.c
deleted file mode 100644 (file)
index 2157ff3..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-// +build !plan9
-
-/*
-Inferno lib9/nulldir.c
-http://code.google.com/p/inferno-os/source/browse/lib9/nulldir.c
-
-       Copyright © 1994-1999 Lucent Technologies Inc.  All rights reserved.
-       Revisions Copyright © 2000-2007 Vita Nuova Holdings Limited (www.vitanuova.com).  All rights reserved.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-*/
-
-#include <u.h>
-#include <libc.h>
-
-void
-nulldir(Dir *d)
-{
-       memset(d, ~0, sizeof(Dir));
-       d->name = d->uid = d->gid = d->muid = "";
-}
diff --git a/src/lib9/open.c b/src/lib9/open.c
deleted file mode 100644 (file)
index 7f53c8e..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-// +build !plan9
-
-/*
-Plan 9 from User Space src/lib9/open.c
-http://code.swtch.com/plan9port/src/tip/src/lib9/open.c
-
-Copyright 2001-2007 Russ Cox.  All Rights Reserved.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-*/
-
-#define _GNU_SOURCE    /* for Linux O_DIRECT */
-#include <u.h>
-#define NOPLAN9DEFINES
-#include <sys/file.h>
-#include <libc.h>
-#ifndef O_DIRECT
-#define O_DIRECT 0
-#endif
-
-int
-p9open(char *name, int mode)
-{
-       int rclose;
-       int fd, umode, rdwr;
-
-       rdwr = mode&3;
-       umode = rdwr;
-       rclose = mode&ORCLOSE;
-       mode &= ~(3|ORCLOSE);
-       if(mode&OTRUNC){
-               umode |= O_TRUNC;
-               mode ^= OTRUNC;
-       }
-       if(mode&ODIRECT){
-               umode |= O_DIRECT;
-               mode ^= ODIRECT;
-       }
-       if(mode&OAPPEND){
-               umode |= O_APPEND;
-               mode ^= OAPPEND;
-       }
-       if(mode){
-               werrstr("mode 0x%x not supported", mode);
-               return -1;
-       }
-       umode |= O_BINARY;
-       fd = open(name, umode);
-       if(fd >= 0){
-               if(rclose)
-                       remove(name);
-       }
-       return fd;
-}
diff --git a/src/lib9/readn.c b/src/lib9/readn.c
deleted file mode 100644 (file)
index 7dfe9e5..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-// +build !plan9
-
-/*
-Inferno lib9/readn.c
-http://code.google.com/p/inferno-os/source/browse/lib9/readn.c
-
-       Copyright © 1994-1999 Lucent Technologies Inc.  All rights reserved.
-       Revisions Copyright © 2000-2007 Vita Nuova Holdings Limited (www.vitanuova.com).  All rights reserved.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-*/
-
-#include <u.h>
-#include <libc.h>
-
-long
-readn(int f, void *av, long n)
-{
-       char *a;
-       long m, t;
-
-       a = av;
-       t = 0;
-       while(t < n){
-               m = read(f, a+t, (size_t)(n-t));
-               if(m <= 0){
-                       if(t == 0)
-                               return m;
-                       break;
-               }
-               t += m;
-       }
-       return t;
-}
diff --git a/src/lib9/rfork.c b/src/lib9/rfork.c
deleted file mode 100644 (file)
index 23b3ee6..0000000
+++ /dev/null
@@ -1,156 +0,0 @@
-// +build !plan9
-// +build !windows
-
-/*
-Plan 9 from User Space src/lib9/rfork.c
-http://code.swtch.com/plan9port/src/tip/src/lib9/rfork.c
-
-Copyright 2001-2007 Russ Cox.  All Rights Reserved.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-*/
-
-#include <u.h>
-#include <sys/wait.h>
-#include <signal.h>
-#include <libc.h>
-#undef rfork
-
-static void
-nop(int x)
-{
-       USED(x);
-}
-
-int
-p9rfork(int flags)
-{
-       int pid, status;
-       int p[2];
-       int n;
-       char buf[128], *q;
-       extern char **environ;
-
-       if((flags&(RFPROC|RFFDG|RFMEM)) == (RFPROC|RFFDG)){
-               /* check other flags before we commit */
-               flags &= ~(RFPROC|RFFDG|RFENVG);
-               n = (flags & ~(RFNOTEG|RFNAMEG|RFNOWAIT|RFCENVG));
-               if(n){
-                       werrstr("unknown flags %08ux in rfork", n);
-                       return -1;
-               }
-               if(flags&RFNOWAIT){
-                       /*
-                        * BUG - should put the signal handler back after we
-                        * finish, but I just don't care.  If a program calls with
-                        * NOWAIT once, they're not likely to want child notes
-                        * after that.
-                        */
-                       signal(SIGCHLD, nop);
-                       if(pipe(p) < 0)
-                               return -1;
-               }
-               pid = fork();
-               if(pid == -1)
-                       return -1;
-               if(flags&RFNOWAIT){
-                       flags &= ~RFNOWAIT;
-                       if(pid){
-                               /*
-                                * Parent - wait for child to fork wait-free child.
-                                * Then read pid from pipe.  Assume pipe buffer can absorb the write.
-                                */
-                               close(p[1]);
-                               status = 0;
-                               if(wait4(pid, &status, 0, 0) < 0){
-                                       werrstr("pipe dance - wait4 - %r");
-                                       close(p[0]);
-                                       return -1;
-                               }
-                               n = (int)readn(p[0], buf, sizeof buf-1);
-                               close(p[0]);
-                               if(!WIFEXITED(status) || WEXITSTATUS(status)!=0 || n <= 0){
-                                       if(!WIFEXITED(status))
-                                               werrstr("pipe dance - !exited 0x%ux", status);
-                                       else if(WEXITSTATUS(status) != 0)
-                                               werrstr("pipe dance - non-zero status 0x%ux", status);
-                                       else if(n < 0)
-                                               werrstr("pipe dance - pipe read error - %r");
-                                       else if(n == 0)
-                                               werrstr("pipe dance - pipe read eof");
-                                       else
-                                               werrstr("pipe dance - unknown failure");
-                                       return -1;
-                               }
-                               buf[n] = 0;
-                               if(buf[0] == 'x'){
-                                       werrstr("%s", buf+2);
-                                       return -1;
-                               }
-                               pid = (int)strtol(buf, &q, 0);
-                       }else{
-                               /*
-                                * Child - fork a new child whose wait message can't
-                                * get back to the parent because we're going to exit!
-                                */
-                               signal(SIGCHLD, SIG_IGN);
-                               close(p[0]);
-                               pid = fork();
-                               if(pid){
-                                       /* Child parent - send status over pipe and exit. */
-                                       if(pid > 0)
-                                               fprint(p[1], "%d", pid);
-                                       else
-                                               fprint(p[1], "x %r");
-                                       close(p[1]);
-                                       _exit(0);
-                               }else{
-                                       /* Child child - close pipe. */
-                                       close(p[1]);
-                               }
-                       }
-               }
-               if(pid != 0)
-                       return pid;
-               if(flags&RFCENVG)
-                       if(environ)
-                               *environ = nil;
-       }
-       if(flags&RFPROC){
-               werrstr("cannot use rfork for shared memory -- use libthread");
-               return -1;
-       }
-       if(flags&RFNAMEG){
-               /* XXX set $NAMESPACE to a new directory */
-               flags &= ~RFNAMEG;
-       }
-       if(flags&RFNOTEG){
-               setpgid(0, getpid());
-               flags &= ~RFNOTEG;
-       }
-       if(flags&RFNOWAIT){
-               werrstr("cannot use RFNOWAIT without RFPROC");
-               return -1;
-       }
-       if(flags){
-               werrstr("unknown flags %08ux in rfork", flags);
-               return -1;
-       }
-       return 0;
-}
diff --git a/src/lib9/run_plan9.c b/src/lib9/run_plan9.c
deleted file mode 100644 (file)
index 2993262..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-// Copyright 2013 The Go Authors.  All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// +build plan9
-
-#include <u.h>
-#include <libc.h>
-
-int
-runcmd(char **argv)
-{
-       int pid;
-       Waitmsg *w;
-       
-       switch(pid = fork()) {
-       case -1:
-               return -1;
-       case 0:
-               exec(argv[0], argv);
-               fprint(2, "exec %s: %r\n", argv[0]);
-               exits("exec");
-       }
-       
-       w = wait();
-       if(w == nil)
-               return -1;
-       if(w->pid != pid) {
-               werrstr("unexpected pid in wait");
-               free(w);
-               return -1;
-       }
-       if(w->msg[0]) {
-               werrstr("unsuccessful exit status: %s", w->msg);
-               free(w);
-               return -1;
-       }
-       free(w);
-       return 0;
-}
diff --git a/src/lib9/run_unix.c b/src/lib9/run_unix.c
deleted file mode 100644 (file)
index 1acaefe..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-// Copyright 2013 The Go Authors.  All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// +build darwin dragonfly freebsd linux netbsd openbsd solaris
-
-#include <u.h>
-#include <errno.h>
-#include <sys/wait.h>
-#define NOPLAN9DEFINES
-#include <libc.h>
-
-int
-runcmd(char **argv)
-{
-       int pid, pid1, status;
-       
-       switch(pid = fork()) {
-       case -1:
-               return -1;
-       case 0:
-               execvp(argv[0], argv);
-               fprint(2, "exec %s: %r\n", argv[0]);
-               _exit(1);
-       }
-       
-       while((pid1 = wait(&status)) < 0) {
-               if(errno != EINTR) {
-                       werrstr("waitpid: %r");
-                       return -1;
-               }
-       }
-       if(pid1 != pid) {
-               werrstr("unexpected pid in wait");
-               return -1;
-       }
-       if(!WIFEXITED(status) || WEXITSTATUS(status) != 0) {
-               werrstr("unsuccessful exit status %#x", status);
-               return -1;
-       }
-       return 0;
-}
-
diff --git a/src/lib9/run_windows.c b/src/lib9/run_windows.c
deleted file mode 100644 (file)
index e3e1c25..0000000
+++ /dev/null
@@ -1,89 +0,0 @@
-// Copyright 2013 The Go Authors.  All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-#include <u.h>
-#include <windows.h>
-#define NOPLAN9DEFINES
-#include <libc.h>
-#include "win.h"
-
-int
-runcmd(char **argv)
-{
-       // Mostly copied from ../cmd/dist/windows.c.
-       // If there's a bug here, fix the logic there too.
-       int i, j, nslash;
-       Fmt fmt;
-       char *q;
-       WinRune *r;
-       STARTUPINFOW si;
-       PROCESS_INFORMATION pi;
-       DWORD code, lasterr;
-
-       fmtstrinit(&fmt);
-       for(i=0; argv[i]; i++) {
-               if(i > 0)
-                       fmtprint(&fmt, " ");
-               q = argv[i];
-               if(strstr(q, " ") || strstr(q, "\t") || strstr(q, "\"") || strstr(q, "\\\\") || (strlen(q) > 0 && q[strlen(q)-1] == '\\')) {
-                       fmtprint(&fmt, "\"");
-                       nslash = 0;
-                       for(; *q; q++) {
-                               if(*q == '\\') {
-                                       nslash++;
-                                       continue;
-                               }
-                               if(*q == '"') {
-                                       for(j=0; j<2*nslash+1; j++)
-                                               fmtprint(&fmt, "\\");
-                                       nslash = 0;
-                               }
-                               for(j=0; j<nslash; j++)
-                                       fmtprint(&fmt, "\\");
-                               nslash = 0;
-                               fmtprint(&fmt, "\"");
-                       }
-                       for(j=0; j<2*nslash; j++)
-                               fmtprint(&fmt, "\\");
-                       fmtprint(&fmt, "\"");
-               } else {
-                       fmtprint(&fmt, "%s", q);
-               }
-       }
-       
-       q = fmtstrflush(&fmt);
-       r = torune(q);
-       free(q);
-
-       memset(&si, 0, sizeof si);
-       si.cb = sizeof si;
-       si.dwFlags = STARTF_USESTDHANDLES;
-       si.hStdOutput = GetStdHandle(STD_OUTPUT_HANDLE);
-       si.hStdError = GetStdHandle(STD_ERROR_HANDLE);
-
-       if(!CreateProcessW(nil, r, nil, nil, TRUE, 0, nil, nil, &si, &pi)) {
-               werrstr("CreateProcess failed: errno=%d", (int)GetLastError());
-               free(r);
-               return -1;
-       }
-
-       free(r);
-       if(WaitForMultipleObjects(1, &pi.hProcess, FALSE, INFINITE) != 0) {
-               werrstr("WaitForMultipleObjects failed: errno=%d", (int)GetLastError());
-               return -1;
-       }
-       i = GetExitCodeProcess(pi.hProcess, &code);
-       lasterr = GetLastError();
-       CloseHandle(pi.hProcess);
-       CloseHandle(pi.hThread);
-       if(!i) {
-               werrstr("GetExitCodeProcess failed: errno=%d", (int)lasterr);
-               return -1;
-       }
-       if(code != 0) {
-               werrstr("unsuccessful exit status: %d", (int)code);
-               return -1;
-       }
-       return 0;
-}
diff --git a/src/lib9/seek.c b/src/lib9/seek.c
deleted file mode 100644 (file)
index 0a0706c..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-// +build !plan9
-
-/*
-Plan 9 from User Space src/lib9/seek.c
-http://code.swtch.com/plan9port/src/tip/src/lib9/seek.c
-
-Copyright 2001-2007 Russ Cox.  All Rights Reserved.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-*/
-
-#include <u.h>
-#include <libc.h>
-
-vlong
-seek(int fd, vlong offset, int whence)
-{
-       return lseek(fd, offset, whence);
-}
diff --git a/src/lib9/strecpy.c b/src/lib9/strecpy.c
deleted file mode 100644 (file)
index 4b2b92b..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-// +build !plan9
-
-/*
-Inferno lib9/strecpy.c
-http://code.google.com/p/inferno-os/source/browse/lib9/strecpy.c
-
-       Copyright © 1994-1999 Lucent Technologies Inc.  All rights reserved.
-       Revisions Copyright © 2000-2007 Vita Nuova Holdings Limited (www.vitanuova.com).  All rights reserved.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-*/
-
-#include <u.h>
-#include <libc.h>
-
-char*
-strecpy(char *to, char *e, char *from)
-{
-       if(to >= e)
-               return to;
-       to = memccpy(to, from, '\0', (size_t)(e - to));
-       if(to == nil){
-               to = e - 1;
-               *to = '\0';
-       }else{
-               to--;
-       }
-       return to;
-}
diff --git a/src/lib9/sysfatal.c b/src/lib9/sysfatal.c
deleted file mode 100644 (file)
index 9789061..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-// +build !plan9
-
-/*
-Plan 9 from User Space src/lib9/sysfatal.c
-http://code.swtch.com/plan9port/src/tip/src/lib9/sysfatal.c
-
-Copyright 2001-2007 Russ Cox.  All Rights Reserved.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-*/
-
-#include <u.h>
-#include <libc.h>
-
-void (*_sysfatal)(char*, ...);
-
-void
-sysfatal(char *fmt, ...)
-{
-       char buf[256];
-       va_list arg;
-
-       va_start(arg, fmt);
-       if(_sysfatal)
-               (*_sysfatal)(fmt, arg);
-       vseprint(buf, buf+sizeof buf, fmt, arg);
-       va_end(arg);
-
-       __fixargv0();
-       fprint(2, "%s: %s\n", argv0 ? argv0 : "<prog>", buf);
-       exits("fatal");
-}
-
diff --git a/src/lib9/tempdir_plan9.c b/src/lib9/tempdir_plan9.c
deleted file mode 100644 (file)
index 80d7ddb..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-// Copyright 2013 The Go Authors.  All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// +build plan9
-
-#include <u.h>
-#include <libc.h>
-
-char*
-mktempdir(void)
-{
-       char *p;
-       int fd, i;
-       
-       p = smprint("/tmp/go-link-XXXXXX");
-       for(i=0; i<1000; i++) {
-               sprint(p, "/tmp/go-link-%06x", nrand((1<<24)-1));
-               fd = create(p, OREAD|OEXCL, 0700|DMDIR);
-               if(fd >= 0) {
-                       close(fd);
-                       return p;
-               }
-       }
-       free(p);
-       return nil;
-}
-
-void
-removeall(char *p)
-{
-       int fd, n, i;
-       Dir *d;
-       char *q;
-       
-       if(remove(p) >= 0)
-               return;
-       if((d = dirstat(p)) == nil)
-               return;
-       if(!(d->mode & DMDIR)) {
-               free(d);
-               return;
-       }
-       free(d);
-       
-       if((fd = open(p, OREAD)) < 0)
-               return;
-       n = dirreadall(fd, &d);
-       close(fd);
-       for(i=0; i<n; i++) {
-               q = smprint("%s/%s", p, d[i].name);
-               removeall(q);
-               free(q);
-       }
-       free(d);
-}
diff --git a/src/lib9/tempdir_unix.c b/src/lib9/tempdir_unix.c
deleted file mode 100644 (file)
index 269d538..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-// Copyright 2013 The Go Authors.  All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// +build darwin dragonfly freebsd linux netbsd openbsd solaris
-
-#include <u.h>
-#include <dirent.h>
-#include <sys/stat.h>
-#define NOPLAN9DEFINES
-#include <libc.h>
-
-char*
-mktempdir(void)
-{
-       char *tmp, *p;
-       
-       tmp = getenv("TMPDIR");
-       if(tmp == nil || strlen(tmp) == 0)
-               tmp = "/var/tmp";
-       p = smprint("%s/go-link-XXXXXX", tmp);
-       if(mkdtemp(p) == nil)
-               return nil;
-       return p;
-}
-
-void
-removeall(char *p)
-{
-       DIR *d;
-       struct dirent *dp;
-       char *q;
-       struct stat st;
-
-       if(stat(p, &st) < 0)
-               return;
-       if(!S_ISDIR(st.st_mode)) {
-               unlink(p);
-               return;
-       }
-
-       d = opendir(p);
-       while((dp = readdir(d)) != nil) {
-               if(strcmp(dp->d_name, ".") == 0 || strcmp(dp->d_name, "..") == 0)
-                       continue;
-               q = smprint("%s/%s", p, dp->d_name);
-               removeall(q);
-               free(q);
-       }
-       closedir(d);
-       rmdir(p);
-}
diff --git a/src/lib9/tempdir_windows.c b/src/lib9/tempdir_windows.c
deleted file mode 100644 (file)
index 4c3df7c..0000000
+++ /dev/null
@@ -1,113 +0,0 @@
-// Copyright 2013 The Go Authors.  All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-#include <u.h>
-#include <windows.h>
-#include <libc.h>
-#include "win.h"
-
-char*
-toutf(WinRune *r)
-{
-       Rune *r1;
-       int i, n;
-       char *p;
-       
-       n = 0;
-       while(r[n] != '\0')
-               n++;
-       n++;
-       r1 = malloc(n*sizeof r1[0]);
-       for(i=0; i<n; i++)
-               r1[i] = r[i];
-       p = smprint("%S", r1);
-       free(r1);
-       return p;
-}
-
-WinRune*
-torune(char *p)
-{
-       int i, n;
-       Rune rr;
-       WinRune *r;
-       
-       n = utflen(p);
-       r = malloc((n+1)*sizeof r[0]);
-       for(i=0; i<n; i++) {
-               p += chartorune(&rr, p);
-               r[i] = rr;
-       }
-       r[n] = '\0';
-       return r;
-}
-
-char*
-mktempdir(void)
-{
-       WinRune buf[1024];
-       WinRune tmp[MAX_PATH];
-       WinRune golink[] = {'g', 'o', 'l', 'i', 'n', 'k', '\0'};
-       int n;
-       
-       n = GetTempPathW(nelem(buf), buf);
-       if(n <= 0)
-               return nil;
-       buf[n] = '\0';
-       
-       if(GetTempFileNameW(buf, golink, 0, tmp) == 0)
-               return nil;
-       DeleteFileW(tmp);
-       if(!CreateDirectoryW(tmp, nil))
-               return nil;
-       
-       return toutf(tmp);
-}
-
-void
-removeall(char *p)
-{
-       WinRune *r, *r1;
-       DWORD attr;
-       char *q, *qt, *elem;
-       HANDLE h;
-       WIN32_FIND_DATAW data;
-       
-       r = torune(p);
-       attr = GetFileAttributesW(r);
-       if(attr == INVALID_FILE_ATTRIBUTES || !(attr & FILE_ATTRIBUTE_DIRECTORY)) {
-               DeleteFileW(r);
-               free(r);
-               return;
-       }
-
-       q = smprint("%s\\*", p);
-       r1 = torune(q);
-       free(q);
-       h = FindFirstFileW(r1, &data);
-       if(h == INVALID_HANDLE_VALUE)
-               goto done;
-       do{
-               q = toutf(data.cFileName);
-               elem = strrchr(q, '\\');
-               if(elem != nil)
-                       elem++;
-               else
-                       elem = q;
-               if(strcmp(elem, ".") == 0 || strcmp(elem, "..") == 0) {
-                       free(q);
-                       continue;
-               }
-               qt = smprint("%s\\%s", p, q);
-               free(q);
-               removeall(qt);
-               free(qt);
-       }while(FindNextFileW(h, &data));
-       FindClose(h);
-
-done:
-       free(r1);
-       RemoveDirectoryW(r);
-       free(r);
-}
diff --git a/src/lib9/time.c b/src/lib9/time.c
deleted file mode 100644 (file)
index e1b87a7..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-// +build !plan9
-
-/*
-Plan 9 from User Space src/lib9/time.c
-http://code.swtch.com/plan9port/src/tip/src/lib9/time.c
-
-Copyright 2001-2007 Russ Cox.  All Rights Reserved.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-*/
-#include <u.h>
-#include <sys/time.h>
-#include <time.h>
-#ifndef _WIN32
-#include <sys/resource.h>
-#endif
-#define NOPLAN9DEFINES
-#include <libc.h>
-
-long
-p9times(long *t)
-{
-#ifdef _WIN32
-       memset(t, 0, 4*sizeof(long));
-#else
-       struct rusage ru, cru;
-
-       if(getrusage(0, &ru) < 0 || getrusage(-1, &cru) < 0)
-               return -1;
-
-       t[0] = ru.ru_utime.tv_sec*1000 + ru.ru_utime.tv_usec/1000;
-       t[1] = ru.ru_stime.tv_sec*1000 + ru.ru_stime.tv_usec/1000;
-       t[2] = cru.ru_utime.tv_sec*1000 + cru.ru_utime.tv_usec/1000;
-       t[3] = cru.ru_stime.tv_sec*1000 + cru.ru_stime.tv_usec/1000;
-#endif
-
-       /* BUG */
-       return t[0]+t[1]+t[2]+t[3];
-}
-
-double
-p9cputime(void)
-{
-       long t[4];
-       double d;
-
-       if(p9times(t) < 0)
-               return -1.0;
-
-       d = (double)t[0]+(double)t[1]+(double)t[2]+(double)t[3];
-       return d/1000.0;
-}
diff --git a/src/lib9/tokenize.c b/src/lib9/tokenize.c
deleted file mode 100644 (file)
index a9b5935..0000000
+++ /dev/null
@@ -1,133 +0,0 @@
-/*
-Inferno lib9/tokenize.c
-http://code.google.com/p/inferno-os/source/browse/lib9/tokenize.c
-
-       Copyright © 1994-1999 Lucent Technologies Inc.  All rights reserved.
-       Revisions Copyright © 2000-2007 Vita Nuova Holdings Limited (www.vitanuova.com).  All rights reserved.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-*/
-
-#include <u.h>
-#include <libc.h>
-
-static char qsep[] = " \t\r\n";
-
-static char*
-qtoken(char *s, char *sep)
-{
-       int quoting;
-       char *t;
-
-       quoting = 0;
-       t = s;  /* s is output string, t is input string */
-       while(*t!='\0' && (quoting || utfrune(sep, (Rune)*t)==nil)){
-               if(*t != '\''){
-                       *s++ = *t++;
-                       continue;
-               }
-               /* *t is a quote */
-               if(!quoting){
-                       quoting = 1;
-                       t++;
-                       continue;
-               }
-               /* quoting and we're on a quote */
-               if(t[1] != '\''){
-                       /* end of quoted section; absorb closing quote */
-                       t++;
-                       quoting = 0;
-                       continue;
-               }
-               /* doubled quote; fold one quote into two */
-               t++;
-               *s++ = *t++;
-       }
-       if(*s != '\0'){
-               *s = '\0';
-               if(t == s)
-                       t++;
-       }
-       return t;
-}
-
-static char*
-etoken(char *t, char *sep)
-{
-       int quoting;
-
-       /* move to end of next token */
-       quoting = 0;
-       while(*t!='\0' && (quoting || utfrune(sep, (Rune)*t)==nil)){
-               if(*t != '\''){
-                       t++;
-                       continue;
-               }
-               /* *t is a quote */
-               if(!quoting){
-                       quoting = 1;
-                       t++;
-                       continue;
-               }
-               /* quoting and we're on a quote */
-               if(t[1] != '\''){
-                       /* end of quoted section; absorb closing quote */
-                       t++;
-                       quoting = 0;
-                       continue;
-               }
-               /* doubled quote; fold one quote into two */
-               t += 2;
-       }
-       return t;
-}
-
-int
-gettokens(char *s, char **args, int maxargs, char *sep)
-{
-       int nargs;
-
-       for(nargs=0; nargs<maxargs; nargs++){
-               while(*s!='\0' && utfrune(sep, (Rune)*s)!=nil)
-                       *s++ = '\0';
-               if(*s == '\0')
-                       break;
-               args[nargs] = s;
-               s = etoken(s, sep);
-       }
-
-       return nargs;
-}
-
-int
-tokenize(char *s, char **args, int maxargs)
-{
-       int nargs;
-
-       for(nargs=0; nargs<maxargs; nargs++){
-               while(*s!='\0' && utfrune(qsep, (Rune)*s)!=nil)
-                       s++;
-               if(*s == '\0')
-                       break;
-               args[nargs] = s;
-               s = qtoken(s, qsep);
-       }
-
-       return nargs;
-}
diff --git a/src/lib9/utf/Makefile b/src/lib9/utf/Makefile
deleted file mode 100644 (file)
index fe6f635..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-# Copyright 2010 The Go Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style
-# license that can be found in the LICENSE file.
-
-# The library is built by the Makefile in the parent directory.
-# This Makefile only builds mkrunetype.
-# GOROOT, GOOS, and GOARCH must be set explicitly.
-
-TARG=mkrunetype
-
-UnicodeData-%.txt:
-       curl http://www.unicode.org/Public/$*/ucd/UnicodeData.txt >_$@
-       mv _$@ $@
-
-mkrunetype: mkrunetype.c
-       cc -I../../../include -o mkrunetype -L$(GOROOT)/pkg/obj/$(GOOS)_$(GOARCH)/ mkrunetype.c -l9
-
-runetypebody-%.h: mkrunetype UnicodeData-%.txt
-       mkrunetype -p UnicodeData-$*.txt >_$@
-       mv _$@ $@
-
-CLEANFILES+=UnicodeData.txt
-
-UNICODE_VERSION=6.3.0
-
-test: mkrunetype UnicodeData-$(UNICODE_VERSION).txt
-       mkrunetype -c UnicodeData-$(UNICODE_VERSION).txt
-
-clean:
-       rm -f UnicodeData.txt mkrunetype
diff --git a/src/lib9/utf/mkrunetype.c b/src/lib9/utf/mkrunetype.c
deleted file mode 100644 (file)
index 01eb6b6..0000000
+++ /dev/null
@@ -1,734 +0,0 @@
-// Copyright 2009 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// +build ignore
-
-/*
- * make is(upper|lower|title|space|alpha)rune and
- * to(upper|lower|title)rune from a UnicodeData.txt file.
- * these can be found at unicode.org
- *
- * with -c, runs a check of the existing runetype functions vs.
- * those extracted from UnicodeData.
- *
- * with -p, generates tables for pairs of chars, as well as for ranges
- * and singletons.
- *
- * UnicodeData defines 4 fields of interest:
- * 1) a category
- * 2) an upper case mapping
- * 3) a lower case mapping
- * 4) a title case mapping
- *
- * toupper, tolower, and totitle are defined directly from the mapping.
- *
- * isalpharune(c) is true iff c is a "letter" category
- * isupperrune(c) is true iff c is the target of toupperrune,
- *     or is in the uppercase letter category
- * similarly for islowerrune and istitlerune.
- * isspacerune is true for space category chars, "C" locale white space chars,
- *     and two additions:
- *     0085    "next line" control char
- *     feff]   "zero-width non-break space"
- * isdigitrune is true iff c is a numeric-digit category.
- */
-
-#include <u.h>
-#include <libc.h>
-#include <stdio.h>
-#include "utf.h"
-#include "utfdef.h"
-
-enum {
-       /*
-        * fields in the unicode data file
-        */
-       FIELD_CODE,
-       FIELD_NAME,
-       FIELD_CATEGORY,
-       FIELD_COMBINING,
-       FIELD_BIDIR,
-       FIELD_DECOMP,
-       FIELD_DECIMAL_DIG,
-       FIELD_DIG,
-       FIELD_NUMERIC_VAL,
-       FIELD_MIRRORED,
-       FIELD_UNICODE_1_NAME,
-       FIELD_COMMENT,
-       FIELD_UPPER,
-       FIELD_LOWER,
-       FIELD_TITLE,
-       NFIELDS,
-
-       MAX_LINE        = 1024,
-
-       TO_OFFSET       = 1 << 20,
-
-       NRUNES          = 1 << 21,
-};
-
-#define TO_DELTA(xmapped,x)    (TO_OFFSET + (xmapped) - (x))
-
-static char    myisspace[NRUNES];
-static char    myisalpha[NRUNES];
-static char    myisdigit[NRUNES];
-static char    myisupper[NRUNES];
-static char    myislower[NRUNES];
-static char    myistitle[NRUNES];
-
-static int     mytoupper[NRUNES];
-static int     mytolower[NRUNES];
-static int     mytotitle[NRUNES];
-
-static void    check(void);
-static void    mktables(char *src, int usepairs);
-static void    fatal(const char *fmt, ...);
-static int     mygetfields(char **fields, int nfields, char *str, const char *delim);
-static int     getunicodeline(FILE *in, char **fields, char *buf);
-static int     getcode(char *s);
-
-static void
-usage(void)
-{
-       fprintf(stderr, "usage: mktables [-cp] <UnicodeData.txt>\n");
-       exit(1);
-}
-
-void
-main(int argc, char *argv[])
-{
-       FILE *in;
-       char buf[MAX_LINE], buf2[MAX_LINE];
-       char *fields[NFIELDS + 1], *fields2[NFIELDS + 1];
-       char *p;
-       int i, code, last, docheck, usepairs;
-
-       docheck = 0;
-       usepairs = 0;
-       ARGBEGIN{
-       case 'c':
-               docheck = 1;
-               break;
-       case 'p':
-               usepairs = 1;
-               break;
-       default:
-               usage();
-       }ARGEND
-
-       if(argc != 1){
-               usage();
-       }
-
-       in = fopen(argv[0], "r");
-       if(in == NULL){
-               fatal("can't open %s", argv[0]);
-       }
-
-       for(i = 0; i < NRUNES; i++){
-               mytoupper[i] = i;
-               mytolower[i] = i;
-               mytotitle[i] = i;
-       }
-
-       /*
-        * make sure isspace has all of the "C" locale whitespace chars
-        */
-       myisspace['\t'] = 1;
-       myisspace['\n'] = 1;
-       myisspace['\r'] = 1;
-       myisspace['\f'] = 1;
-       myisspace['\v'] = 1;
-
-       /*
-        * a couple of other exceptions
-        */
-       myisspace[0x85] = 1;    /* control char, "next line" */
-       myisspace[0xfeff] = 1;  /* zero-width non-break space */
-
-       last = -1;
-       while(getunicodeline(in, fields, buf)){
-               code = getcode(fields[FIELD_CODE]);
-               if (code >= NRUNES)
-                       fatal("code-point value too big: %x", code);
-               if(code <= last)
-                       fatal("bad code sequence: %x then %x", last, code);
-               last = code;
-
-               /*
-                * check for ranges
-                */
-               p = fields[FIELD_CATEGORY];
-               if(strstr(fields[FIELD_NAME], ", First>") != NULL){
-                       if(!getunicodeline(in, fields2, buf2))
-                               fatal("range start at eof");
-                       if (strstr(fields2[FIELD_NAME], ", Last>") == NULL)
-                               fatal("range start not followed by range end");
-                       last = getcode(fields2[FIELD_CODE]);
-                       if(last <= code)
-                               fatal("range out of sequence: %x then %x", code, last);
-                       if(strcmp(p, fields2[FIELD_CATEGORY]) != 0)
-                               fatal("range with mismatched category");
-               }
-
-               /*
-                * set properties and conversions
-                */
-               for (; code <= last; code++){
-                       if(p[0] == 'L')
-                               myisalpha[code] = 1;
-                       if(p[0] == 'Z')
-                               myisspace[code] = 1;
-
-                       if(strcmp(p, "Lu") == 0)
-                               myisupper[code] = 1;
-                       if(strcmp(p, "Ll") == 0)
-                               myislower[code] = 1;
-
-                       if(strcmp(p, "Lt") == 0)
-                               myistitle[code] = 1;
-
-                       if(strcmp(p, "Nd") == 0)
-                               myisdigit[code] = 1;
-
-                       /*
-                        * when finding conversions, also need to mark
-                        * upper/lower case, since some chars, like
-                        * "III" (0x2162), aren't defined as letters but have a
-                        * lower case mapping ("iii" (0x2172)).
-                        */
-                       if(fields[FIELD_UPPER][0] != '\0'){
-                               mytoupper[code] = getcode(fields[FIELD_UPPER]);
-                       }
-                       if(fields[FIELD_LOWER][0] != '\0'){
-                               mytolower[code] = getcode(fields[FIELD_LOWER]);
-                       }
-                       if(fields[FIELD_TITLE][0] != '\0'){
-                               mytotitle[code] = getcode(fields[FIELD_TITLE]);
-                       }
-               }
-       }
-
-       fclose(in);
-
-       /*
-        * check for codes with no totitle mapping but a toupper mapping.
-        * these appear in UnicodeData-2.0.14.txt, but are almost certainly
-        * erroneous.
-        */
-       for(i = 0; i < NRUNES; i++){
-               if(mytotitle[i] == i
-               && mytoupper[i] != i
-               && !myistitle[i])
-                       fprintf(stderr, "warning: code=%.4x not istitle, totitle is same, toupper=%.4x\n", i, mytoupper[i]);
-       }
-
-       /*
-        * make sure isupper[c] is true if for some x toupper[x]  == c
-        * ditto for islower and istitle
-        */
-       for(i = 0; i < NRUNES; i++) {
-               if(mytoupper[i] != i)
-                       myisupper[mytoupper[i]] = 1;
-               if(mytolower[i] != i)
-                       myislower[mytolower[i]] = 1;
-               if(mytotitle[i] != i)
-                       myistitle[mytotitle[i]] = 1;
-       }
-
-       if(docheck){
-               check();
-       }else{
-               mktables(argv[0], usepairs);
-       }
-       exit(0);
-}
-
-/*
- * generate a properties array for ranges, clearing those cases covered.
- * if force, generate one-entry ranges for singletons.
- */
-static int
-mkisrange(const char* label, char* prop, int force)
-{
-       int start, stop, some;
-
-       /*
-        * first, the ranges
-        */
-       some = 0;
-       for(start = 0; start < NRUNES; ) {
-               if(!prop[start]){
-                       start++;
-                       continue;
-               }
-
-               for(stop = start + 1; stop < NRUNES; stop++){
-                       if(!prop[stop]){
-                               break;
-                       }
-                       prop[stop] = 0;
-               }
-               if(force || stop != start + 1){
-                       if(!some){
-                               printf("static Rune __is%sr[] = {\n", label);
-                               some = 1;
-                       }
-                       prop[start] = 0;
-                       printf("\t0x%.4x, 0x%.4x,\n", start, stop - 1);
-               }
-
-               start = stop;
-       }
-       if(some)
-               printf("};\n\n");
-       return some;
-}
-
-/*
- * generate a mapping array for pairs with a skip between,
- * clearing those entries covered.
- */
-static int
-mkispair(const char *label, char *prop)
-{
-       int start, stop, some;
-
-       some = 0;
-       for(start = 0; start + 2 < NRUNES; ) {
-               if(!prop[start]){
-                       start++;
-                       continue;
-               }
-
-               for(stop = start + 2; stop < NRUNES; stop += 2){
-                       if(!prop[stop]){
-                               break;
-                       }
-                       prop[stop] = 0;
-               }
-               if(stop != start + 2){
-                       if(!some){
-                               printf("static Rune __is%sp[] = {\n", label);
-                               some = 1;
-                       }
-                       prop[start] = 0;
-                       printf("\t0x%.4x, 0x%.4x,\n", start, stop - 2);
-               }
-
-               start = stop;
-       }
-       if(some)
-               printf("};\n\n");
-       return some;
-}
-
-/*
- * generate a properties array for singletons, clearing those cases covered.
- */
-static int
-mkissingle(const char *label, char *prop)
-{
-       int start, some;
-
-       some = 0;
-       for(start = 0; start < NRUNES; start++) {
-               if(!prop[start]){
-                       continue;
-               }
-
-               if(!some){
-                       printf("static Rune __is%ss[] = {\n", label);
-                       some = 1;
-               }
-               prop[start] = 0;
-               printf("\t0x%.4x,\n", start);
-       }
-       if(some)
-               printf("};\n\n");
-       return some;
-}
-
-/*
- * generate tables and a function for is<label>rune
- */
-static void
-mkis(const char* label, char* prop, int usepairs)
-{
-       int isr, isp, iss;
-
-       isr = mkisrange(label, prop, 0);
-       isp = 0;
-       if(usepairs)
-               isp = mkispair(label, prop);
-       iss = mkissingle(label, prop);
-
-       printf(
-               "int\n"
-               "is%srune(Rune c)\n"
-               "{\n"
-               "       Rune *p;\n"
-               "\n",
-               label);
-
-       if(isr)
-               printf(
-                       "       p = rbsearch(c, __is%sr, nelem(__is%sr)/2, 2);\n"
-                       "       if(p && c >= p[0] && c <= p[1])\n"
-                       "               return 1;\n",
-                       label, label);
-
-       if(isp)
-               printf(
-                       "       p = rbsearch(c, __is%sp, nelem(__is%sp)/2, 2);\n"
-                       "       if(p && c >= p[0] && c <= p[1] && !((c - p[0]) & 1))\n"
-                       "               return 1;\n",
-                       label, label);
-
-       if(iss)
-               printf(
-                       "       p = rbsearch(c, __is%ss, nelem(__is%ss), 1);\n"
-                       "       if(p && c == p[0])\n"
-                       "               return 1;\n",
-                       label, label);
-
-
-       printf(
-               "       return 0;\n"
-               "}\n"
-               "\n"
-       );
-}
-
-/*
- * generate a mapping array for ranges, clearing those entries covered.
- * if force, generate one-entry ranges for singletons.
- */
-static int
-mktorange(const char* label, int* map, int force)
-{
-       int start, stop, delta, some;
-
-       some = 0;
-       for(start = 0; start < NRUNES; ) {
-               if(map[start] == start){
-                       start++;
-                       continue;
-               }
-
-               delta = TO_DELTA(map[start], start);
-               if(delta != (Rune)delta)
-                       fatal("bad map delta %d", delta);
-               for(stop = start + 1; stop < NRUNES; stop++){
-                       if(TO_DELTA(map[stop], stop) != delta){
-                               break;
-                       }
-                       map[stop] = stop;
-               }
-               if(stop != start + 1){
-                       if(!some){
-                               printf("static Rune __to%sr[] = {\n", label);
-                               some = 1;
-                       }
-                       map[start] = start;
-                       printf("\t0x%.4x, 0x%.4x, %d,\n", start, stop - 1, delta);
-               }
-
-               start = stop;
-       }
-       if(some)
-               printf("};\n\n");
-       return some;
-}
-
-/*
- * generate a mapping array for pairs with a skip between,
- * clearing those entries covered.
- */
-static int
-mktopair(const char* label, int* map)
-{
-       int start, stop, delta, some;
-
-       some = 0;
-       for(start = 0; start + 2 < NRUNES; ) {
-               if(map[start] == start){
-                       start++;
-                       continue;
-               }
-
-               delta = TO_DELTA(map[start], start);
-               if(delta != (Rune)delta)
-                       fatal("bad map delta %d", delta);
-               for(stop = start + 2; stop < NRUNES; stop += 2){
-                       if(TO_DELTA(map[stop], stop) != delta){
-                               break;
-                       }
-                       map[stop] = stop;
-               }
-               if(stop != start + 2){
-                       if(!some){
-                               printf("static Rune __to%sp[] = {\n", label);
-                               some = 1;
-                       }
-                       map[start] = start;
-                       printf("\t0x%.4x, 0x%.4x, %d,\n", start, stop - 2, delta);
-               }
-
-               start = stop;
-       }
-       if(some)
-               printf("};\n\n");
-       return some;
-}
-
-/*
- * generate a mapping array for singletons, clearing those entries covered.
- */
-static int
-mktosingle(const char* label, int* map)
-{
-       int start, delta, some;
-
-       some = 0;
-       for(start = 0; start < NRUNES; start++) {
-               if(map[start] == start){
-                       continue;
-               }
-
-               delta = TO_DELTA(map[start], start);
-               if(delta != (Rune)delta)
-                       fatal("bad map delta %d", delta);
-               if(!some){
-                       printf("static Rune __to%ss[] = {\n", label);
-                       some = 1;
-               }
-               map[start] = start;
-               printf("\t0x%.4x, %d,\n", start, delta);
-       }
-       if(some)
-               printf("};\n\n");
-       return some;
-}
-
-/*
- * generate tables and a function for to<label>rune
- */
-static void
-mkto(const char* label, int* map, int usepairs)
-{
-       int tor, top, tos;
-
-       tor = mktorange(label, map, 0);
-       top = 0;
-       if(usepairs)
-               top = mktopair(label, map);
-       tos = mktosingle(label, map);
-
-       printf(
-               "Rune\n"
-               "to%srune(Rune c)\n"
-               "{\n"
-               "       Rune *p;\n"
-               "\n",
-               label);
-
-       if(tor)
-               printf(
-                       "       p = rbsearch(c, __to%sr, nelem(__to%sr)/3, 3);\n"
-                       "       if(p && c >= p[0] && c <= p[1])\n"
-                       "               return c + p[2] - %d;\n",
-                       label, label, TO_OFFSET);
-
-       if(top)
-               printf(
-                       "       p = rbsearch(c, __to%sp, nelem(__to%sp)/3, 3);\n"
-                       "       if(p && c >= p[0] && c <= p[1] && !((c - p[0]) & 1))\n"
-                       "               return c + p[2] - %d;\n",
-                       label, label, TO_OFFSET);
-
-       if(tos)
-               printf(
-                       "       p = rbsearch(c, __to%ss, nelem(__to%ss)/2, 2);\n"
-                       "       if(p && c == p[0])\n"
-                       "               return c + p[1] - %d;\n",
-                       label, label, TO_OFFSET);
-
-
-       printf(
-               "       return c;\n"
-               "}\n"
-               "\n"
-       );
-}
-
-// Make only range tables and a function for is<label>rune.
-static void
-mkisronly(const char* label, char* prop)
-{
-       mkisrange(label, prop, 1);
-       printf(
-               "int\n"
-               "is%srune(Rune c)\n"
-               "{\n"
-               "       Rune *p;\n"
-               "\n"
-               "       p = rbsearch(c, __is%sr, nelem(__is%sr)/2, 2);\n"
-               "       if(p && c >= p[0] && c <= p[1])\n"
-               "               return 1;\n"
-               "       return 0;\n"
-               "}\n"
-               "\n",
-               label, label, label);
-}
-
-/*
- * generate the body of runetype.
- * assumes there is a function Rune* rbsearch(Rune c, Rune *t, int n, int ne);
- */
-static void
-mktables(char *src, int usepairs)
-{
-       printf("/* generated automatically by mkrunetype.c from %s */\n\n", src);
-
-       /*
-        * we special case the space and digit tables, since they are assumed
-        * to be small with several ranges.
-        */
-       mkisronly("space", myisspace);
-       mkisronly("digit", myisdigit);
-
-       mkis("alpha", myisalpha, 0);
-       mkis("upper", myisupper, usepairs);
-       mkis("lower", myislower, usepairs);
-       mkis("title", myistitle, usepairs);
-
-       mkto("upper", mytoupper, usepairs);
-       mkto("lower", mytolower, usepairs);
-       mkto("title", mytotitle, usepairs);
-}
-
-/*
- * find differences between the newly generated tables and current runetypes.
- */
-static void
-check(void)
-{
-       int i;
-
-       for(i = 0; i < NRUNES; i++){
-               if(isdigitrune(i) != myisdigit[i])
-                       fprintf(stderr, "isdigit diff at %x: runetype=%x, unicode=%x\n",
-                               i, isdigitrune(i), myisdigit[i]);
-
-               if(isspacerune(i) != myisspace[i])
-                       fprintf(stderr, "isspace diff at %x: runetype=%x, unicode=%x\n",
-                               i, isspacerune(i), myisspace[i]);
-
-               if(isupperrune(i) != myisupper[i])
-                       fprintf(stderr, "isupper diff at %x: runetype=%x, unicode=%x\n",
-                               i, isupperrune(i), myisupper[i]);
-
-               if(islowerrune(i) != myislower[i])
-                       fprintf(stderr, "islower diff at %x: runetype=%x, unicode=%x\n",
-                               i, islowerrune(i), myislower[i]);
-
-               if(isalpharune(i) != myisalpha[i])
-                       fprintf(stderr, "isalpha diff at %x: runetype=%x, unicode=%x\n",
-                               i, isalpharune(i), myisalpha[i]);
-
-               if(toupperrune(i) != mytoupper[i])
-                       fprintf(stderr, "toupper diff at %x: runetype=%x, unicode=%x\n",
-                               i, toupperrune(i), mytoupper[i]);
-
-               if(tolowerrune(i) != mytolower[i])
-                       fprintf(stderr, "tolower diff at %x: runetype=%x, unicode=%x\n",
-                               i, tolowerrune(i), mytolower[i]);
-
-               if(istitlerune(i) != myistitle[i])
-                       fprintf(stderr, "istitle diff at %x: runetype=%x, unicode=%x\n",
-                               i, istitlerune(i), myistitle[i]);
-
-               if(totitlerune(i) != mytotitle[i])
-                       fprintf(stderr, "totitle diff at %x: runetype=%x, unicode=%x\n",
-                               i, totitlerune(i), mytotitle[i]);
-
-
-       }
-}
-
-static int
-mygetfields(char **fields, int nfields, char *str, const char *delim)
-{
-       int nf;
-
-       fields[0] = str;
-       nf = 1;
-       if(nf >= nfields)
-               return nf;
-
-       for(; *str; str++){
-               if(strchr(delim, *str) != NULL){
-                       *str = '\0';
-                       fields[nf++] = str + 1;
-                       if(nf >= nfields)
-                               break;
-               }
-       }
-       return nf;
-}
-
-static int
-getunicodeline(FILE *in, char **fields, char *buf)
-{
-       char *p;
-
-       if(fgets(buf, MAX_LINE, in) == NULL)
-               return 0;
-
-       p = strchr(buf, '\n');
-       if (p == NULL)
-               fatal("line too long");
-       *p = '\0';
-
-       if (mygetfields(fields, NFIELDS + 1, buf, ";") != NFIELDS)
-               fatal("bad number of fields");
-
-       return 1;
-}
-
-static int
-getcode(char *s)
-{
-       int i, code;
-
-       code = 0;
-       i = 0;
-       /* Parse a hex number */
-       while(s[i]) {
-               code <<= 4;
-               if(s[i] >= '0' && s[i] <= '9')
-                       code += s[i] - '0';
-               else if(s[i] >= 'A' && s[i] <= 'F')
-                       code += s[i] - 'A' + 10;
-               else
-                       fatal("bad code char '%c'", s[i]);
-               i++;
-       }
-       return code;
-}
-
-static void
-fatal(const char *fmt, ...)
-{
-       va_list arg;
-
-       fprintf(stderr, "%s: fatal error: ", argv0);
-       va_start(arg, fmt);
-       vfprintf(stderr, fmt, arg);
-       va_end(arg);
-       fprintf(stderr, "\n");
-
-       exit(1);
-}
diff --git a/src/lib9/utf/rune.c b/src/lib9/utf/rune.c
deleted file mode 100644 (file)
index 99f03ea..0000000
+++ /dev/null
@@ -1,358 +0,0 @@
-/*
- * The authors of this software are Rob Pike and Ken Thompson.
- *              Copyright (c) 2002 by Lucent Technologies.
- *              Portions Copyright (c) 2009 The Go Authors.  All rights reserved.
- * Permission to use, copy, modify, and distribute this software for any
- * purpose without fee is hereby granted, provided that this entire notice
- * is included in all copies of any software which is or includes a copy
- * or modification of this software and in all copies of the supporting
- * documentation for such software.
- * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED
- * WARRANTY.  IN PARTICULAR, NEITHER THE AUTHORS NOR LUCENT TECHNOLOGIES MAKE ANY
- * REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY
- * OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE.
- */
-#include "utf.h"
-#include "utfdef.h"
-
-enum
-{
-       Bit1    = 7,
-       Bitx    = 6,
-       Bit2    = 5,
-       Bit3    = 4,
-       Bit4    = 3,
-       Bit5    = 2,
-
-       T1      = ((1<<(Bit1+1))-1) ^ 0xFF,     /* 0000 0000 */
-       Tx      = ((1<<(Bitx+1))-1) ^ 0xFF,     /* 1000 0000 */
-       T2      = ((1<<(Bit2+1))-1) ^ 0xFF,     /* 1100 0000 */
-       T3      = ((1<<(Bit3+1))-1) ^ 0xFF,     /* 1110 0000 */
-       T4      = ((1<<(Bit4+1))-1) ^ 0xFF,     /* 1111 0000 */
-       T5      = ((1<<(Bit5+1))-1) ^ 0xFF,     /* 1111 1000 */
-
-       Rune1   = (1<<(Bit1+0*Bitx))-1,         /* 0000 0000 0111 1111 */
-       Rune2   = (1<<(Bit2+1*Bitx))-1,         /* 0000 0111 1111 1111 */
-       Rune3   = (1<<(Bit3+2*Bitx))-1,         /* 1111 1111 1111 1111 */
-       Rune4   = (1<<(Bit4+3*Bitx))-1,         /* 0001 1111 1111 1111 1111 1111 */
-
-       Maskx   = (1<<Bitx)-1,                  /* 0011 1111 */
-       Testx   = Maskx ^ 0xFF,                 /* 1100 0000 */
-
-       SurrogateMin    = 0xD800,
-       SurrogateMax    = 0xDFFF,
-
-       Bad     = Runeerror,
-};
-
-/*
- * Modified by Wei-Hwa Huang, Google Inc., on 2004-09-24
- * This is a slower but "safe" version of the old chartorune
- * that works on strings that are not necessarily null-terminated.
- *
- * If you know for sure that your string is null-terminated,
- * chartorune will be a bit faster.
- *
- * It is guaranteed not to attempt to access "length"
- * past the incoming pointer.  This is to avoid
- * possible access violations.  If the string appears to be
- * well-formed but incomplete (i.e., to get the whole Rune
- * we'd need to read past str+length) then we'll set the Rune
- * to Bad and return 0.
- *
- * Note that if we have decoding problems for other
- * reasons, we return 1 instead of 0.
- */
-int
-charntorune(Rune *rune, const char *str, int length)
-{
-       int c, c1, c2, c3;
-       long l;
-
-       /* When we're not allowed to read anything */
-       if(length <= 0) {
-               goto badlen;
-       }
-
-       /*
-        * one character sequence (7-bit value)
-        *      00000-0007F => T1
-        */
-       c = *(uchar*)str;
-       if(c < Tx) {
-               *rune = (Rune)c;
-               return 1;
-       }
-
-       // If we can't read more than one character we must stop
-       if(length <= 1) {
-               goto badlen;
-       }
-
-       /*
-        * two character sequence (11-bit value)
-        *      0080-07FF => T2 Tx
-        */
-       c1 = *(uchar*)(str+1) ^ Tx;
-       if(c1 & Testx)
-               goto bad;
-       if(c < T3) {
-               if(c < T2)
-                       goto bad;
-               l = ((c << Bitx) | c1) & Rune2;
-               if(l <= Rune1)
-                       goto bad;
-               *rune = (Rune)l;
-               return 2;
-       }
-
-       // If we can't read more than two characters we must stop
-       if(length <= 2) {
-               goto badlen;
-       }
-
-       /*
-        * three character sequence (16-bit value)
-        *      0800-FFFF => T3 Tx Tx
-        */
-       c2 = *(uchar*)(str+2) ^ Tx;
-       if(c2 & Testx)
-               goto bad;
-       if(c < T4) {
-               l = ((((c << Bitx) | c1) << Bitx) | c2) & Rune3;
-               if(l <= Rune2)
-                       goto bad;
-               if (SurrogateMin <= l && l <= SurrogateMax)
-                       goto bad;
-               *rune = (Rune)l;
-               return 3;
-       }
-
-       if (length <= 3)
-               goto badlen;
-
-       /*
-        * four character sequence (21-bit value)
-        *      10000-1FFFFF => T4 Tx Tx Tx
-        */
-       c3 = *(uchar*)(str+3) ^ Tx;
-       if (c3 & Testx)
-               goto bad;
-       if (c < T5) {
-               l = ((((((c << Bitx) | c1) << Bitx) | c2) << Bitx) | c3) & Rune4;
-               if (l <= Rune3 || l > Runemax)
-                       goto bad;
-               *rune = (Rune)l;
-               return 4;
-       }
-
-       // Support for 5-byte or longer UTF-8 would go here, but
-       // since we don't have that, we'll just fall through to bad.
-
-       /*
-        * bad decoding
-        */
-bad:
-       *rune = Bad;
-       return 1;
-badlen:
-       *rune = Bad;
-       return 0;
-
-}
-
-
-/*
- * This is the older "unsafe" version, which works fine on
- * null-terminated strings.
- */
-int
-chartorune(Rune *rune, const char *str)
-{
-       int c, c1, c2, c3;
-       long l;
-
-       /*
-        * one character sequence
-        *      00000-0007F => T1
-        */
-       c = *(uchar*)str;
-       if(c < Tx) {
-               *rune = (Rune)c;
-               return 1;
-       }
-
-       /*
-        * two character sequence
-        *      0080-07FF => T2 Tx
-        */
-       c1 = *(uchar*)(str+1) ^ Tx;
-       if(c1 & Testx)
-               goto bad;
-       if(c < T3) {
-               if(c < T2)
-                       goto bad;
-               l = ((c << Bitx) | c1) & Rune2;
-               if(l <= Rune1)
-                       goto bad;
-               *rune = (Rune)l;
-               return 2;
-       }
-
-       /*
-        * three character sequence
-        *      0800-FFFF => T3 Tx Tx
-        */
-       c2 = *(uchar*)(str+2) ^ Tx;
-       if(c2 & Testx)
-               goto bad;
-       if(c < T4) {
-               l = ((((c << Bitx) | c1) << Bitx) | c2) & Rune3;
-               if(l <= Rune2)
-                       goto bad;
-               if (SurrogateMin <= l && l <= SurrogateMax)
-                       goto bad;
-               *rune = (Rune)l;
-               return 3;
-       }
-
-       /*
-        * four character sequence (21-bit value)
-        *      10000-1FFFFF => T4 Tx Tx Tx
-        */
-       c3 = *(uchar*)(str+3) ^ Tx;
-       if (c3 & Testx)
-               goto bad;
-       if (c < T5) {
-               l = ((((((c << Bitx) | c1) << Bitx) | c2) << Bitx) | c3) & Rune4;
-               if (l <= Rune3 || l > Runemax)
-                       goto bad;
-               *rune = (Rune)l;
-               return 4;
-       }
-
-       /*
-        * Support for 5-byte or longer UTF-8 would go here, but
-        * since we don't have that, we'll just fall through to bad.
-        */
-
-       /*
-        * bad decoding
-        */
-bad:
-       *rune = Bad;
-       return 1;
-}
-
-int
-isvalidcharntorune(const char* str, int length, Rune* rune, int* consumed)
-{
-       *consumed = charntorune(rune, str, length);
-       return *rune != Runeerror || *consumed == 3;
-}
-
-int
-runetochar(char *str, const Rune *rune)
-{
-       /* Runes are signed, so convert to unsigned for range check. */
-       unsigned long c;
-
-       /*
-        * one character sequence
-        *      00000-0007F => 00-7F
-        */
-       c = *rune;
-       if(c <= Rune1) {
-               str[0] = (char)c;
-               return 1;
-       }
-
-       /*
-        * two character sequence
-        *      0080-07FF => T2 Tx
-        */
-       if(c <= Rune2) {
-               str[0] = (char)(T2 | (c >> 1*Bitx));
-               str[1] = (char)(Tx | (c & Maskx));
-               return 2;
-       }
-
-       /*
-        * If the Rune is out of range or a surrogate half, convert it to the error rune.
-        * Do this test here because the error rune encodes to three bytes.
-        * Doing it earlier would duplicate work, since an out of range
-        * Rune wouldn't have fit in one or two bytes.
-        */
-       if (c > Runemax)
-               c = Runeerror;
-       if (SurrogateMin <= c && c <= SurrogateMax)
-               c = Runeerror;
-
-       /*
-        * three character sequence
-        *      0800-FFFF => T3 Tx Tx
-        */
-       if (c <= Rune3) {
-               str[0] = (char)(T3 |  (c >> 2*Bitx));
-               str[1] = (char)(Tx | ((c >> 1*Bitx) & Maskx));
-               str[2] = (char)(Tx |  (c & Maskx));
-               return 3;
-       }
-
-       /*
-        * four character sequence (21-bit value)
-        *     10000-1FFFFF => T4 Tx Tx Tx
-        */
-       str[0] = (char)(T4 | (c >> 3*Bitx));
-       str[1] = (char)(Tx | ((c >> 2*Bitx) & Maskx));
-       str[2] = (char)(Tx | ((c >> 1*Bitx) & Maskx));
-       str[3] = (char)(Tx | (c & Maskx));
-       return 4;
-}
-
-int
-runelen(Rune rune)
-{
-       char str[10];
-
-       return runetochar(str, &rune);
-}
-
-int
-runenlen(const Rune *r, int nrune)
-{
-       int nb, c;
-
-       nb = 0;
-       while(nrune--) {
-               c = (int)*r++;
-               if (c <= Rune1)
-                       nb++;
-               else if (c <= Rune2)
-                       nb += 2;
-               else if (c <= Rune3)
-                       nb += 3;
-               else /* assert(c <= Rune4) */
-                       nb += 4;
-       }
-       return nb;
-}
-
-int
-fullrune(const char *str, int n)
-{
-       if (n > 0) {
-               int c = *(uchar*)str;
-               if (c < Tx)
-                       return 1;
-               if (n > 1) {
-                       if (c < T3)
-                               return 1;
-                       if (n > 2) {
-                               if (c < T4 || n > 3)
-                                       return 1;
-                       }
-               }
-       }
-       return 0;
-}
diff --git a/src/lib9/utf/runetype.c b/src/lib9/utf/runetype.c
deleted file mode 100644 (file)
index ed775af..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * The authors of this software are Rob Pike and Ken Thompson.
- *              Copyright (c) 2002 by Lucent Technologies.
- * Permission to use, copy, modify, and distribute this software for any
- * purpose without fee is hereby granted, provided that this entire notice
- * is included in all copies of any software which is or includes a copy
- * or modification of this software and in all copies of the supporting
- * documentation for such software.
- * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED
- * WARRANTY.  IN PARTICULAR, NEITHER THE AUTHORS NOR LUCENT TECHNOLOGIES MAKE ANY
- * REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY
- * OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE.
- */
-#include "utf.h"
-#include "utfdef.h"
-
-static
-Rune*
-rbsearch(Rune c, Rune *t, int n, int ne)
-{
-       Rune *p;
-       int m;
-
-       while(n > 1) {
-               m = n >> 1;
-               p = t + m*ne;
-               if(c >= p[0]) {
-                       t = p;
-                       n = n-m;
-               } else
-                       n = m;
-       }
-       if(n && c >= t[0])
-               return t;
-       return 0;
-}
-
-#include "runetypebody-6.3.0.h"
diff --git a/src/lib9/utf/runetypebody-6.3.0.h b/src/lib9/utf/runetypebody-6.3.0.h
deleted file mode 100644 (file)
index 5554dca..0000000
+++ /dev/null
@@ -1,1638 +0,0 @@
-/* generated automatically by mkrunetype.c from UnicodeData-6.3.0.txt */
-
-static Rune __isspacer[] = {
-       0x0009, 0x000d,
-       0x0020, 0x0020,
-       0x0085, 0x0085,
-       0x00a0, 0x00a0,
-       0x1680, 0x1680,
-       0x2000, 0x200a,
-       0x2028, 0x2029,
-       0x202f, 0x202f,
-       0x205f, 0x205f,
-       0x3000, 0x3000,
-       0xfeff, 0xfeff,
-};
-
-int
-isspacerune(Rune c)
-{
-       Rune *p;
-
-       p = rbsearch(c, __isspacer, nelem(__isspacer)/2, 2);
-       if(p && c >= p[0] && c <= p[1])
-               return 1;
-       return 0;
-}
-
-static Rune __isdigitr[] = {
-       0x0030, 0x0039,
-       0x0660, 0x0669,
-       0x06f0, 0x06f9,
-       0x07c0, 0x07c9,
-       0x0966, 0x096f,
-       0x09e6, 0x09ef,
-       0x0a66, 0x0a6f,
-       0x0ae6, 0x0aef,
-       0x0b66, 0x0b6f,
-       0x0be6, 0x0bef,
-       0x0c66, 0x0c6f,
-       0x0ce6, 0x0cef,
-       0x0d66, 0x0d6f,
-       0x0e50, 0x0e59,
-       0x0ed0, 0x0ed9,
-       0x0f20, 0x0f29,
-       0x1040, 0x1049,
-       0x1090, 0x1099,
-       0x17e0, 0x17e9,
-       0x1810, 0x1819,
-       0x1946, 0x194f,
-       0x19d0, 0x19d9,
-       0x1a80, 0x1a89,
-       0x1a90, 0x1a99,
-       0x1b50, 0x1b59,
-       0x1bb0, 0x1bb9,
-       0x1c40, 0x1c49,
-       0x1c50, 0x1c59,
-       0xa620, 0xa629,
-       0xa8d0, 0xa8d9,
-       0xa900, 0xa909,
-       0xa9d0, 0xa9d9,
-       0xaa50, 0xaa59,
-       0xabf0, 0xabf9,
-       0xff10, 0xff19,
-       0x104a0, 0x104a9,
-       0x11066, 0x1106f,
-       0x110f0, 0x110f9,
-       0x11136, 0x1113f,
-       0x111d0, 0x111d9,
-       0x116c0, 0x116c9,
-       0x1d7ce, 0x1d7ff,
-};
-
-int
-isdigitrune(Rune c)
-{
-       Rune *p;
-
-       p = rbsearch(c, __isdigitr, nelem(__isdigitr)/2, 2);
-       if(p && c >= p[0] && c <= p[1])
-               return 1;
-       return 0;
-}
-
-static Rune __isalphar[] = {
-       0x0041, 0x005a,
-       0x0061, 0x007a,
-       0x00c0, 0x00d6,
-       0x00d8, 0x00f6,
-       0x00f8, 0x02c1,
-       0x02c6, 0x02d1,
-       0x02e0, 0x02e4,
-       0x0370, 0x0374,
-       0x0376, 0x0377,
-       0x037a, 0x037d,
-       0x0388, 0x038a,
-       0x038e, 0x03a1,
-       0x03a3, 0x03f5,
-       0x03f7, 0x0481,
-       0x048a, 0x0527,
-       0x0531, 0x0556,
-       0x0561, 0x0587,
-       0x05d0, 0x05ea,
-       0x05f0, 0x05f2,
-       0x0620, 0x064a,
-       0x066e, 0x066f,
-       0x0671, 0x06d3,
-       0x06e5, 0x06e6,
-       0x06ee, 0x06ef,
-       0x06fa, 0x06fc,
-       0x0712, 0x072f,
-       0x074d, 0x07a5,
-       0x07ca, 0x07ea,
-       0x07f4, 0x07f5,
-       0x0800, 0x0815,
-       0x0840, 0x0858,
-       0x08a2, 0x08ac,
-       0x0904, 0x0939,
-       0x0958, 0x0961,
-       0x0971, 0x0977,
-       0x0979, 0x097f,
-       0x0985, 0x098c,
-       0x098f, 0x0990,
-       0x0993, 0x09a8,
-       0x09aa, 0x09b0,
-       0x09b6, 0x09b9,
-       0x09dc, 0x09dd,
-       0x09df, 0x09e1,
-       0x09f0, 0x09f1,
-       0x0a05, 0x0a0a,
-       0x0a0f, 0x0a10,
-       0x0a13, 0x0a28,
-       0x0a2a, 0x0a30,
-       0x0a32, 0x0a33,
-       0x0a35, 0x0a36,
-       0x0a38, 0x0a39,
-       0x0a59, 0x0a5c,
-       0x0a72, 0x0a74,
-       0x0a85, 0x0a8d,
-       0x0a8f, 0x0a91,
-       0x0a93, 0x0aa8,
-       0x0aaa, 0x0ab0,
-       0x0ab2, 0x0ab3,
-       0x0ab5, 0x0ab9,
-       0x0ae0, 0x0ae1,
-       0x0b05, 0x0b0c,
-       0x0b0f, 0x0b10,
-       0x0b13, 0x0b28,
-       0x0b2a, 0x0b30,
-       0x0b32, 0x0b33,
-       0x0b35, 0x0b39,
-       0x0b5c, 0x0b5d,
-       0x0b5f, 0x0b61,
-       0x0b85, 0x0b8a,
-       0x0b8e, 0x0b90,
-       0x0b92, 0x0b95,
-       0x0b99, 0x0b9a,
-       0x0b9e, 0x0b9f,
-       0x0ba3, 0x0ba4,
-       0x0ba8, 0x0baa,
-       0x0bae, 0x0bb9,
-       0x0c05, 0x0c0c,
-       0x0c0e, 0x0c10,
-       0x0c12, 0x0c28,
-       0x0c2a, 0x0c33,
-       0x0c35, 0x0c39,
-       0x0c58, 0x0c59,
-       0x0c60, 0x0c61,
-       0x0c85, 0x0c8c,
-       0x0c8e, 0x0c90,
-       0x0c92, 0x0ca8,
-       0x0caa, 0x0cb3,
-       0x0cb5, 0x0cb9,
-       0x0ce0, 0x0ce1,
-       0x0cf1, 0x0cf2,
-       0x0d05, 0x0d0c,
-       0x0d0e, 0x0d10,
-       0x0d12, 0x0d3a,
-       0x0d60, 0x0d61,
-       0x0d7a, 0x0d7f,
-       0x0d85, 0x0d96,
-       0x0d9a, 0x0db1,
-       0x0db3, 0x0dbb,
-       0x0dc0, 0x0dc6,
-       0x0e01, 0x0e30,
-       0x0e32, 0x0e33,
-       0x0e40, 0x0e46,
-       0x0e81, 0x0e82,
-       0x0e87, 0x0e88,
-       0x0e94, 0x0e97,
-       0x0e99, 0x0e9f,
-       0x0ea1, 0x0ea3,
-       0x0eaa, 0x0eab,
-       0x0ead, 0x0eb0,
-       0x0eb2, 0x0eb3,
-       0x0ec0, 0x0ec4,
-       0x0edc, 0x0edf,
-       0x0f40, 0x0f47,
-       0x0f49, 0x0f6c,
-       0x0f88, 0x0f8c,
-       0x1000, 0x102a,
-       0x1050, 0x1055,
-       0x105a, 0x105d,
-       0x1065, 0x1066,
-       0x106e, 0x1070,
-       0x1075, 0x1081,
-       0x10a0, 0x10c5,
-       0x10d0, 0x10fa,
-       0x10fc, 0x1248,
-       0x124a, 0x124d,
-       0x1250, 0x1256,
-       0x125a, 0x125d,
-       0x1260, 0x1288,
-       0x128a, 0x128d,
-       0x1290, 0x12b0,
-       0x12b2, 0x12b5,
-       0x12b8, 0x12be,
-       0x12c2, 0x12c5,
-       0x12c8, 0x12d6,
-       0x12d8, 0x1310,
-       0x1312, 0x1315,
-       0x1318, 0x135a,
-       0x1380, 0x138f,
-       0x13a0, 0x13f4,
-       0x1401, 0x166c,
-       0x166f, 0x167f,
-       0x1681, 0x169a,
-       0x16a0, 0x16ea,
-       0x1700, 0x170c,
-       0x170e, 0x1711,
-       0x1720, 0x1731,
-       0x1740, 0x1751,
-       0x1760, 0x176c,
-       0x176e, 0x1770,
-       0x1780, 0x17b3,
-       0x1820, 0x1877,
-       0x1880, 0x18a8,
-       0x18b0, 0x18f5,
-       0x1900, 0x191c,
-       0x1950, 0x196d,
-       0x1970, 0x1974,
-       0x1980, 0x19ab,
-       0x19c1, 0x19c7,
-       0x1a00, 0x1a16,
-       0x1a20, 0x1a54,
-       0x1b05, 0x1b33,
-       0x1b45, 0x1b4b,
-       0x1b83, 0x1ba0,
-       0x1bae, 0x1baf,
-       0x1bba, 0x1be5,
-       0x1c00, 0x1c23,
-       0x1c4d, 0x1c4f,
-       0x1c5a, 0x1c7d,
-       0x1ce9, 0x1cec,
-       0x1cee, 0x1cf1,
-       0x1cf5, 0x1cf6,
-       0x1d00, 0x1dbf,
-       0x1e00, 0x1f15,
-       0x1f18, 0x1f1d,
-       0x1f20, 0x1f45,
-       0x1f48, 0x1f4d,
-       0x1f50, 0x1f57,
-       0x1f5f, 0x1f7d,
-       0x1f80, 0x1fb4,
-       0x1fb6, 0x1fbc,
-       0x1fc2, 0x1fc4,
-       0x1fc6, 0x1fcc,
-       0x1fd0, 0x1fd3,
-       0x1fd6, 0x1fdb,
-       0x1fe0, 0x1fec,
-       0x1ff2, 0x1ff4,
-       0x1ff6, 0x1ffc,
-       0x2090, 0x209c,
-       0x210a, 0x2113,
-       0x2119, 0x211d,
-       0x212a, 0x212d,
-       0x212f, 0x2139,
-       0x213c, 0x213f,
-       0x2145, 0x2149,
-       0x2183, 0x2184,
-       0x2c00, 0x2c2e,
-       0x2c30, 0x2c5e,
-       0x2c60, 0x2ce4,
-       0x2ceb, 0x2cee,
-       0x2cf2, 0x2cf3,
-       0x2d00, 0x2d25,
-       0x2d30, 0x2d67,
-       0x2d80, 0x2d96,
-       0x2da0, 0x2da6,
-       0x2da8, 0x2dae,
-       0x2db0, 0x2db6,
-       0x2db8, 0x2dbe,
-       0x2dc0, 0x2dc6,
-       0x2dc8, 0x2dce,
-       0x2dd0, 0x2dd6,
-       0x2dd8, 0x2dde,
-       0x3005, 0x3006,
-       0x3031, 0x3035,
-       0x303b, 0x303c,
-       0x3041, 0x3096,
-       0x309d, 0x309f,
-       0x30a1, 0x30fa,
-       0x30fc, 0x30ff,
-       0x3105, 0x312d,
-       0x3131, 0x318e,
-       0x31a0, 0x31ba,
-       0x31f0, 0x31ff,
-       0x3400, 0x4db5,
-       0x4e00, 0x9fcc,
-       0xa000, 0xa48c,
-       0xa4d0, 0xa4fd,
-       0xa500, 0xa60c,
-       0xa610, 0xa61f,
-       0xa62a, 0xa62b,
-       0xa640, 0xa66e,
-       0xa67f, 0xa697,
-       0xa6a0, 0xa6e5,
-       0xa717, 0xa71f,
-       0xa722, 0xa788,
-       0xa78b, 0xa78e,
-       0xa790, 0xa793,
-       0xa7a0, 0xa7aa,
-       0xa7f8, 0xa801,
-       0xa803, 0xa805,
-       0xa807, 0xa80a,
-       0xa80c, 0xa822,
-       0xa840, 0xa873,
-       0xa882, 0xa8b3,
-       0xa8f2, 0xa8f7,
-       0xa90a, 0xa925,
-       0xa930, 0xa946,
-       0xa960, 0xa97c,
-       0xa984, 0xa9b2,
-       0xaa00, 0xaa28,
-       0xaa40, 0xaa42,
-       0xaa44, 0xaa4b,
-       0xaa60, 0xaa76,
-       0xaa80, 0xaaaf,
-       0xaab5, 0xaab6,
-       0xaab9, 0xaabd,
-       0xaadb, 0xaadd,
-       0xaae0, 0xaaea,
-       0xaaf2, 0xaaf4,
-       0xab01, 0xab06,
-       0xab09, 0xab0e,
-       0xab11, 0xab16,
-       0xab20, 0xab26,
-       0xab28, 0xab2e,
-       0xabc0, 0xabe2,
-       0xac00, 0xd7a3,
-       0xd7b0, 0xd7c6,
-       0xd7cb, 0xd7fb,
-       0xf900, 0xfa6d,
-       0xfa70, 0xfad9,
-       0xfb00, 0xfb06,
-       0xfb13, 0xfb17,
-       0xfb1f, 0xfb28,
-       0xfb2a, 0xfb36,
-       0xfb38, 0xfb3c,
-       0xfb40, 0xfb41,
-       0xfb43, 0xfb44,
-       0xfb46, 0xfbb1,
-       0xfbd3, 0xfd3d,
-       0xfd50, 0xfd8f,
-       0xfd92, 0xfdc7,
-       0xfdf0, 0xfdfb,
-       0xfe70, 0xfe74,
-       0xfe76, 0xfefc,
-       0xff21, 0xff3a,
-       0xff41, 0xff5a,
-       0xff66, 0xffbe,
-       0xffc2, 0xffc7,
-       0xffca, 0xffcf,
-       0xffd2, 0xffd7,
-       0xffda, 0xffdc,
-       0x10000, 0x1000b,
-       0x1000d, 0x10026,
-       0x10028, 0x1003a,
-       0x1003c, 0x1003d,
-       0x1003f, 0x1004d,
-       0x10050, 0x1005d,
-       0x10080, 0x100fa,
-       0x10280, 0x1029c,
-       0x102a0, 0x102d0,
-       0x10300, 0x1031e,
-       0x10330, 0x10340,
-       0x10342, 0x10349,
-       0x10380, 0x1039d,
-       0x103a0, 0x103c3,
-       0x103c8, 0x103cf,
-       0x10400, 0x1049d,
-       0x10800, 0x10805,
-       0x1080a, 0x10835,
-       0x10837, 0x10838,
-       0x1083f, 0x10855,
-       0x10900, 0x10915,
-       0x10920, 0x10939,
-       0x10980, 0x109b7,
-       0x109be, 0x109bf,
-       0x10a10, 0x10a13,
-       0x10a15, 0x10a17,
-       0x10a19, 0x10a33,
-       0x10a60, 0x10a7c,
-       0x10b00, 0x10b35,
-       0x10b40, 0x10b55,
-       0x10b60, 0x10b72,
-       0x10c00, 0x10c48,
-       0x11003, 0x11037,
-       0x11083, 0x110af,
-       0x110d0, 0x110e8,
-       0x11103, 0x11126,
-       0x11183, 0x111b2,
-       0x111c1, 0x111c4,
-       0x11680, 0x116aa,
-       0x12000, 0x1236e,
-       0x13000, 0x1342e,
-       0x16800, 0x16a38,
-       0x16f00, 0x16f44,
-       0x16f93, 0x16f9f,
-       0x1b000, 0x1b001,
-       0x1d400, 0x1d454,
-       0x1d456, 0x1d49c,
-       0x1d49e, 0x1d49f,
-       0x1d4a5, 0x1d4a6,
-       0x1d4a9, 0x1d4ac,
-       0x1d4ae, 0x1d4b9,
-       0x1d4bd, 0x1d4c3,
-       0x1d4c5, 0x1d505,
-       0x1d507, 0x1d50a,
-       0x1d50d, 0x1d514,
-       0x1d516, 0x1d51c,
-       0x1d51e, 0x1d539,
-       0x1d53b, 0x1d53e,
-       0x1d540, 0x1d544,
-       0x1d54a, 0x1d550,
-       0x1d552, 0x1d6a5,
-       0x1d6a8, 0x1d6c0,
-       0x1d6c2, 0x1d6da,
-       0x1d6dc, 0x1d6fa,
-       0x1d6fc, 0x1d714,
-       0x1d716, 0x1d734,
-       0x1d736, 0x1d74e,
-       0x1d750, 0x1d76e,
-       0x1d770, 0x1d788,
-       0x1d78a, 0x1d7a8,
-       0x1d7aa, 0x1d7c2,
-       0x1d7c4, 0x1d7cb,
-       0x1ee00, 0x1ee03,
-       0x1ee05, 0x1ee1f,
-       0x1ee21, 0x1ee22,
-       0x1ee29, 0x1ee32,
-       0x1ee34, 0x1ee37,
-       0x1ee4d, 0x1ee4f,
-       0x1ee51, 0x1ee52,
-       0x1ee61, 0x1ee62,
-       0x1ee67, 0x1ee6a,
-       0x1ee6c, 0x1ee72,
-       0x1ee74, 0x1ee77,
-       0x1ee79, 0x1ee7c,
-       0x1ee80, 0x1ee89,
-       0x1ee8b, 0x1ee9b,
-       0x1eea1, 0x1eea3,
-       0x1eea5, 0x1eea9,
-       0x1eeab, 0x1eebb,
-       0x20000, 0x2a6d6,
-       0x2a700, 0x2b734,
-       0x2b740, 0x2b81d,
-       0x2f800, 0x2fa1d,
-};
-
-static Rune __isalphas[] = {
-       0x00aa,
-       0x00b5,
-       0x00ba,
-       0x02ec,
-       0x02ee,
-       0x0386,
-       0x038c,
-       0x0559,
-       0x06d5,
-       0x06ff,
-       0x0710,
-       0x07b1,
-       0x07fa,
-       0x081a,
-       0x0824,
-       0x0828,
-       0x08a0,
-       0x093d,
-       0x0950,
-       0x09b2,
-       0x09bd,
-       0x09ce,
-       0x0a5e,
-       0x0abd,
-       0x0ad0,
-       0x0b3d,
-       0x0b71,
-       0x0b83,
-       0x0b9c,
-       0x0bd0,
-       0x0c3d,
-       0x0cbd,
-       0x0cde,
-       0x0d3d,
-       0x0d4e,
-       0x0dbd,
-       0x0e84,
-       0x0e8a,
-       0x0e8d,
-       0x0ea5,
-       0x0ea7,
-       0x0ebd,
-       0x0ec6,
-       0x0f00,
-       0x103f,
-       0x1061,
-       0x108e,
-       0x10c7,
-       0x10cd,
-       0x1258,
-       0x12c0,
-       0x17d7,
-       0x17dc,
-       0x18aa,
-       0x1aa7,
-       0x1f59,
-       0x1f5b,
-       0x1f5d,
-       0x1fbe,
-       0x2071,
-       0x207f,
-       0x2102,
-       0x2107,
-       0x2115,
-       0x2124,
-       0x2126,
-       0x2128,
-       0x214e,
-       0x2d27,
-       0x2d2d,
-       0x2d6f,
-       0x2e2f,
-       0xa8fb,
-       0xa9cf,
-       0xaa7a,
-       0xaab1,
-       0xaac0,
-       0xaac2,
-       0xfb1d,
-       0xfb3e,
-       0x10808,
-       0x1083c,
-       0x10a00,
-       0x16f50,
-       0x1d4a2,
-       0x1d4bb,
-       0x1d546,
-       0x1ee24,
-       0x1ee27,
-       0x1ee39,
-       0x1ee3b,
-       0x1ee42,
-       0x1ee47,
-       0x1ee49,
-       0x1ee4b,
-       0x1ee54,
-       0x1ee57,
-       0x1ee59,
-       0x1ee5b,
-       0x1ee5d,
-       0x1ee5f,
-       0x1ee64,
-       0x1ee7e,
-};
-
-int
-isalpharune(Rune c)
-{
-       Rune *p;
-
-       p = rbsearch(c, __isalphar, nelem(__isalphar)/2, 2);
-       if(p && c >= p[0] && c <= p[1])
-               return 1;
-       p = rbsearch(c, __isalphas, nelem(__isalphas), 1);
-       if(p && c == p[0])
-               return 1;
-       return 0;
-}
-
-static Rune __isupperr[] = {
-       0x0041, 0x005a,
-       0x00c0, 0x00d6,
-       0x00d8, 0x00de,
-       0x0178, 0x0179,
-       0x0181, 0x0182,
-       0x0186, 0x0187,
-       0x0189, 0x018b,
-       0x018e, 0x0191,
-       0x0193, 0x0194,
-       0x0196, 0x0198,
-       0x019c, 0x019d,
-       0x019f, 0x01a0,
-       0x01a6, 0x01a7,
-       0x01ae, 0x01af,
-       0x01b1, 0x01b3,
-       0x01b7, 0x01b8,
-       0x01f6, 0x01f8,
-       0x023a, 0x023b,
-       0x023d, 0x023e,
-       0x0243, 0x0246,
-       0x0388, 0x038a,
-       0x038e, 0x038f,
-       0x0391, 0x03a1,
-       0x03a3, 0x03ab,
-       0x03d2, 0x03d4,
-       0x03f9, 0x03fa,
-       0x03fd, 0x042f,
-       0x04c0, 0x04c1,
-       0x0531, 0x0556,
-       0x10a0, 0x10c5,
-       0x1f08, 0x1f0f,
-       0x1f18, 0x1f1d,
-       0x1f28, 0x1f2f,
-       0x1f38, 0x1f3f,
-       0x1f48, 0x1f4d,
-       0x1f68, 0x1f6f,
-       0x1f88, 0x1f8f,
-       0x1f98, 0x1f9f,
-       0x1fa8, 0x1faf,
-       0x1fb8, 0x1fbc,
-       0x1fc8, 0x1fcc,
-       0x1fd8, 0x1fdb,
-       0x1fe8, 0x1fec,
-       0x1ff8, 0x1ffc,
-       0x210b, 0x210d,
-       0x2110, 0x2112,
-       0x2119, 0x211d,
-       0x212a, 0x212d,
-       0x2130, 0x2133,
-       0x213e, 0x213f,
-       0x2160, 0x216f,
-       0x24b6, 0x24cf,
-       0x2c00, 0x2c2e,
-       0x2c62, 0x2c64,
-       0x2c6d, 0x2c70,
-       0x2c7e, 0x2c80,
-       0xa77d, 0xa77e,
-       0xff21, 0xff3a,
-       0x10400, 0x10427,
-       0x1d400, 0x1d419,
-       0x1d434, 0x1d44d,
-       0x1d468, 0x1d481,
-       0x1d49e, 0x1d49f,
-       0x1d4a5, 0x1d4a6,
-       0x1d4a9, 0x1d4ac,
-       0x1d4ae, 0x1d4b5,
-       0x1d4d0, 0x1d4e9,
-       0x1d504, 0x1d505,
-       0x1d507, 0x1d50a,
-       0x1d50d, 0x1d514,
-       0x1d516, 0x1d51c,
-       0x1d538, 0x1d539,
-       0x1d53b, 0x1d53e,
-       0x1d540, 0x1d544,
-       0x1d54a, 0x1d550,
-       0x1d56c, 0x1d585,
-       0x1d5a0, 0x1d5b9,
-       0x1d5d4, 0x1d5ed,
-       0x1d608, 0x1d621,
-       0x1d63c, 0x1d655,
-       0x1d670, 0x1d689,
-       0x1d6a8, 0x1d6c0,
-       0x1d6e2, 0x1d6fa,
-       0x1d71c, 0x1d734,
-       0x1d756, 0x1d76e,
-       0x1d790, 0x1d7a8,
-};
-
-static Rune __isupperp[] = {
-       0x0100, 0x0136,
-       0x0139, 0x0147,
-       0x014a, 0x0176,
-       0x017b, 0x017d,
-       0x01a2, 0x01a4,
-       0x01cd, 0x01db,
-       0x01de, 0x01ee,
-       0x01fa, 0x0232,
-       0x0248, 0x024e,
-       0x0370, 0x0372,
-       0x03d8, 0x03ee,
-       0x0460, 0x0480,
-       0x048a, 0x04be,
-       0x04c3, 0x04cd,
-       0x04d0, 0x0526,
-       0x1e00, 0x1e94,
-       0x1e9e, 0x1efe,
-       0x1f59, 0x1f5f,
-       0x2124, 0x2128,
-       0x2c67, 0x2c6b,
-       0x2c82, 0x2ce2,
-       0x2ceb, 0x2ced,
-       0xa640, 0xa66c,
-       0xa680, 0xa696,
-       0xa722, 0xa72e,
-       0xa732, 0xa76e,
-       0xa779, 0xa77b,
-       0xa780, 0xa786,
-       0xa78b, 0xa78d,
-       0xa790, 0xa792,
-       0xa7a0, 0xa7aa,
-};
-
-static Rune __isuppers[] = {
-       0x0184,
-       0x01a9,
-       0x01ac,
-       0x01b5,
-       0x01bc,
-       0x01c4,
-       0x01c7,
-       0x01ca,
-       0x01f1,
-       0x01f4,
-       0x0241,
-       0x0376,
-       0x0386,
-       0x038c,
-       0x03cf,
-       0x03f4,
-       0x03f7,
-       0x10c7,
-       0x10cd,
-       0x2102,
-       0x2107,
-       0x2115,
-       0x2145,
-       0x2183,
-       0x2c60,
-       0x2c72,
-       0x2c75,
-       0x2cf2,
-       0x1d49c,
-       0x1d4a2,
-       0x1d546,
-       0x1d7ca,
-};
-
-int
-isupperrune(Rune c)
-{
-       Rune *p;
-
-       p = rbsearch(c, __isupperr, nelem(__isupperr)/2, 2);
-       if(p && c >= p[0] && c <= p[1])
-               return 1;
-       p = rbsearch(c, __isupperp, nelem(__isupperp)/2, 2);
-       if(p && c >= p[0] && c <= p[1] && !((c - p[0]) & 1))
-               return 1;
-       p = rbsearch(c, __isuppers, nelem(__isuppers), 1);
-       if(p && c == p[0])
-               return 1;
-       return 0;
-}
-
-static Rune __islowerr[] = {
-       0x0061, 0x007a,
-       0x00df, 0x00f6,
-       0x00f8, 0x00ff,
-       0x0137, 0x0138,
-       0x0148, 0x0149,
-       0x017e, 0x0180,
-       0x018c, 0x018d,
-       0x0199, 0x019b,
-       0x01aa, 0x01ab,
-       0x01b9, 0x01ba,
-       0x01bd, 0x01bf,
-       0x01dc, 0x01dd,
-       0x01ef, 0x01f0,
-       0x0233, 0x0239,
-       0x023f, 0x0240,
-       0x024f, 0x0293,
-       0x0295, 0x02af,
-       0x037b, 0x037d,
-       0x03ac, 0x03ce,
-       0x03d0, 0x03d1,
-       0x03d5, 0x03d7,
-       0x03ef, 0x03f3,
-       0x03fb, 0x03fc,
-       0x0430, 0x045f,
-       0x04ce, 0x04cf,
-       0x0561, 0x0587,
-       0x1d00, 0x1d2b,
-       0x1d6b, 0x1d77,
-       0x1d79, 0x1d9a,
-       0x1e95, 0x1e9d,
-       0x1eff, 0x1f07,
-       0x1f10, 0x1f15,
-       0x1f20, 0x1f27,
-       0x1f30, 0x1f37,
-       0x1f40, 0x1f45,
-       0x1f50, 0x1f57,
-       0x1f60, 0x1f67,
-       0x1f70, 0x1f7d,
-       0x1f80, 0x1f87,
-       0x1f90, 0x1f97,
-       0x1fa0, 0x1fa7,
-       0x1fb0, 0x1fb4,
-       0x1fb6, 0x1fb7,
-       0x1fc2, 0x1fc4,
-       0x1fc6, 0x1fc7,
-       0x1fd0, 0x1fd3,
-       0x1fd6, 0x1fd7,
-       0x1fe0, 0x1fe7,
-       0x1ff2, 0x1ff4,
-       0x1ff6, 0x1ff7,
-       0x210e, 0x210f,
-       0x213c, 0x213d,
-       0x2146, 0x2149,
-       0x2170, 0x217f,
-       0x24d0, 0x24e9,
-       0x2c30, 0x2c5e,
-       0x2c65, 0x2c66,
-       0x2c73, 0x2c74,
-       0x2c76, 0x2c7b,
-       0x2ce3, 0x2ce4,
-       0x2d00, 0x2d25,
-       0xa72f, 0xa731,
-       0xa771, 0xa778,
-       0xfb00, 0xfb06,
-       0xfb13, 0xfb17,
-       0xff41, 0xff5a,
-       0x10428, 0x1044f,
-       0x1d41a, 0x1d433,
-       0x1d44e, 0x1d454,
-       0x1d456, 0x1d467,
-       0x1d482, 0x1d49b,
-       0x1d4b6, 0x1d4b9,
-       0x1d4bd, 0x1d4c3,
-       0x1d4c5, 0x1d4cf,
-       0x1d4ea, 0x1d503,
-       0x1d51e, 0x1d537,
-       0x1d552, 0x1d56b,
-       0x1d586, 0x1d59f,
-       0x1d5ba, 0x1d5d3,
-       0x1d5ee, 0x1d607,
-       0x1d622, 0x1d63b,
-       0x1d656, 0x1d66f,
-       0x1d68a, 0x1d6a5,
-       0x1d6c2, 0x1d6da,
-       0x1d6dc, 0x1d6e1,
-       0x1d6fc, 0x1d714,
-       0x1d716, 0x1d71b,
-       0x1d736, 0x1d74e,
-       0x1d750, 0x1d755,
-       0x1d770, 0x1d788,
-       0x1d78a, 0x1d78f,
-       0x1d7aa, 0x1d7c2,
-       0x1d7c4, 0x1d7c9,
-};
-
-static Rune __islowerp[] = {
-       0x0101, 0x0135,
-       0x013a, 0x0146,
-       0x014b, 0x0177,
-       0x017a, 0x017c,
-       0x0183, 0x0185,
-       0x01a1, 0x01a5,
-       0x01b4, 0x01b6,
-       0x01cc, 0x01da,
-       0x01df, 0x01ed,
-       0x01f3, 0x01f5,
-       0x01f9, 0x0231,
-       0x0247, 0x024d,
-       0x0371, 0x0373,
-       0x03d9, 0x03ed,
-       0x0461, 0x0481,
-       0x048b, 0x04bf,
-       0x04c2, 0x04cc,
-       0x04d1, 0x0527,
-       0x1e01, 0x1e93,
-       0x1e9f, 0x1efd,
-       0x2c68, 0x2c6c,
-       0x2c81, 0x2ce1,
-       0x2cec, 0x2cee,
-       0xa641, 0xa66d,
-       0xa681, 0xa697,
-       0xa723, 0xa72d,
-       0xa733, 0xa76f,
-       0xa77a, 0xa77c,
-       0xa77f, 0xa787,
-       0xa78c, 0xa78e,
-       0xa791, 0xa793,
-       0xa7a1, 0xa7a9,
-};
-
-static Rune __islowers[] = {
-       0x00b5,
-       0x0188,
-       0x0192,
-       0x0195,
-       0x019e,
-       0x01a8,
-       0x01ad,
-       0x01b0,
-       0x01c6,
-       0x01c9,
-       0x023c,
-       0x0242,
-       0x0377,
-       0x0390,
-       0x03f5,
-       0x03f8,
-       0x1fbe,
-       0x210a,
-       0x2113,
-       0x212f,
-       0x2134,
-       0x2139,
-       0x214e,
-       0x2184,
-       0x2c61,
-       0x2c71,
-       0x2cf3,
-       0x2d27,
-       0x2d2d,
-       0xa7fa,
-       0x1d4bb,
-       0x1d7cb,
-};
-
-int
-islowerrune(Rune c)
-{
-       Rune *p;
-
-       p = rbsearch(c, __islowerr, nelem(__islowerr)/2, 2);
-       if(p && c >= p[0] && c <= p[1])
-               return 1;
-       p = rbsearch(c, __islowerp, nelem(__islowerp)/2, 2);
-       if(p && c >= p[0] && c <= p[1] && !((c - p[0]) & 1))
-               return 1;
-       p = rbsearch(c, __islowers, nelem(__islowers), 1);
-       if(p && c == p[0])
-               return 1;
-       return 0;
-}
-
-static Rune __istitler[] = {
-       0x0041, 0x005a,
-       0x00c0, 0x00d6,
-       0x00d8, 0x00de,
-       0x0178, 0x0179,
-       0x0181, 0x0182,
-       0x0186, 0x0187,
-       0x0189, 0x018b,
-       0x018e, 0x0191,
-       0x0193, 0x0194,
-       0x0196, 0x0198,
-       0x019c, 0x019d,
-       0x019f, 0x01a0,
-       0x01a6, 0x01a7,
-       0x01ae, 0x01af,
-       0x01b1, 0x01b3,
-       0x01b7, 0x01b8,
-       0x01f6, 0x01f8,
-       0x023a, 0x023b,
-       0x023d, 0x023e,
-       0x0243, 0x0246,
-       0x0388, 0x038a,
-       0x038e, 0x038f,
-       0x0391, 0x03a1,
-       0x03a3, 0x03ab,
-       0x03f9, 0x03fa,
-       0x03fd, 0x042f,
-       0x04c0, 0x04c1,
-       0x0531, 0x0556,
-       0x10a0, 0x10c5,
-       0x1f08, 0x1f0f,
-       0x1f18, 0x1f1d,
-       0x1f28, 0x1f2f,
-       0x1f38, 0x1f3f,
-       0x1f48, 0x1f4d,
-       0x1f68, 0x1f6f,
-       0x1f88, 0x1f8f,
-       0x1f98, 0x1f9f,
-       0x1fa8, 0x1faf,
-       0x1fb8, 0x1fbc,
-       0x1fc8, 0x1fcc,
-       0x1fd8, 0x1fdb,
-       0x1fe8, 0x1fec,
-       0x1ff8, 0x1ffc,
-       0x2160, 0x216f,
-       0x24b6, 0x24cf,
-       0x2c00, 0x2c2e,
-       0x2c62, 0x2c64,
-       0x2c6d, 0x2c70,
-       0x2c7e, 0x2c80,
-       0xa77d, 0xa77e,
-       0xff21, 0xff3a,
-       0x10400, 0x10427,
-};
-
-static Rune __istitlep[] = {
-       0x0100, 0x012e,
-       0x0132, 0x0136,
-       0x0139, 0x0147,
-       0x014a, 0x0176,
-       0x017b, 0x017d,
-       0x01a2, 0x01a4,
-       0x01cb, 0x01db,
-       0x01de, 0x01ee,
-       0x01f2, 0x01f4,
-       0x01fa, 0x0232,
-       0x0248, 0x024e,
-       0x0370, 0x0372,
-       0x03d8, 0x03ee,
-       0x0460, 0x0480,
-       0x048a, 0x04be,
-       0x04c3, 0x04cd,
-       0x04d0, 0x0526,
-       0x1e00, 0x1e94,
-       0x1ea0, 0x1efe,
-       0x1f59, 0x1f5f,
-       0x2c67, 0x2c6b,
-       0x2c82, 0x2ce2,
-       0x2ceb, 0x2ced,
-       0xa640, 0xa66c,
-       0xa680, 0xa696,
-       0xa722, 0xa72e,
-       0xa732, 0xa76e,
-       0xa779, 0xa77b,
-       0xa780, 0xa786,
-       0xa78b, 0xa78d,
-       0xa790, 0xa792,
-       0xa7a0, 0xa7aa,
-};
-
-static Rune __istitles[] = {
-       0x0184,
-       0x01a9,
-       0x01ac,
-       0x01b5,
-       0x01bc,
-       0x01c5,
-       0x01c8,
-       0x0241,
-       0x0376,
-       0x0386,
-       0x038c,
-       0x03cf,
-       0x03f7,
-       0x10c7,
-       0x10cd,
-       0x2132,
-       0x2183,
-       0x2c60,
-       0x2c72,
-       0x2c75,
-       0x2cf2,
-};
-
-int
-istitlerune(Rune c)
-{
-       Rune *p;
-
-       p = rbsearch(c, __istitler, nelem(__istitler)/2, 2);
-       if(p && c >= p[0] && c <= p[1])
-               return 1;
-       p = rbsearch(c, __istitlep, nelem(__istitlep)/2, 2);
-       if(p && c >= p[0] && c <= p[1] && !((c - p[0]) & 1))
-               return 1;
-       p = rbsearch(c, __istitles, nelem(__istitles), 1);
-       if(p && c == p[0])
-               return 1;
-       return 0;
-}
-
-static Rune __toupperr[] = {
-       0x0061, 0x007a, 1048544,
-       0x00e0, 0x00f6, 1048544,
-       0x00f8, 0x00fe, 1048544,
-       0x023f, 0x0240, 1059391,
-       0x0256, 0x0257, 1048371,
-       0x028a, 0x028b, 1048359,
-       0x037b, 0x037d, 1048706,
-       0x03ad, 0x03af, 1048539,
-       0x03b1, 0x03c1, 1048544,
-       0x03c3, 0x03cb, 1048544,
-       0x03cd, 0x03ce, 1048513,
-       0x0430, 0x044f, 1048544,
-       0x0450, 0x045f, 1048496,
-       0x0561, 0x0586, 1048528,
-       0x1f00, 0x1f07, 1048584,
-       0x1f10, 0x1f15, 1048584,
-       0x1f20, 0x1f27, 1048584,
-       0x1f30, 0x1f37, 1048584,
-       0x1f40, 0x1f45, 1048584,
-       0x1f60, 0x1f67, 1048584,
-       0x1f70, 0x1f71, 1048650,
-       0x1f72, 0x1f75, 1048662,
-       0x1f76, 0x1f77, 1048676,
-       0x1f78, 0x1f79, 1048704,
-       0x1f7a, 0x1f7b, 1048688,
-       0x1f7c, 0x1f7d, 1048702,
-       0x1f80, 0x1f87, 1048584,
-       0x1f90, 0x1f97, 1048584,
-       0x1fa0, 0x1fa7, 1048584,
-       0x1fb0, 0x1fb1, 1048584,
-       0x1fd0, 0x1fd1, 1048584,
-       0x1fe0, 0x1fe1, 1048584,
-       0x2170, 0x217f, 1048560,
-       0x24d0, 0x24e9, 1048550,
-       0x2c30, 0x2c5e, 1048528,
-       0x2d00, 0x2d25, 1041312,
-       0xff41, 0xff5a, 1048544,
-       0x10428, 0x1044f, 1048536,
-};
-
-static Rune __toupperp[] = {
-       0x0101, 0x012f, 1048575,
-       0x0133, 0x0137, 1048575,
-       0x013a, 0x0148, 1048575,
-       0x014b, 0x0177, 1048575,
-       0x017a, 0x017e, 1048575,
-       0x0183, 0x0185, 1048575,
-       0x01a1, 0x01a5, 1048575,
-       0x01b4, 0x01b6, 1048575,
-       0x01ce, 0x01dc, 1048575,
-       0x01df, 0x01ef, 1048575,
-       0x01f9, 0x021f, 1048575,
-       0x0223, 0x0233, 1048575,
-       0x0247, 0x024f, 1048575,
-       0x0371, 0x0373, 1048575,
-       0x03d9, 0x03ef, 1048575,
-       0x0461, 0x0481, 1048575,
-       0x048b, 0x04bf, 1048575,
-       0x04c2, 0x04ce, 1048575,
-       0x04d1, 0x0527, 1048575,
-       0x1e01, 0x1e95, 1048575,
-       0x1ea1, 0x1eff, 1048575,
-       0x1f51, 0x1f57, 1048584,
-       0x2c68, 0x2c6c, 1048575,
-       0x2c81, 0x2ce3, 1048575,
-       0x2cec, 0x2cee, 1048575,
-       0xa641, 0xa66d, 1048575,
-       0xa681, 0xa697, 1048575,
-       0xa723, 0xa72f, 1048575,
-       0xa733, 0xa76f, 1048575,
-       0xa77a, 0xa77c, 1048575,
-       0xa77f, 0xa787, 1048575,
-       0xa791, 0xa793, 1048575,
-       0xa7a1, 0xa7a9, 1048575,
-};
-
-static Rune __touppers[] = {
-       0x00b5, 1049319,
-       0x00ff, 1048697,
-       0x0131, 1048344,
-       0x017f, 1048276,
-       0x0180, 1048771,
-       0x0188, 1048575,
-       0x018c, 1048575,
-       0x0192, 1048575,
-       0x0195, 1048673,
-       0x0199, 1048575,
-       0x019a, 1048739,
-       0x019e, 1048706,
-       0x01a8, 1048575,
-       0x01ad, 1048575,
-       0x01b0, 1048575,
-       0x01b9, 1048575,
-       0x01bd, 1048575,
-       0x01bf, 1048632,
-       0x01c5, 1048575,
-       0x01c6, 1048574,
-       0x01c8, 1048575,
-       0x01c9, 1048574,
-       0x01cb, 1048575,
-       0x01cc, 1048574,
-       0x01dd, 1048497,
-       0x01f2, 1048575,
-       0x01f3, 1048574,
-       0x01f5, 1048575,
-       0x023c, 1048575,
-       0x0242, 1048575,
-       0x0250, 1059359,
-       0x0251, 1059356,
-       0x0252, 1059358,
-       0x0253, 1048366,
-       0x0254, 1048370,
-       0x0259, 1048374,
-       0x025b, 1048373,
-       0x0260, 1048371,
-       0x0263, 1048369,
-       0x0265, 1090856,
-       0x0266, 1090884,
-       0x0268, 1048367,
-       0x0269, 1048365,
-       0x026b, 1059319,
-       0x026f, 1048365,
-       0x0271, 1059325,
-       0x0272, 1048363,
-       0x0275, 1048362,
-       0x027d, 1059303,
-       0x0280, 1048358,
-       0x0283, 1048358,
-       0x0288, 1048358,
-       0x0289, 1048507,
-       0x028c, 1048505,
-       0x0292, 1048357,
-       0x0345, 1048660,
-       0x0377, 1048575,
-       0x03ac, 1048538,
-       0x03c2, 1048545,
-       0x03cc, 1048512,
-       0x03d0, 1048514,
-       0x03d1, 1048519,
-       0x03d5, 1048529,
-       0x03d6, 1048522,
-       0x03d7, 1048568,
-       0x03f0, 1048490,
-       0x03f1, 1048496,
-       0x03f2, 1048583,
-       0x03f5, 1048480,
-       0x03f8, 1048575,
-       0x03fb, 1048575,
-       0x04cf, 1048561,
-       0x1d79, 1083908,
-       0x1d7d, 1052390,
-       0x1e9b, 1048517,
-       0x1fb3, 1048585,
-       0x1fbe, 1041371,
-       0x1fc3, 1048585,
-       0x1fe5, 1048583,
-       0x1ff3, 1048585,
-       0x214e, 1048548,
-       0x2184, 1048575,
-       0x2c61, 1048575,
-       0x2c65, 1037781,
-       0x2c66, 1037784,
-       0x2c73, 1048575,
-       0x2c76, 1048575,
-       0x2cf3, 1048575,
-       0x2d27, 1041312,
-       0x2d2d, 1041312,
-       0xa78c, 1048575,
-};
-
-Rune
-toupperrune(Rune c)
-{
-       Rune *p;
-
-       p = rbsearch(c, __toupperr, nelem(__toupperr)/3, 3);
-       if(p && c >= p[0] && c <= p[1])
-               return c + p[2] - 1048576;
-       p = rbsearch(c, __toupperp, nelem(__toupperp)/3, 3);
-       if(p && c >= p[0] && c <= p[1] && !((c - p[0]) & 1))
-               return c + p[2] - 1048576;
-       p = rbsearch(c, __touppers, nelem(__touppers)/2, 2);
-       if(p && c == p[0])
-               return c + p[1] - 1048576;
-       return c;
-}
-
-static Rune __tolowerr[] = {
-       0x0041, 0x005a, 1048608,
-       0x00c0, 0x00d6, 1048608,
-       0x00d8, 0x00de, 1048608,
-       0x0189, 0x018a, 1048781,
-       0x01b1, 0x01b2, 1048793,
-       0x0388, 0x038a, 1048613,
-       0x038e, 0x038f, 1048639,
-       0x0391, 0x03a1, 1048608,
-       0x03a3, 0x03ab, 1048608,
-       0x03fd, 0x03ff, 1048446,
-       0x0400, 0x040f, 1048656,
-       0x0410, 0x042f, 1048608,
-       0x0531, 0x0556, 1048624,
-       0x10a0, 0x10c5, 1055840,
-       0x1f08, 0x1f0f, 1048568,
-       0x1f18, 0x1f1d, 1048568,
-       0x1f28, 0x1f2f, 1048568,
-       0x1f38, 0x1f3f, 1048568,
-       0x1f48, 0x1f4d, 1048568,
-       0x1f68, 0x1f6f, 1048568,
-       0x1f88, 0x1f8f, 1048568,
-       0x1f98, 0x1f9f, 1048568,
-       0x1fa8, 0x1faf, 1048568,
-       0x1fb8, 0x1fb9, 1048568,
-       0x1fba, 0x1fbb, 1048502,
-       0x1fc8, 0x1fcb, 1048490,
-       0x1fd8, 0x1fd9, 1048568,
-       0x1fda, 0x1fdb, 1048476,
-       0x1fe8, 0x1fe9, 1048568,
-       0x1fea, 0x1feb, 1048464,
-       0x1ff8, 0x1ff9, 1048448,
-       0x1ffa, 0x1ffb, 1048450,
-       0x2160, 0x216f, 1048592,
-       0x24b6, 0x24cf, 1048602,
-       0x2c00, 0x2c2e, 1048624,
-       0x2c7e, 0x2c7f, 1037761,
-       0xff21, 0xff3a, 1048608,
-       0x10400, 0x10427, 1048616,
-};
-
-static Rune __tolowerp[] = {
-       0x0100, 0x012e, 1048577,
-       0x0132, 0x0136, 1048577,
-       0x0139, 0x0147, 1048577,
-       0x014a, 0x0176, 1048577,
-       0x017b, 0x017d, 1048577,
-       0x01a2, 0x01a4, 1048577,
-       0x01b3, 0x01b5, 1048577,
-       0x01cd, 0x01db, 1048577,
-       0x01de, 0x01ee, 1048577,
-       0x01f8, 0x021e, 1048577,
-       0x0222, 0x0232, 1048577,
-       0x0248, 0x024e, 1048577,
-       0x0370, 0x0372, 1048577,
-       0x03d8, 0x03ee, 1048577,
-       0x0460, 0x0480, 1048577,
-       0x048a, 0x04be, 1048577,
-       0x04c3, 0x04cd, 1048577,
-       0x04d0, 0x0526, 1048577,
-       0x1e00, 0x1e94, 1048577,
-       0x1ea0, 0x1efe, 1048577,
-       0x1f59, 0x1f5f, 1048568,
-       0x2c67, 0x2c6b, 1048577,
-       0x2c80, 0x2ce2, 1048577,
-       0x2ceb, 0x2ced, 1048577,
-       0xa640, 0xa66c, 1048577,
-       0xa680, 0xa696, 1048577,
-       0xa722, 0xa72e, 1048577,
-       0xa732, 0xa76e, 1048577,
-       0xa779, 0xa77b, 1048577,
-       0xa780, 0xa786, 1048577,
-       0xa790, 0xa792, 1048577,
-       0xa7a0, 0xa7a8, 1048577,
-};
-
-static Rune __tolowers[] = {
-       0x0130, 1048377,
-       0x0178, 1048455,
-       0x0179, 1048577,
-       0x0181, 1048786,
-       0x0182, 1048577,
-       0x0184, 1048577,
-       0x0186, 1048782,
-       0x0187, 1048577,
-       0x018b, 1048577,
-       0x018e, 1048655,
-       0x018f, 1048778,
-       0x0190, 1048779,
-       0x0191, 1048577,
-       0x0193, 1048781,
-       0x0194, 1048783,
-       0x0196, 1048787,
-       0x0197, 1048785,
-       0x0198, 1048577,
-       0x019c, 1048787,
-       0x019d, 1048789,
-       0x019f, 1048790,
-       0x01a0, 1048577,
-       0x01a6, 1048794,
-       0x01a7, 1048577,
-       0x01a9, 1048794,
-       0x01ac, 1048577,
-       0x01ae, 1048794,
-       0x01af, 1048577,
-       0x01b7, 1048795,
-       0x01b8, 1048577,
-       0x01bc, 1048577,
-       0x01c4, 1048578,
-       0x01c5, 1048577,
-       0x01c7, 1048578,
-       0x01c8, 1048577,
-       0x01ca, 1048578,
-       0x01cb, 1048577,
-       0x01f1, 1048578,
-       0x01f2, 1048577,
-       0x01f4, 1048577,
-       0x01f6, 1048479,
-       0x01f7, 1048520,
-       0x0220, 1048446,
-       0x023a, 1059371,
-       0x023b, 1048577,
-       0x023d, 1048413,
-       0x023e, 1059368,
-       0x0241, 1048577,
-       0x0243, 1048381,
-       0x0244, 1048645,
-       0x0245, 1048647,
-       0x0246, 1048577,
-       0x0376, 1048577,
-       0x0386, 1048614,
-       0x038c, 1048640,
-       0x03cf, 1048584,
-       0x03f4, 1048516,
-       0x03f7, 1048577,
-       0x03f9, 1048569,
-       0x03fa, 1048577,
-       0x04c0, 1048591,
-       0x04c1, 1048577,
-       0x10c7, 1055840,
-       0x10cd, 1055840,
-       0x1e9e, 1040961,
-       0x1fbc, 1048567,
-       0x1fcc, 1048567,
-       0x1fec, 1048569,
-       0x1ffc, 1048567,
-       0x2126, 1041059,
-       0x212a, 1040193,
-       0x212b, 1040314,
-       0x2132, 1048604,
-       0x2183, 1048577,
-       0x2c60, 1048577,
-       0x2c62, 1037833,
-       0x2c63, 1044762,
-       0x2c64, 1037849,
-       0x2c6d, 1037796,
-       0x2c6e, 1037827,
-       0x2c6f, 1037793,
-       0x2c70, 1037794,
-       0x2c72, 1048577,
-       0x2c75, 1048577,
-       0x2cf2, 1048577,
-       0xa77d, 1013244,
-       0xa77e, 1048577,
-       0xa78b, 1048577,
-       0xa78d, 1006296,
-       0xa7aa, 1006268,
-};
-
-Rune
-tolowerrune(Rune c)
-{
-       Rune *p;
-
-       p = rbsearch(c, __tolowerr, nelem(__tolowerr)/3, 3);
-       if(p && c >= p[0] && c <= p[1])
-               return c + p[2] - 1048576;
-       p = rbsearch(c, __tolowerp, nelem(__tolowerp)/3, 3);
-       if(p && c >= p[0] && c <= p[1] && !((c - p[0]) & 1))
-               return c + p[2] - 1048576;
-       p = rbsearch(c, __tolowers, nelem(__tolowers)/2, 2);
-       if(p && c == p[0])
-               return c + p[1] - 1048576;
-       return c;
-}
-
-static Rune __totitler[] = {
-       0x0061, 0x007a, 1048544,
-       0x00e0, 0x00f6, 1048544,
-       0x00f8, 0x00fe, 1048544,
-       0x023f, 0x0240, 1059391,
-       0x0256, 0x0257, 1048371,
-       0x028a, 0x028b, 1048359,
-       0x037b, 0x037d, 1048706,
-       0x03ad, 0x03af, 1048539,
-       0x03b1, 0x03c1, 1048544,
-       0x03c3, 0x03cb, 1048544,
-       0x03cd, 0x03ce, 1048513,
-       0x0430, 0x044f, 1048544,
-       0x0450, 0x045f, 1048496,
-       0x0561, 0x0586, 1048528,
-       0x1f00, 0x1f07, 1048584,
-       0x1f10, 0x1f15, 1048584,
-       0x1f20, 0x1f27, 1048584,
-       0x1f30, 0x1f37, 1048584,
-       0x1f40, 0x1f45, 1048584,
-       0x1f60, 0x1f67, 1048584,
-       0x1f70, 0x1f71, 1048650,
-       0x1f72, 0x1f75, 1048662,
-       0x1f76, 0x1f77, 1048676,
-       0x1f78, 0x1f79, 1048704,
-       0x1f7a, 0x1f7b, 1048688,
-       0x1f7c, 0x1f7d, 1048702,
-       0x1f80, 0x1f87, 1048584,
-       0x1f90, 0x1f97, 1048584,
-       0x1fa0, 0x1fa7, 1048584,
-       0x1fb0, 0x1fb1, 1048584,
-       0x1fd0, 0x1fd1, 1048584,
-       0x1fe0, 0x1fe1, 1048584,
-       0x2170, 0x217f, 1048560,
-       0x24d0, 0x24e9, 1048550,
-       0x2c30, 0x2c5e, 1048528,
-       0x2d00, 0x2d25, 1041312,
-       0xff41, 0xff5a, 1048544,
-       0x10428, 0x1044f, 1048536,
-};
-
-static Rune __totitlep[] = {
-       0x0101, 0x012f, 1048575,
-       0x0133, 0x0137, 1048575,
-       0x013a, 0x0148, 1048575,
-       0x014b, 0x0177, 1048575,
-       0x017a, 0x017e, 1048575,
-       0x0183, 0x0185, 1048575,
-       0x01a1, 0x01a5, 1048575,
-       0x01b4, 0x01b6, 1048575,
-       0x01cc, 0x01dc, 1048575,
-       0x01df, 0x01ef, 1048575,
-       0x01f3, 0x01f5, 1048575,
-       0x01f9, 0x021f, 1048575,
-       0x0223, 0x0233, 1048575,
-       0x0247, 0x024f, 1048575,
-       0x0371, 0x0373, 1048575,
-       0x03d9, 0x03ef, 1048575,
-       0x0461, 0x0481, 1048575,
-       0x048b, 0x04bf, 1048575,
-       0x04c2, 0x04ce, 1048575,
-       0x04d1, 0x0527, 1048575,
-       0x1e01, 0x1e95, 1048575,
-       0x1ea1, 0x1eff, 1048575,
-       0x1f51, 0x1f57, 1048584,
-       0x2c68, 0x2c6c, 1048575,
-       0x2c81, 0x2ce3, 1048575,
-       0x2cec, 0x2cee, 1048575,
-       0xa641, 0xa66d, 1048575,
-       0xa681, 0xa697, 1048575,
-       0xa723, 0xa72f, 1048575,
-       0xa733, 0xa76f, 1048575,
-       0xa77a, 0xa77c, 1048575,
-       0xa77f, 0xa787, 1048575,
-       0xa791, 0xa793, 1048575,
-       0xa7a1, 0xa7a9, 1048575,
-};
-
-static Rune __totitles[] = {
-       0x00b5, 1049319,
-       0x00ff, 1048697,
-       0x0131, 1048344,
-       0x017f, 1048276,
-       0x0180, 1048771,
-       0x0188, 1048575,
-       0x018c, 1048575,
-       0x0192, 1048575,
-       0x0195, 1048673,
-       0x0199, 1048575,
-       0x019a, 1048739,
-       0x019e, 1048706,
-       0x01a8, 1048575,
-       0x01ad, 1048575,
-       0x01b0, 1048575,
-       0x01b9, 1048575,
-       0x01bd, 1048575,
-       0x01bf, 1048632,
-       0x01c4, 1048577,
-       0x01c6, 1048575,
-       0x01c7, 1048577,
-       0x01c9, 1048575,
-       0x01ca, 1048577,
-       0x01dd, 1048497,
-       0x01f1, 1048577,
-       0x023c, 1048575,
-       0x0242, 1048575,
-       0x0250, 1059359,
-       0x0251, 1059356,
-       0x0252, 1059358,
-       0x0253, 1048366,
-       0x0254, 1048370,
-       0x0259, 1048374,
-       0x025b, 1048373,
-       0x0260, 1048371,
-       0x0263, 1048369,
-       0x0265, 1090856,
-       0x0266, 1090884,
-       0x0268, 1048367,
-       0x0269, 1048365,
-       0x026b, 1059319,
-       0x026f, 1048365,
-       0x0271, 1059325,
-       0x0272, 1048363,
-       0x0275, 1048362,
-       0x027d, 1059303,
-       0x0280, 1048358,
-       0x0283, 1048358,
-       0x0288, 1048358,
-       0x0289, 1048507,
-       0x028c, 1048505,
-       0x0292, 1048357,
-       0x0345, 1048660,
-       0x0377, 1048575,
-       0x03ac, 1048538,
-       0x03c2, 1048545,
-       0x03cc, 1048512,
-       0x03d0, 1048514,
-       0x03d1, 1048519,
-       0x03d5, 1048529,
-       0x03d6, 1048522,
-       0x03d7, 1048568,
-       0x03f0, 1048490,
-       0x03f1, 1048496,
-       0x03f2, 1048583,
-       0x03f5, 1048480,
-       0x03f8, 1048575,
-       0x03fb, 1048575,
-       0x04cf, 1048561,
-       0x1d79, 1083908,
-       0x1d7d, 1052390,
-       0x1e9b, 1048517,
-       0x1fb3, 1048585,
-       0x1fbe, 1041371,
-       0x1fc3, 1048585,
-       0x1fe5, 1048583,
-       0x1ff3, 1048585,
-       0x214e, 1048548,
-       0x2184, 1048575,
-       0x2c61, 1048575,
-       0x2c65, 1037781,
-       0x2c66, 1037784,
-       0x2c73, 1048575,
-       0x2c76, 1048575,
-       0x2cf3, 1048575,
-       0x2d27, 1041312,
-       0x2d2d, 1041312,
-       0xa78c, 1048575,
-};
-
-Rune
-totitlerune(Rune c)
-{
-       Rune *p;
-
-       p = rbsearch(c, __totitler, nelem(__totitler)/3, 3);
-       if(p && c >= p[0] && c <= p[1])
-               return c + p[2] - 1048576;
-       p = rbsearch(c, __totitlep, nelem(__totitlep)/3, 3);
-       if(p && c >= p[0] && c <= p[1] && !((c - p[0]) & 1))
-               return c + p[2] - 1048576;
-       p = rbsearch(c, __totitles, nelem(__totitles)/2, 2);
-       if(p && c == p[0])
-               return c + p[1] - 1048576;
-       return c;
-}
-
diff --git a/src/lib9/utf/utf.h b/src/lib9/utf/utf.h
deleted file mode 100644 (file)
index 72d01ed..0000000
+++ /dev/null
@@ -1,240 +0,0 @@
-/*
- * The authors of this software are Rob Pike and Ken Thompson.
- *              Copyright (c) 1998-2002 by Lucent Technologies.
- *              Portions Copyright (c) 2009 The Go Authors.  All rights reserved.
- * Permission to use, copy, modify, and distribute this software for any
- * purpose without fee is hereby granted, provided that this entire notice
- * is included in all copies of any software which is or includes a copy
- * or modification of this software and in all copies of the supporting
- * documentation for such software.
- * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED
- * WARRANTY.  IN PARTICULAR, NEITHER THE AUTHORS NOR LUCENT TECHNOLOGIES MAKE ANY
- * REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY
- * OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE.
- */
-
-#ifndef _UTFH_
-#define _UTFH_ 1
-
-typedef unsigned int Rune;     /* Code-point values in Unicode 4.0 are 21 bits wide.*/
-
-enum
-{
-  UTFmax       = 4,            /* maximum bytes per rune */
-  Runesync     = 0x80,         /* cannot represent part of a UTF sequence (<) */
-  Runeself     = 0x80,         /* rune and UTF sequences are the same (<) */
-  Runeerror    = 0xFFFD,       /* decoding error in UTF */
-  Runemax      = 0x10FFFF,     /* maximum rune value */
-};
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*
- * rune routines
- */
-
-/*
- * These routines were written by Rob Pike and Ken Thompson
- * and first appeared in Plan 9.
- * SEE ALSO
- * utf (7)
- * tcs (1)
-*/
-
-// runetochar copies (encodes) one rune, pointed to by r, to at most
-// UTFmax bytes starting at s and returns the number of bytes generated.
-
-int runetochar(char* s, const Rune* r);
-
-
-// chartorune copies (decodes) at most UTFmax bytes starting at s to
-// one rune, pointed to by r, and returns the number of bytes consumed.
-// If the input is not exactly in UTF format, chartorune will set *r
-// to Runeerror and return 1.
-//
-// Note: There is no special case for a "null-terminated" string. A
-// string whose first byte has the value 0 is the UTF8 encoding of the
-// Unicode value 0 (i.e., ASCII NULL). A byte value of 0 is illegal
-// anywhere else in a UTF sequence.
-
-int chartorune(Rune* r, const char* s);
-
-
-// charntorune is like chartorune, except that it will access at most
-// n bytes of s.  If the UTF sequence is incomplete within n bytes,
-// charntorune will set *r to Runeerror and return 0. If it is complete
-// but not in UTF format, it will set *r to Runeerror and return 1.
-//
-// Added 2004-09-24 by Wei-Hwa Huang
-
-int charntorune(Rune* r, const char* s, int n);
-
-// isvalidcharntorune(str, n, r, consumed)
-// is a convenience function that calls "*consumed = charntorune(r, str, n)"
-// and returns an int (logically boolean) indicating whether the first
-// n bytes of str was a valid and complete UTF sequence.
-
-int isvalidcharntorune(const char* str, int n, Rune* r, int* consumed);
-
-// runelen returns the number of bytes required to convert r into UTF.
-
-int runelen(Rune r);
-
-
-// runenlen returns the number of bytes required to convert the n
-// runes pointed to by r into UTF.
-
-int runenlen(const Rune* r, int n);
-
-
-// fullrune returns 1 if the string s of length n is long enough to be
-// decoded by chartorune, and 0 otherwise. This does not guarantee
-// that the string contains a legal UTF encoding. This routine is used
-// by programs that obtain input one byte at a time and need to know
-// when a full rune has arrived.
-
-int fullrune(const char* s, int n);
-
-// The following routines are analogous to the corresponding string
-// routines with "utf" substituted for "str", and "rune" substituted
-// for "chr".
-
-// utflen returns the number of runes that are represented by the UTF
-// string s. (cf. strlen)
-
-int utflen(const char* s);
-
-
-// utfnlen returns the number of complete runes that are represented
-// by the first n bytes of the UTF string s. If the last few bytes of
-// the string contain an incompletely coded rune, utfnlen will not
-// count them; in this way, it differs from utflen, which includes
-// every byte of the string. (cf. strnlen)
-
-int utfnlen(const char* s, long n);
-
-
-// utfrune returns a pointer to the first occurrence of rune r in the
-// UTF string s, or 0 if r does not occur in the string.  The NULL
-// byte terminating a string is considered to be part of the string s.
-// (cf. strchr)
-
-/*const*/ char* utfrune(const char* s, Rune r);
-
-
-// utfrrune returns a pointer to the last occurrence of rune r in the
-// UTF string s, or 0 if r does not occur in the string.  The NULL
-// byte terminating a string is considered to be part of the string s.
-// (cf. strrchr)
-
-/*const*/ char* utfrrune(const char* s, Rune r);
-
-
-// utfutf returns a pointer to the first occurrence of the UTF string
-// s2 as a UTF substring of s1, or 0 if there is none. If s2 is the
-// null string, utfutf returns s1. (cf. strstr)
-
-const char* utfutf(const char* s1, const char* s2);
-
-
-// utfecpy copies UTF sequences until a null sequence has been copied,
-// but writes no sequences beyond es1.  If any sequences are copied,
-// s1 is terminated by a null sequence, and a pointer to that sequence
-// is returned.  Otherwise, the original s1 is returned. (cf. strecpy)
-
-char* utfecpy(char *s1, char *es1, const char *s2);
-
-
-
-// These functions are rune-string analogues of the corresponding
-// functions in strcat (3).
-//
-// These routines first appeared in Plan 9.
-// SEE ALSO
-// memmove (3)
-// rune (3)
-// strcat (2)
-//
-// BUGS: The outcome of overlapping moves varies among implementations.
-
-Rune* runestrcat(Rune* s1, const Rune* s2);
-Rune* runestrncat(Rune* s1, const Rune* s2, long n);
-
-const Rune* runestrchr(const Rune* s, Rune c);
-
-int runestrcmp(const Rune* s1, const Rune* s2);
-int runestrncmp(const Rune* s1, const Rune* s2, long n);
-
-Rune* runestrcpy(Rune* s1, const Rune* s2);
-Rune* runestrncpy(Rune* s1, const Rune* s2, long n);
-Rune* runestrecpy(Rune* s1, Rune* es1, const Rune* s2);
-
-Rune* runestrdup(const Rune* s);
-
-const Rune* runestrrchr(const Rune* s, Rune c);
-long runestrlen(const Rune* s);
-const Rune* runestrstr(const Rune* s1, const Rune* s2);
-
-
-
-// The following routines test types and modify cases for Unicode
-// characters.  Unicode defines some characters as letters and
-// specifies three cases: upper, lower, and title.  Mappings among the
-// cases are also defined, although they are not exhaustive: some
-// upper case letters have no lower case mapping, and so on.  Unicode
-// also defines several character properties, a subset of which are
-// checked by these routines.  These routines are based on Unicode
-// version 3.0.0.
-//
-// NOTE: The routines are implemented in C, so the boolean functions
-// (e.g., isupperrune) return 0 for false and 1 for true.
-//
-//
-// toupperrune, tolowerrune, and totitlerune are the Unicode case
-// mappings. These routines return the character unchanged if it has
-// no defined mapping.
-
-Rune toupperrune(Rune r);
-Rune tolowerrune(Rune r);
-Rune totitlerune(Rune r);
-
-
-// isupperrune tests for upper case characters, including Unicode
-// upper case letters and targets of the toupper mapping. islowerrune
-// and istitlerune are defined analogously.
-
-int isupperrune(Rune r);
-int islowerrune(Rune r);
-int istitlerune(Rune r);
-
-
-// isalpharune tests for Unicode letters; this includes ideographs in
-// addition to alphabetic characters.
-
-int isalpharune(Rune r);
-
-
-// isdigitrune tests for digits. Non-digit numbers, such as Roman
-// numerals, are not included.
-
-int isdigitrune(Rune r);
-
-
-// isspacerune tests for whitespace characters, including "C" locale
-// whitespace, Unicode defined whitespace, and the "zero-width
-// non-break space" character.
-
-int isspacerune(Rune r);
-
-
-// (The comments in this file were copied from the manpage files rune.3,
-// isalpharune.3, and runestrcat.3. Some formatting changes were also made
-// to conform to Google style. /JRM 11/11/05)
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/src/lib9/utf/utfdef.h b/src/lib9/utf/utfdef.h
deleted file mode 100644 (file)
index 4bbdfc6..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * The authors of this software are Rob Pike and Ken Thompson.
- *              Copyright (c) 1998-2002 by Lucent Technologies.
- * Permission to use, copy, modify, and distribute this software for any
- * purpose without fee is hereby granted, provided that this entire notice
- * is included in all copies of any software which is or includes a copy
- * or modification of this software and in all copies of the supporting
- * documentation for such software.
- * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED
- * WARRANTY.  IN PARTICULAR, NEITHER THE AUTHORS NOR LUCENT TECHNOLOGIES MAKE ANY
- * REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY
- * OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE.
- */
-
-#define uchar _utfuchar
-#define ushort _utfushort
-#define uint _utfuint
-#define ulong _utfulong
-#define vlong _utfvlong
-#define uvlong _utfuvlong
-
-typedef unsigned char          uchar;
-typedef unsigned short         ushort;
-typedef unsigned int           uint;
-typedef unsigned long          ulong;
-
-#define nelem(x) (sizeof(x)/sizeof((x)[0]))
diff --git a/src/lib9/utf/utfecpy.c b/src/lib9/utf/utfecpy.c
deleted file mode 100644 (file)
index 8540664..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * The authors of this software are Rob Pike and Ken Thompson.
- *              Copyright (c) 2002 by Lucent Technologies.
- * Permission to use, copy, modify, and distribute this software for any
- * purpose without fee is hereby granted, provided that this entire notice
- * is included in all copies of any software which is or includes a copy
- * or modification of this software and in all copies of the supporting
- * documentation for such software.
- * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED
- * WARRANTY.  IN PARTICULAR, NEITHER THE AUTHORS NOR LUCENT TECHNOLOGIES MAKE ANY
- * REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY
- * OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE.
- */
-#include <u.h>
-#include <libc.h>
-#include "utf.h"
-#include "utfdef.h"
-
-char*
-utfecpy(char *to, char *e, const char *from)
-{
-       char *end;
-
-       if(to >= e)
-               return to;
-       end = memccpy(to, from, '\0', (size_t)(e - to));
-       if(end == nil){
-               end = e-1;
-               while(end>to && (*--end&0xC0)==0x80)
-                       ;
-               *end = '\0';
-       }else{
-               end--;
-       }
-       return end;
-}
diff --git a/src/lib9/utf/utflen.c b/src/lib9/utf/utflen.c
deleted file mode 100644 (file)
index 9b96185..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * The authors of this software are Rob Pike and Ken Thompson.
- *              Copyright (c) 2002 by Lucent Technologies.
- * Permission to use, copy, modify, and distribute this software for any
- * purpose without fee is hereby granted, provided that this entire notice
- * is included in all copies of any software which is or includes a copy
- * or modification of this software and in all copies of the supporting
- * documentation for such software.
- * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED
- * WARRANTY.  IN PARTICULAR, NEITHER THE AUTHORS NOR LUCENT TECHNOLOGIES MAKE ANY
- * REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY
- * OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE.
- */
-#include "utf.h"
-#include "utfdef.h"
-
-int
-utflen(const char *s)
-{
-       int c;
-       int n;
-       Rune rune;
-
-       n = 0;
-       for(;;) {
-               c = *(uchar*)s;
-               if(c < Runeself) {
-                       if(c == 0)
-                               return n;
-                       s++;
-               } else
-                       s += chartorune(&rune, s);
-               n++;
-       }
-}
diff --git a/src/lib9/utf/utfnlen.c b/src/lib9/utf/utfnlen.c
deleted file mode 100644 (file)
index d6ef5fa..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * The authors of this software are Rob Pike and Ken Thompson.
- *              Copyright (c) 2002 by Lucent Technologies.
- * Permission to use, copy, modify, and distribute this software for any
- * purpose without fee is hereby granted, provided that this entire notice
- * is included in all copies of any software which is or includes a copy
- * or modification of this software and in all copies of the supporting
- * documentation for such software.
- * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED
- * WARRANTY.  IN PARTICULAR, NEITHER THE AUTHORS NOR LUCENT TECHNOLOGIES MAKE ANY
- * REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY
- * OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE.
- */
-#include "utf.h"
-#include "utfdef.h"
-
-int
-utfnlen(const char *s, long m)
-{
-       int c;
-       int n;
-       Rune rune;
-       const char *es;
-
-       es = s + m;
-       for(n = 0; s < es; n++) {
-               c = *(uchar*)s;
-               if(c < Runeself){
-                       if(c == '\0')
-                               break;
-                       s++;
-                       continue;
-               }
-               if(!fullrune(s, (int)(es-s)))
-                       break;
-               s += chartorune(&rune, s);
-       }
-       return n;
-}
diff --git a/src/lib9/utf/utfrrune.c b/src/lib9/utf/utfrrune.c
deleted file mode 100644 (file)
index b1ea93b..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * The authors of this software are Rob Pike and Ken Thompson.
- *              Copyright (c) 2002 by Lucent Technologies.
- * Permission to use, copy, modify, and distribute this software for any
- * purpose without fee is hereby granted, provided that this entire notice
- * is included in all copies of any software which is or includes a copy
- * or modification of this software and in all copies of the supporting
- * documentation for such software.
- * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED
- * WARRANTY.  IN PARTICULAR, NEITHER THE AUTHORS NOR LUCENT TECHNOLOGIES MAKE ANY
- * REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY
- * OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE.
- */
-#include <u.h>
-#include <libc.h>
-#include "utf.h"
-#include "utfdef.h"
-
-/* const - removed for go code */
-char*
-utfrrune(const char *s, Rune c)
-{
-       long c1;
-       Rune r;
-       const char *s1;
-
-       if(c < Runesync)                /* not part of utf sequence */
-               return strrchr(s, (char)c);
-
-       s1 = 0;
-       for(;;) {
-               c1 = *(uchar*)s;
-               if(c1 < Runeself) {     /* one byte rune */
-                       if(c1 == 0)
-                               return (char*)s1;
-                       if(c1 == c)
-                               s1 = s;
-                       s++;
-                       continue;
-               }
-               c1 = chartorune(&r, s);
-               if(r == c)
-                       s1 = s;
-               s += c1;
-       }
-}
diff --git a/src/lib9/utf/utfrune.c b/src/lib9/utf/utfrune.c
deleted file mode 100644 (file)
index 44675c9..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * The authors of this software are Rob Pike and Ken Thompson.
- *              Copyright (c) 2002 by Lucent Technologies.
- * Permission to use, copy, modify, and distribute this software for any
- * purpose without fee is hereby granted, provided that this entire notice
- * is included in all copies of any software which is or includes a copy
- * or modification of this software and in all copies of the supporting
- * documentation for such software.
- * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED
- * WARRANTY.  IN PARTICULAR, NEITHER THE AUTHORS NOR LUCENT TECHNOLOGIES MAKE ANY
- * REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY
- * OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE.
- */
-#include <u.h>
-#include <libc.h>
-#include "utf.h"
-#include "utfdef.h"
-
-/* const - removed for go code */
-char*
-utfrune(const char *s, Rune c)
-{
-       long c1;
-       Rune r;
-       int n;
-
-       if(c < Runesync)                /* not part of utf sequence */
-               return strchr(s, (char)c);
-
-       for(;;) {
-               c1 = *(uchar*)s;
-               if(c1 < Runeself) {     /* one byte rune */
-                       if(c1 == 0)
-                               return 0;
-                       if(c1 == c)
-                               return (char*)s;
-                       s++;
-                       continue;
-               }
-               n = chartorune(&r, s);
-               if(r == c)
-                       return (char*)s;
-               s += n;
-       }
-}
diff --git a/src/lib9/utf/utfutf.c b/src/lib9/utf/utfutf.c
deleted file mode 100644 (file)
index 05335b2..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * The authors of this software are Rob Pike and Ken Thompson.
- *              Copyright (c) 2002 by Lucent Technologies.
- * Permission to use, copy, modify, and distribute this software for any
- * purpose without fee is hereby granted, provided that this entire notice
- * is included in all copies of any software which is or includes a copy
- * or modification of this software and in all copies of the supporting
- * documentation for such software.
- * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED
- * WARRANTY.  IN PARTICULAR, NEITHER THE AUTHORS NOR LUCENT TECHNOLOGIES MAKE ANY
- * REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY
- * OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE.
- */
-#include <u.h>
-#include <libc.h>
-#include "utf.h"
-#include "utfdef.h"
-
-
-/*
- * Return pointer to first occurrence of s2 in s1,
- * 0 if none
- */
-const
-char*
-utfutf(const char *s1, const char *s2)
-{
-       const char *p;
-       long f, n1;
-       size_t n2;
-       Rune r;
-
-       n1 = chartorune(&r, s2);
-       f = r;
-       if(f <= Runesync)               /* represents self */
-               return strstr(s1, s2);
-
-       n2 = strlen(s2);
-       for(p=s1; (p=utfrune(p, r)) != 0; p+=n1)
-               if(strncmp(p, s2, n2) == 0)
-                       return p;
-       return 0;
-}
diff --git a/src/lib9/win.h b/src/lib9/win.h
deleted file mode 100644 (file)
index d9df319..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-// Copyright 2013 The Go Authors.  All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-typedef unsigned short WinRune;
-
-WinRune* torune(char*);
-char *toutf(WinRune*);
diff --git a/src/lib9/windows.c b/src/lib9/windows.c
deleted file mode 100644 (file)
index 082f339..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-// Copyright 2009 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-#include <u.h>
-#include <libc.h>
-
-int
-fork(void)
-{
-       return -1;
-}
-
-int
-p9rfork(int flags)
-{
-       USED(flags);
-       return -1;
-}
-
-Waitmsg*
-p9wait(void)
-{
-       return 0;
-}
-
-int
-p9waitpid(void)
-{
-       return -1;
-}
diff --git a/src/libbio/Makefile b/src/libbio/Makefile
deleted file mode 100644 (file)
index 62aba5d..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-# Copyright 2012 The Go Authors.  All rights reserved.
-# Use of this source code is governed by a BSD-style
-# license that can be found in the LICENSE file.
-
-include ../Make.dist
diff --git a/src/libbio/bbuffered.c b/src/libbio/bbuffered.c
deleted file mode 100644 (file)
index 2ddb29b..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
-http://code.google.com/p/inferno-os/source/browse/libbio/bbuffered.c
-
-       Copyright © 1994-1999 Lucent Technologies Inc.  All rights reserved.
-       Revisions Copyright © 2000-2007 Vita Nuova Holdings Limited (www.vitanuova.com).  All rights reserved.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-*/
-
-#include       <u.h>
-#include       <libc.h>
-#include       <bio.h>
-
-int
-Bbuffered(Biobuf *bp)
-{
-       switch(bp->state) {
-       case Bracteof:
-       case Bractive:
-               return -bp->icount;
-
-       case Bwactive:
-               return bp->bsize + bp->ocount;
-
-       case Binactive:
-               return 0;
-       }
-       fprint(2, "Bbuffered: unknown state %d\n", bp->state);
-       return 0;
-}
diff --git a/src/libbio/bfildes.c b/src/libbio/bfildes.c
deleted file mode 100644 (file)
index aef1f70..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
-http://code.google.com/p/inferno-os/source/browse/libbio/bfildes.c
-
-       Copyright © 1994-1999 Lucent Technologies Inc.  All rights reserved.
-       Revisions Copyright © 2000-2007 Vita Nuova Holdings Limited (www.vitanuova.com).  All rights reserved.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-*/
-
-#include       <u.h>
-#include       <libc.h>
-#include       <bio.h>
-
-int
-Bfildes(Biobuf *bp)
-{
-
-       return bp->fid;
-}
diff --git a/src/libbio/bflush.c b/src/libbio/bflush.c
deleted file mode 100644 (file)
index ea7ae2c..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
-http://code.google.com/p/inferno-os/source/browse/libbio/bflush.c
-
-       Copyright © 1994-1999 Lucent Technologies Inc.  All rights reserved.
-       Revisions Copyright © 2000-2007 Vita Nuova Holdings Limited (www.vitanuova.com).  All rights reserved.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-*/
-
-#include       <u.h>
-#include       <libc.h>
-#include       <bio.h>
-
-int
-Bflush(Biobuf *bp)
-{
-       int n, c;
-
-       switch(bp->state) {
-       case Bwactive:
-               n = bp->bsize+bp->ocount;
-               if(n == 0)
-                       return 0;
-               c = (int)write(bp->fid, bp->bbuf, (size_t)n);
-               if(n == c) {
-                       bp->offset += n;
-                       bp->ocount = -bp->bsize;
-                       return 0;
-               }
-               bp->state = Binactive;
-               bp->ocount = 0;
-               break;
-
-       case Bracteof:
-               bp->state = Bractive;
-
-       case Bractive:
-               bp->icount = 0;
-               bp->gbuf = bp->ebuf;
-               return 0;
-       }
-       return Beof;
-}
diff --git a/src/libbio/bgetc.c b/src/libbio/bgetc.c
deleted file mode 100644 (file)
index ceb5cb1..0000000
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
-http://code.google.com/p/inferno-os/source/browse/libbio/bgetc.c
-
-       Copyright © 1994-1999 Lucent Technologies Inc.  All rights reserved.
-       Revisions Copyright © 2000-2007 Vita Nuova Holdings Limited (www.vitanuova.com).  All rights reserved.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-*/
-
-#include       <u.h>
-#include       <libc.h>
-#include       <bio.h>
-
-int
-Bgetc(Biobuf *bp)
-{
-       int i;
-
-loop:
-       i = bp->icount;
-       if(i != 0) {
-               bp->icount = i+1;
-               return bp->ebuf[i];
-       }
-       if(bp->state != Bractive) {
-               if(bp->state == Bracteof)
-                       bp->state = Bractive;
-               return Beof;
-       }
-       /*
-        * get next buffer, try to keep Bungetsize
-        * characters pre-catenated from the previous
-        * buffer to allow that many ungets.
-        */
-       memmove(bp->bbuf-Bungetsize, bp->ebuf-Bungetsize, Bungetsize);
-       i = (int)read(bp->fid, bp->bbuf, (size_t)bp->bsize);
-       bp->gbuf = bp->bbuf;
-       if(i <= 0) {
-               bp->state = Bracteof;
-               if(i < 0)
-                       bp->state = Binactive;
-               return Beof;
-       }
-       if(i < bp->bsize) {
-               memmove(bp->ebuf-i-Bungetsize, bp->bbuf-Bungetsize, (size_t)(i+Bungetsize));
-               bp->gbuf = bp->ebuf-i;
-       }
-       bp->icount = -i;
-       bp->offset += i;
-       goto loop;
-}
-
-int
-Bgetle2(Biobuf *bp)
-{
-       int l, h;
-
-       l = Bgetc(bp);
-       h = Bgetc(bp);
-       return l|(h<<8);
-}
-
-int
-Bgetle4(Biobuf *bp)
-{
-       int l, h;
-
-       l = Bgetle2(bp);
-       h = Bgetle2(bp);
-       return (int)((uint32)l|((uint32)h<<16));
-}
-
-int
-Bungetc(Biobuf *bp)
-{
-
-       if(bp->state == Bracteof)
-               bp->state = Bractive;
-       if(bp->state != Bractive)
-               return Beof;
-       bp->icount--;
-       return 1;
-}
diff --git a/src/libbio/bgetd.c b/src/libbio/bgetd.c
deleted file mode 100644 (file)
index 12d2c5b..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
-http://code.google.com/p/inferno-os/source/browse/libbio/bgetd.c
-
-       Copyright © 1994-1999 Lucent Technologies Inc.  All rights reserved.
-       Revisions Copyright © 2000-2007 Vita Nuova Holdings Limited (www.vitanuova.com).  All rights reserved.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-*/
-
-#include       <u.h>
-#include       <libc.h>
-#include <bio.h>
-
-struct bgetd
-{
-       Biobuf* b;
-       int             eof;
-};
-
-static int
-Bgetdf(void *vp)
-{
-       int c;
-       struct bgetd *bg = vp;
-
-       c = BGETC(bg->b);
-       if(c == Beof)
-               bg->eof = 1;
-       return c;
-}
-
-int
-Bgetd(Biobuf *bp, double *dp)
-{
-       double d;
-       struct bgetd b;
-
-       b.b = bp;
-       b.eof = 0;
-       d = fmtcharstod(Bgetdf, &b);
-       if(b.eof)
-               return -1;
-       Bungetc(bp);
-       *dp = d;
-       return 1;
-}
diff --git a/src/libbio/bgetrune.c b/src/libbio/bgetrune.c
deleted file mode 100644 (file)
index b5db391..0000000
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
-http://code.google.com/p/inferno-os/source/browse/libbio/bgetrune.c
-
-       Copyright © 1994-1999 Lucent Technologies Inc.  All rights reserved.
-       Revisions Copyright © 2000-2007 Vita Nuova Holdings Limited (www.vitanuova.com).  All rights reserved.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-*/
-
-#include       <u.h>
-#include       <libc.h>
-#include       <bio.h>
-
-long
-Bgetrune(Biobuf *bp)
-{
-       int c, i;
-       Rune rune;
-       char str[UTFmax];
-
-       c = BGETC(bp);
-       if(c < Runeself) {              /* one char */
-               bp->runesize = 1;
-               return c;
-       }
-       str[0] = (char)c;
-
-       for(i=1;;) {
-               c = BGETC(bp);
-               if(c < 0)
-                       return c;
-               str[i++] = (char)c;
-
-               if(fullrune(str, i)) {
-                       bp->runesize = chartorune(&rune, str);
-                       while(i > bp->runesize) {
-                               Bungetc(bp);
-                               i--;
-                       }
-                       return rune;
-               }
-       }
-}
-
-int
-Bungetrune(Biobuf *bp)
-{
-
-       if(bp->state == Bracteof)
-               bp->state = Bractive;
-       if(bp->state != Bractive)
-               return Beof;
-       bp->icount -= bp->runesize;
-       bp->runesize = 0;
-       return 1;
-}
diff --git a/src/libbio/binit.c b/src/libbio/binit.c
deleted file mode 100644 (file)
index a7ade50..0000000
+++ /dev/null
@@ -1,179 +0,0 @@
-/*
-http://code.google.com/p/inferno-os/source/browse/libbio/binit.c
-
-       Copyright © 1994-1999 Lucent Technologies Inc.  All rights reserved.
-       Revisions Copyright © 2000-2007 Vita Nuova Holdings Limited (www.vitanuova.com).  All rights reserved.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-*/
-
-#include       <u.h>
-#include       <libc.h>
-#include       <bio.h>
-
-enum
-{
-       MAXBUFS = 20
-};
-
-static Biobuf* wbufs[MAXBUFS];
-static int             atexitflag;
-
-static
-void
-batexit(void)
-{
-       Biobuf *bp;
-       int i;
-
-       for(i=0; i<MAXBUFS; i++) {
-               bp = wbufs[i];
-               if(bp != 0) {
-                       wbufs[i] = 0;
-                       Bflush(bp);
-               }
-       }
-}
-
-static
-void
-deinstall(Biobuf *bp)
-{
-       int i;
-
-       for(i=0; i<MAXBUFS; i++)
-               if(wbufs[i] == bp)
-                       wbufs[i] = 0;
-}
-
-static
-void
-install(Biobuf *bp)
-{
-       int i;
-
-       deinstall(bp);
-       for(i=0; i<MAXBUFS; i++)
-               if(wbufs[i] == 0) {
-                       wbufs[i] = bp;
-                       break;
-               }
-       if(atexitflag == 0) {
-               atexitflag = 1;
-               atexit(batexit);
-       }
-}
-
-int
-Binits(Biobuf *bp, int f, int mode, unsigned char *p, int size)
-{
-
-       p += Bungetsize;        /* make room for Bungets */
-       size -= Bungetsize;
-
-       switch(mode&~(ORCLOSE|OTRUNC)) {
-       default:
-               fprint(2, "Bopen: unknown mode %d\n", mode);
-               return Beof;
-
-       case OREAD:
-               bp->state = Bractive;
-               bp->ocount = 0;
-               break;
-
-       case OWRITE:
-               install(bp);
-               bp->state = Bwactive;
-               bp->ocount = -size;
-               break;
-       }
-       bp->bbuf = p;
-       bp->ebuf = p+size;
-       bp->bsize = size;
-       bp->icount = 0;
-       bp->gbuf = bp->ebuf;
-       bp->fid = f;
-       bp->flag = 0;
-       bp->rdline = 0;
-       bp->offset = 0;
-       bp->runesize = 0;
-       return 0;
-}
-
-
-int
-Binit(Biobuf *bp, int f, int mode)
-{
-       return Binits(bp, f, mode, bp->b, sizeof(bp->b));
-}
-
-Biobuf*
-Bfdopen(int f, int mode)
-{
-       Biobuf *bp;
-
-       bp = malloc(sizeof(Biobuf));
-       if(bp == 0)
-               return 0;
-       Binits(bp, f, mode, bp->b, sizeof(bp->b));
-       bp->flag = Bmagic;
-       return bp;
-}
-
-Biobuf*
-Bopen(char *name, int mode)
-{
-       Biobuf *bp;
-       int f;
-
-       switch(mode&~(ORCLOSE|OTRUNC)) {
-       default:
-               fprint(2, "Bopen: unknown mode %d\n", mode);
-               return 0;
-
-       case OREAD:
-               f = open(name, OREAD);
-               if(f < 0)
-                       return 0;
-               break;
-
-       case OWRITE:
-               f = create(name, OWRITE|OTRUNC, 0666);
-               if(f < 0)
-                       return 0;
-       }
-       bp = Bfdopen(f, mode);
-       if(bp == 0)
-               close(f);
-       return bp;
-}
-
-int
-Bterm(Biobuf *bp)
-{
-
-       deinstall(bp);
-       Bflush(bp);
-       if(bp->flag == Bmagic) {
-               bp->flag = 0;
-               close(bp->fid);
-               free(bp);
-       }
-       return 0;
-}
diff --git a/src/libbio/boffset.c b/src/libbio/boffset.c
deleted file mode 100644 (file)
index 15dd609..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
-http://code.google.com/p/inferno-os/source/browse/libbio/boffset.c
-
-       Copyright © 1994-1999 Lucent Technologies Inc.  All rights reserved.
-       Revisions Copyright © 2000-2007 Vita Nuova Holdings Limited (www.vitanuova.com).  All rights reserved.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-*/
-
-#include       <u.h>
-#include       <libc.h>
-#include       <bio.h>
-
-vlong
-Boffset(Biobuf *bp)
-{
-       vlong n;
-
-       switch(bp->state) {
-       default:
-               fprint(2, "Boffset: unknown state %d\n", bp->state);
-               n = Beof;
-               break;
-
-       case Bracteof:
-       case Bractive:
-               n = bp->offset + bp->icount;
-               break;
-
-       case Bwactive:
-               n = bp->offset + (bp->bsize + bp->ocount);
-               break;
-       }
-       return n;
-}
diff --git a/src/libbio/bprint.c b/src/libbio/bprint.c
deleted file mode 100644 (file)
index 301dc0c..0000000
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
-http://code.google.com/p/inferno-os/source/browse/libbio/bprint.c
-
-       Copyright © 1994-1999 Lucent Technologies Inc.  All rights reserved.
-       Revisions Copyright © 2000-2007 Vita Nuova Holdings Limited (www.vitanuova.com).  All rights reserved.
-       Revisions Copyright © 2010 Google Inc.  All rights reserved.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-*/
-
-#include       <u.h>
-#include       <libc.h>
-#include       <bio.h>
-
-int
-Bprint(Biobuf *bp, char *fmt, ...)
-{
-       int n;
-       va_list arg;
-
-       va_start(arg, fmt);
-       n = Bvprint(bp, fmt, arg);
-       va_end(arg);
-       return n;
-}
-
-static int
-bflush(Fmt *f)
-{
-       Biobuf *bp;
-       
-       if(f->stop == nil)
-               return 0;
-
-       bp = f->farg;
-       bp->ocount = (int)((char*)f->to - (char*)f->stop);
-       if(Bflush(bp) < 0) {
-               f->stop = nil;
-               f->to = nil;
-               return 0;
-       }
-       f->to = (char*)f->stop + bp->ocount;
-       
-       return 1;
-}
-
-int
-Bvprint(Biobuf *bp, char *fmt, va_list arg)
-{
-       int n;
-       Fmt f;
-       
-       memset(&f, 0, sizeof f);
-       fmtlocaleinit(&f, nil, nil, nil);
-       f.stop = bp->ebuf;
-       f.to = (char*)f.stop + bp->ocount;
-       f.flush = bflush;
-       f.farg = bp;
-
-       n = fmtvprint(&f, fmt, arg);
-
-       if(f.stop != nil)
-               bp->ocount = (int)((char*)f.to - (char*)f.stop);
-
-       return n;
-}
diff --git a/src/libbio/bputc.c b/src/libbio/bputc.c
deleted file mode 100644 (file)
index 07b4789..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
-http://code.google.com/p/inferno-os/source/browse/libbio/bputc.c
-
-       Copyright © 1994-1999 Lucent Technologies Inc.  All rights reserved.
-       Revisions Copyright © 2000-2007 Vita Nuova Holdings Limited (www.vitanuova.com).  All rights reserved.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-*/
-
-#include       <u.h>
-#include       <libc.h>
-#include       <bio.h>
-
-int
-Bputc(Biobuf *bp, int c)
-{
-       int i;
-
-       for(;;) {
-               i = bp->ocount;
-               if(i) {
-                       bp->ebuf[i++] = (unsigned char)c;
-                       bp->ocount = i;
-                       return 0;
-               }
-               if(Bflush(bp) == Beof)
-                       break;
-       }
-       return Beof;
-}
-
-int
-Bputle2(Biobuf *bp, int c)
-{
-       Bputc(bp, c);
-       return Bputc(bp, c>>8);
-}
-
-int
-Bputle4(Biobuf *bp, int c)
-{
-       Bputle2(bp, c);
-       return Bputle2(bp, c>>16);
-}
diff --git a/src/libbio/bputrune.c b/src/libbio/bputrune.c
deleted file mode 100644 (file)
index f207795..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
-http://code.google.com/p/inferno-os/source/browse/libbio/bputrune.c
-
-       Copyright © 1994-1999 Lucent Technologies Inc.  All rights reserved.
-       Revisions Copyright © 2000-2007 Vita Nuova Holdings Limited (www.vitanuova.com).  All rights reserved.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-*/
-
-#include       <u.h>
-#include       <libc.h>
-#include       <bio.h>
-
-int
-Bputrune(Biobuf *bp, long c)
-{
-       Rune rune;
-       char str[UTFmax];
-       int n;
-
-       rune = (Rune)c;
-       if(rune < Runeself) {
-               n = BPUTC(bp, (int)rune);
-               USED(n);
-               return 1;
-       }
-       n = runetochar(str, &rune);
-       if(n == 0)
-               return Bbad;
-       if(Bwrite(bp, str, n) != n)
-               return Beof;
-       return n;
-}
diff --git a/src/libbio/brdline.c b/src/libbio/brdline.c
deleted file mode 100644 (file)
index 1c3093e..0000000
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
-http://code.google.com/p/inferno-os/source/browse/libbio/brdline.c
-
-       Copyright © 1994-1999 Lucent Technologies Inc.  All rights reserved.
-       Revisions Copyright © 2000-2007 Vita Nuova Holdings Limited (www.vitanuova.com).  All rights reserved.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-*/
-
-#include       <u.h>
-#include       <libc.h>
-#include       <bio.h>
-
-void*
-Brdline(Biobuf *bp, int delim)
-{
-       char *ip, *ep;
-       int i, j;
-
-       i = -bp->icount;
-       if(i == 0) {
-               /*
-                * eof or other error
-                */
-               if(bp->state != Bractive) {
-                       if(bp->state == Bracteof)
-                               bp->state = Bractive;
-                       bp->rdline = 0;
-                       bp->gbuf = bp->ebuf;
-                       return 0;
-               }
-       }
-
-       /*
-        * first try in remainder of buffer (gbuf doesn't change)
-        */
-       ip = (char*)bp->ebuf - i;
-       ep = memchr(ip, delim, (size_t)i);
-       if(ep) {
-               j = (int)((ep - ip) + 1);
-               bp->rdline = j;
-               bp->icount += j;
-               return ip;
-       }
-
-       /*
-        * copy data to beginning of buffer
-        */
-       if(i < bp->bsize)
-               memmove(bp->bbuf, ip, (size_t)i);
-       bp->gbuf = bp->bbuf;
-
-       /*
-        * append to buffer looking for the delim
-        */
-       ip = (char*)bp->bbuf + i;
-       while(i < bp->bsize) {
-               j = (int)read(bp->fid, ip, (size_t)(bp->bsize-i));
-               if(j <= 0) {
-                       /*
-                        * end of file with no delim
-                        */
-                       memmove(bp->ebuf-i, bp->bbuf, (size_t)i);
-                       bp->rdline = i;
-                       bp->icount = -i;
-                       bp->gbuf = bp->ebuf-i;
-                       return 0;
-               }
-               bp->offset += j;
-               i += j;
-               ep = memchr(ip, delim, (size_t)j);
-               if(ep) {
-                       /*
-                        * found in new piece
-                        * copy back up and reset everything
-                        */
-                       ip = (char*)bp->ebuf - i;
-                       if(i < bp->bsize){
-                               memmove(ip, bp->bbuf, (size_t)i);
-                               bp->gbuf = (unsigned char*)ip;
-                       }
-                       j = (int)((ep - (char*)bp->bbuf) + 1);
-                       bp->rdline = j;
-                       bp->icount = j - i;
-                       return ip;
-               }
-               ip += j;
-       }
-
-       /*
-        * full buffer without finding
-        */
-       bp->rdline = bp->bsize;
-       bp->icount = -bp->bsize;
-       bp->gbuf = bp->bbuf;
-       return 0;
-}
-
-int
-Blinelen(Biobuf *bp)
-{
-
-       return bp->rdline;
-}
diff --git a/src/libbio/brdstr.c b/src/libbio/brdstr.c
deleted file mode 100644 (file)
index 6a90cf6..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
-       Copyright © 2009 The Go Authors.  All rights reserved.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-*/
-
-#include       <u.h>
-#include       <libc.h>
-#include       <bio.h>
-
-char*
-Brdstr(Biobuf *bp, int delim, int nulldelim)
-{
-       char *p, *q, *nq;
-       int n, linelen;
-
-       q = nil;
-       n = 0;
-       for(;;) {
-               p = Brdline(bp, delim);
-               linelen = Blinelen(bp);
-               if(n == 0 && linelen == 0)
-                       return nil;
-               nq = realloc(q, (size_t)(n+linelen+1));
-               if(nq == nil) {
-                       free(q);
-                       return nil;
-               }
-               q = nq;
-               if(p != nil) {
-                       memmove(q+n, p, (size_t)linelen);
-                       n += linelen;
-                       if(nulldelim)
-                               q[n-1] = '\0';
-                       break;
-               }
-               if(linelen == 0)
-                       break;
-               Bread(bp, q+n, linelen);
-               n += linelen;
-       }
-       q[n] = '\0';
-       return q;
-}
diff --git a/src/libbio/bread.c b/src/libbio/bread.c
deleted file mode 100644 (file)
index 343a0bf..0000000
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
-http://code.google.com/p/inferno-os/source/browse/libbio/bread.c
-
-       Copyright © 1994-1999 Lucent Technologies Inc.  All rights reserved.
-       Revisions Copyright © 2000-2007 Vita Nuova Holdings Limited (www.vitanuova.com).  All rights reserved.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-*/
-
-#include       <u.h>
-#include       <libc.h>
-#include       <bio.h>
-
-long
-Bread(Biobuf *bp, void *ap, long count)
-{
-       long c;
-       unsigned char *p;
-       int i, n, ic;
-
-       p = ap;
-       c = count;
-       ic = bp->icount;
-
-       while(c > 0) {
-               n = -ic;
-               if(n > c)
-                       n = (int)c;
-               if(n == 0) {
-                       if(bp->state != Bractive)
-                               break;
-                       i = (int)read(bp->fid, bp->bbuf, (size_t)bp->bsize);
-                       if(i <= 0) {
-                               bp->state = Bracteof;
-                               if(i < 0)
-                                       bp->state = Binactive;
-                               break;
-                       }
-                       bp->gbuf = bp->bbuf;
-                       bp->offset += i;
-                       if(i < bp->bsize) {
-                               memmove(bp->ebuf-i, bp->bbuf, (size_t)i);
-                               bp->gbuf = bp->ebuf-i;
-                       }
-                       ic = -i;
-                       continue;
-               }
-               memmove(p, bp->ebuf+ic, (size_t)n);
-               c -= n;
-               ic += n;
-               p += n;
-       }
-       bp->icount = ic;
-       return count-c;
-}
diff --git a/src/libbio/bseek.c b/src/libbio/bseek.c
deleted file mode 100644 (file)
index 5289585..0000000
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
-http://code.google.com/p/inferno-os/source/browse/libbio/bseek.c
-
-       Copyright © 1994-1999 Lucent Technologies Inc.  All rights reserved.
-       Revisions Copyright © 2000-2007 Vita Nuova Holdings Limited (www.vitanuova.com).  All rights reserved.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-*/
-
-#include       <u.h>
-#include       <libc.h>
-#include       <bio.h>
-
-vlong
-Bseek(Biobuf *bp, vlong offset, int base)
-{
-       vlong n, d;
-       int bufsz;
-
-#if !defined(_WIN32) && !defined(PLAN9)
-       if(sizeof(offset) != sizeof(off_t)) {
-               fprint(2, "Bseek: libbio compiled with %d-byte offset\n", sizeof(off_t));
-               abort();
-       }
-#endif
-
-       switch(bp->state) {
-       default:
-               fprint(2, "Bseek: unknown state %d\n", bp->state);
-               return Beof;
-
-       case Bracteof:
-               bp->state = Bractive;
-               bp->icount = 0;
-               bp->gbuf = bp->ebuf;
-
-       case Bractive:
-               n = offset;
-               if(base == 1) {
-                       n += Boffset(bp);
-                       base = 0;
-               }
-
-               /*
-                * try to seek within buffer
-                */
-               if(base == 0) {
-                       d = n - Boffset(bp);
-                       bufsz = (int)(bp->ebuf - bp->gbuf);
-                       if(-bufsz <= d && d <= bufsz){
-                               bp->icount += (int)d;
-                               if(d >= 0) {
-                                       if(bp->icount <= 0)
-                                               return n;
-                               } else {
-                                       if(bp->ebuf - bp->gbuf >= -bp->icount)
-                                               return n;
-                               }
-                       }
-               }
-
-               /*
-                * reset the buffer
-                */
-               n = lseek(bp->fid, n, base);
-               bp->icount = 0;
-               bp->gbuf = bp->ebuf;
-               break;
-
-       case Bwactive:
-               Bflush(bp);
-               n = lseek(bp->fid, offset, base);
-               break;
-       }
-       bp->offset = n;
-       return n;
-}
diff --git a/src/libbio/bwrite.c b/src/libbio/bwrite.c
deleted file mode 100644 (file)
index 8b9943a..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
-http://code.google.com/p/inferno-os/source/browse/libbio/bwrite.c
-
-       Copyright © 1994-1999 Lucent Technologies Inc.  All rights reserved.
-       Revisions Copyright © 2000-2007 Vita Nuova Holdings Limited (www.vitanuova.com).  All rights reserved.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-*/
-
-#include       <u.h>
-#include       <libc.h>
-#include       <bio.h>
-
-long
-Bwrite(Biobuf *bp, void *ap, long count)
-{
-       long c;
-       unsigned char *p;
-       int i, n, oc;
-
-       p = ap;
-       c = count;
-       oc = bp->ocount;
-
-       while(c > 0) {
-               n = -oc;
-               if(n > c)
-                       n = (int)c;
-               if(n == 0) {
-                       if(bp->state != Bwactive)
-                               return Beof;
-                       i = (int)write(bp->fid, bp->bbuf, (size_t)bp->bsize);
-                       if(i != bp->bsize) {
-                               bp->state = Binactive;
-                               return Beof;
-                       }
-                       bp->offset += i;
-                       oc = -bp->bsize;
-                       continue;
-               }
-               memmove(bp->ebuf+oc, p, (size_t)n);
-               oc += n;
-               c -= n;
-               p += n;
-       }
-       bp->ocount = oc;
-       return count-c;
-}
diff --git a/src/liblink/Makefile b/src/liblink/Makefile
deleted file mode 100644 (file)
index 2a31746..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-# Copyright 2013 The Go Authors.  All rights reserved.
-# Use of this source code is governed by a BSD-style
-# license that can be found in the LICENSE file.
-
-include ../Make.dist
diff --git a/src/liblink/arch.c b/src/liblink/arch.c
deleted file mode 100644 (file)
index 2e425a6..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-// Copyright 2015 The Go Authors.  All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-#include <u.h>
-#include <libc.h>
-#include <bio.h>
-#include <link.h>
-
-LinkArch linkarm = {
-       .name = "arm",
-       .thechar = '5',
-       .endian = LittleEndian,
-
-       .minlc = 4,
-       .ptrsize = 4,
-       .regsize = 4,
-};
-
-LinkArch linkamd64 = {
-       .name = "amd64",
-       .thechar = '6',
-       .endian = LittleEndian,
-
-       .minlc = 1,
-       .ptrsize = 8,
-       .regsize = 8,
-};
-
-LinkArch linkamd64p32 = {
-       .name = "amd64p32",
-       .thechar = '6',
-       .endian = LittleEndian,
-
-       .minlc = 1,
-       .ptrsize = 4,
-       .regsize = 8,
-};
-
-LinkArch link386 = {
-       .name = "386",
-       .thechar = '8',
-       .endian = LittleEndian,
-
-       .minlc = 1,
-       .ptrsize = 4,
-       .regsize = 4,
-};
-
-LinkArch linkppc64 = {
-       .name = "ppc64",
-       .thechar = '9',
-       .endian = BigEndian,
-
-       .minlc = 4,
-       .ptrsize = 8,
-       .regsize = 8,
-};
-
-LinkArch linkppc64le = {
-       .name = "ppc64le",
-       .thechar = '9',
-       .endian = LittleEndian,
-
-       .minlc = 4,
-       .ptrsize = 8,
-       .regsize = 8,
-};
diff --git a/src/liblink/data.c b/src/liblink/data.c
deleted file mode 100644 (file)
index 06fe7e0..0000000
+++ /dev/null
@@ -1,283 +0,0 @@
-// Derived from Inferno utils/6l/obj.c and utils/6l/span.c
-// http://code.google.com/p/inferno-os/source/browse/utils/6l/obj.c
-// http://code.google.com/p/inferno-os/source/browse/utils/6l/span.c
-//
-//     Copyright © 1994-1999 Lucent Technologies Inc.  All rights reserved.
-//     Portions Copyright © 1995-1997 C H Forsyth (forsyth@terzarima.net)
-//     Portions Copyright © 1997-1999 Vita Nuova Limited
-//     Portions Copyright © 2000-2007 Vita Nuova Holdings Limited (www.vitanuova.com)
-//     Portions Copyright © 2004,2006 Bruce Ellis
-//     Portions Copyright © 2005-2007 C H Forsyth (forsyth@terzarima.net)
-//     Revisions Copyright © 2000-2007 Lucent Technologies Inc. and others
-//     Portions Copyright © 2009 The Go Authors.  All rights reserved.
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-#include <u.h>
-#include <libc.h>
-#include <bio.h>
-#include <link.h>
-
-
-void
-symgrow(Link *ctxt, LSym *s, vlong lsiz)
-{
-       int32 siz;
-
-       USED(ctxt);
-
-       siz = (int32)lsiz;
-       if((vlong)siz != lsiz)
-               sysfatal("symgrow size %lld too long", lsiz);
-
-       if(s->np >= siz)
-               return;
-
-       if(s->np > s->maxp) {
-               ctxt->cursym = s;
-               sysfatal("corrupt symbol data: np=%lld > maxp=%lld", (vlong)s->np, (vlong)s->maxp);
-       }
-
-       if(s->maxp < siz) {
-               if(s->maxp == 0)
-                       s->maxp = 8;
-               while(s->maxp < siz)
-                       s->maxp <<= 1;
-               s->p = erealloc(s->p, s->maxp);
-               memset(s->p+s->np, 0, s->maxp-s->np);
-       }
-       s->np = siz;
-}
-
-
-Reloc*
-addrel(LSym *s)
-{
-       if(s->nr >= s->maxr) {
-               if(s->maxr == 0)
-                       s->maxr = 4;
-               else
-                       s->maxr <<= 1;
-               s->r = erealloc(s->r, s->maxr*sizeof s->r[0]);
-               memset(s->r+s->nr, 0, (s->maxr-s->nr)*sizeof s->r[0]);
-       }
-       return &s->r[s->nr++];
-}
-
-vlong
-setuintxx(Link *ctxt, LSym *s, vlong off, uint64 v, vlong wid)
-{
-       int32 i, fl;
-       vlong o;
-       uchar *cast;
-
-       if(s->type == 0)
-               s->type = SDATA;
-       s->reachable = 1;
-       if(s->size < off+wid) {
-               s->size = off+wid;
-               symgrow(ctxt, s, s->size);
-       }
-       fl = v;
-       cast = (uchar*)&fl;
-       switch(wid) {
-       case 1:
-               s->p[off] = cast[inuxi1[0]];
-               break;
-       case 2:
-               for(i=0; i<2; i++)
-                       s->p[off+i] = cast[inuxi2[i]];
-               break;
-       case 4:
-               for(i=0; i<4; i++)
-                       s->p[off+i] = cast[inuxi4[i]];
-               break;
-       case 8:
-               o = v;
-               cast = (uchar*)&o;
-               for(i=0; i<8; i++)
-                       s->p[off+i] = cast[inuxi8[i]];
-               break;
-       }
-       return off+wid;
-}
-
-vlong
-adduintxx(Link *ctxt, LSym *s, uint64 v, int wid)
-{
-       vlong off;
-
-       off = s->size;
-       setuintxx(ctxt, s, off, v, wid);
-       return off;
-}
-
-vlong
-adduint8(Link *ctxt, LSym *s, uint8 v)
-{
-       return adduintxx(ctxt, s, v, 1);
-}
-
-vlong
-adduint16(Link *ctxt, LSym *s, uint16 v)
-{
-       return adduintxx(ctxt, s, v, 2);
-}
-
-vlong
-adduint32(Link *ctxt, LSym *s, uint32 v)
-{
-       return adduintxx(ctxt, s, v, 4);
-}
-
-vlong
-adduint64(Link *ctxt, LSym *s, uint64 v)
-{
-       return adduintxx(ctxt, s, v, 8);
-}
-
-vlong
-setuint8(Link *ctxt, LSym *s, vlong r, uint8 v)
-{
-       return setuintxx(ctxt, s, r, v, 1);
-}
-
-
-vlong
-setuint32(Link *ctxt, LSym *s, vlong r, uint32 v)
-{
-       return setuintxx(ctxt, s, r, v, 4);
-}
-
-
-vlong
-addaddrplus(Link *ctxt, LSym *s, LSym *t, vlong add)
-{
-       vlong i;
-       Reloc *r;
-
-       if(s->type == 0)
-               s->type = SDATA;
-       s->reachable = 1;
-       i = s->size;
-       s->size += ctxt->arch->ptrsize;
-       symgrow(ctxt, s, s->size);
-       r = addrel(s);
-       r->sym = t;
-       r->off = i;
-       r->siz = ctxt->arch->ptrsize;
-       r->type = R_ADDR;
-       r->add = add;
-       return i + r->siz;
-}
-
-vlong
-addpcrelplus(Link *ctxt, LSym *s, LSym *t, vlong add)
-{
-       vlong i;
-       Reloc *r;
-
-       if(s->type == 0)
-               s->type = SDATA;
-       s->reachable = 1;
-       i = s->size;
-       s->size += 4;
-       symgrow(ctxt, s, s->size);
-       r = addrel(s);
-       r->sym = t;
-       r->off = i;
-       r->add = add;
-       r->type = R_PCREL;
-       r->siz = 4;
-       return i + r->siz;
-}
-
-vlong
-addaddr(Link *ctxt, LSym *s, LSym *t)
-{
-       return addaddrplus(ctxt, s, t, 0);
-}
-
-vlong
-setaddrplus(Link *ctxt, LSym *s, vlong off, LSym *t, vlong add)
-{
-       Reloc *r;
-
-       if(s->type == 0)
-               s->type = SDATA;
-       s->reachable = 1;
-       if(off+ctxt->arch->ptrsize > s->size) {
-               s->size = off + ctxt->arch->ptrsize;
-               symgrow(ctxt, s, s->size);
-       }
-       r = addrel(s);
-       r->sym = t;
-       r->off = off;
-       r->siz = ctxt->arch->ptrsize;
-       r->type = R_ADDR;
-       r->add = add;
-       return off + r->siz;
-}
-
-vlong
-setaddr(Link *ctxt, LSym *s, vlong off, LSym *t)
-{
-       return setaddrplus(ctxt, s, off, t, 0);
-}
-
-vlong
-addsize(Link *ctxt, LSym *s, LSym *t)
-{
-       vlong i;
-       Reloc *r;
-
-       if(s->type == 0)
-               s->type = SDATA;
-       s->reachable = 1;
-       i = s->size;
-       s->size += ctxt->arch->ptrsize;
-       symgrow(ctxt, s, s->size);
-       r = addrel(s);
-       r->sym = t;
-       r->off = i;
-       r->siz = ctxt->arch->ptrsize;
-       r->type = R_SIZE;
-       return i + r->siz;
-}
-
-vlong
-addaddrplus4(Link *ctxt, LSym *s, LSym *t, vlong add)
-{
-       vlong i;
-       Reloc *r;
-
-       if(s->type == 0)
-               s->type = SDATA;
-       s->reachable = 1;
-       i = s->size;
-       s->size += 4;
-       symgrow(ctxt, s, s->size);
-       r = addrel(s);
-       r->sym = t;
-       r->off = i;
-       r->siz = 4;
-       r->type = R_ADDR;
-       r->add = add;
-       return i + r->siz;
-}
diff --git a/src/liblink/go.c b/src/liblink/go.c
deleted file mode 100644 (file)
index 6dae3f4..0000000
+++ /dev/null
@@ -1,72 +0,0 @@
-// Copyright 2009 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// go-specific code shared across loaders (5l, 6l, 8l).
-
-#include <u.h>
-#include <libc.h>
-#include <bio.h>
-#include <link.h>
-
-// replace all "". with pkg.
-char*
-expandpkg(char *t0, char *pkg)
-{
-       int n;
-       char *p;
-       char *w, *w0, *t;
-
-       n = 0;
-       for(p=t0; (p=strstr(p, "\"\".")) != nil; p+=3)
-               n++;
-
-       if(n == 0)
-               return estrdup(t0);
-
-       w0 = emallocz(strlen(t0) + strlen(pkg)*n);
-       w = w0;
-       for(p=t=t0; (p=strstr(p, "\"\".")) != nil; p=t) {
-               memmove(w, t, p - t);
-               w += p-t;
-               strcpy(w, pkg);
-               w += strlen(pkg);
-               t = p+2;
-       }
-       strcpy(w, t);
-       return w0;
-}
-
-void*
-emallocz(long n)
-{
-       void *p;
-
-       p = malloc(n);
-       if(p == nil)
-               sysfatal("out of memory");
-       memset(p, 0, n);
-       return p;
-}
-
-char*
-estrdup(char *p)
-{
-       p = strdup(p);
-       if(p == nil)
-               sysfatal("out of memory");
-       return p;
-}
-
-void*
-erealloc(void *p, long n)
-{
-       p = realloc(p, n);
-       if(p == nil)
-               sysfatal("out of memory");
-       return p;
-}
-
-
-
-
diff --git a/src/liblink/ld.c b/src/liblink/ld.c
deleted file mode 100644 (file)
index 5dfb4ef..0000000
+++ /dev/null
@@ -1,220 +0,0 @@
-// Derived from Inferno utils/6l/obj.c and utils/6l/span.c
-// http://code.google.com/p/inferno-os/source/browse/utils/6l/obj.c
-// http://code.google.com/p/inferno-os/source/browse/utils/6l/span.c
-//
-//     Copyright © 1994-1999 Lucent Technologies Inc.  All rights reserved.
-//     Portions Copyright © 1995-1997 C H Forsyth (forsyth@terzarima.net)
-//     Portions Copyright © 1997-1999 Vita Nuova Limited
-//     Portions Copyright © 2000-2007 Vita Nuova Holdings Limited (www.vitanuova.com)
-//     Portions Copyright © 2004,2006 Bruce Ellis
-//     Portions Copyright © 2005-2007 C H Forsyth (forsyth@terzarima.net)
-//     Revisions Copyright © 2000-2007 Lucent Technologies Inc. and others
-//     Portions Copyright © 2009 The Go Authors.  All rights reserved.
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-#include <u.h>
-#include <libc.h>
-#include <bio.h>
-#include <link.h>
-
-void
-addlib(Link *ctxt, char *src, char *obj, char *pathname)
-{
-       char name[1024], pname[1024], *p;
-       int i;
-
-       if(strlen(pathname) >= sizeof name)
-               sysfatal("addlib pathname too long");
-       strcpy(name, pathname);
-       cleanname(name);
-       
-       // runtime.a -> runtime
-       p = nil;
-       if(strlen(name) > 2 && name[strlen(name)-2] == '.') {
-               p = name+strlen(name)-2;
-               *p = '\0';
-       }
-       
-       // already loaded?
-       for(i=0; i<ctxt->libraryp; i++)
-               if(strcmp(ctxt->library[i].pkg, name) == 0)
-                       return;
-       
-       // runtime -> runtime.a for search
-       if(p != nil)
-               *p = '.';
-
-       if((!ctxt->windows && name[0] == '/') || (ctxt->windows && name[1] == ':'))
-               snprint(pname, sizeof pname, "%s", name);
-       else {
-               // try dot, -L "libdir", and then goroot.
-               for(i=0; i<ctxt->nlibdir; i++) {
-                       snprint(pname, sizeof pname, "%s/%s", ctxt->libdir[i], name);
-                       if(access(pname, AEXIST) >= 0)
-                               break;
-               }
-       }
-       cleanname(pname);
-
-       /* runtime.a -> runtime */
-       if(p != nil)
-               *p = '\0';
-
-       if(ctxt->debugvlog > 1 && ctxt->bso)
-               Bprint(ctxt->bso, "%5.2f addlib: %s %s pulls in %s\n", cputime(), obj, src, pname);
-
-       addlibpath(ctxt, src, obj, pname, name);
-}
-
-/*
- * add library to library list.
- *     srcref: src file referring to package
- *     objref: object file referring to package
- *     file: object file, e.g., /home/rsc/go/pkg/container/vector.a
- *     pkg: package import path, e.g. container/vector
- */
-void
-addlibpath(Link *ctxt, char *srcref, char *objref, char *file, char *pkg)
-{
-       int i;
-       Library *l;
-
-       for(i=0; i<ctxt->libraryp; i++)
-               if(strcmp(file, ctxt->library[i].file) == 0)
-                       return;
-
-       if(ctxt->debugvlog > 1 && ctxt->bso)
-               Bprint(ctxt->bso, "%5.2f addlibpath: srcref: %s objref: %s file: %s pkg: %s\n",
-                       cputime(), srcref, objref, file, pkg);
-
-       if(ctxt->libraryp == ctxt->nlibrary){
-               ctxt->nlibrary = 50 + 2*ctxt->libraryp;
-               ctxt->library = erealloc(ctxt->library, sizeof ctxt->library[0] * ctxt->nlibrary);
-       }
-
-       l = &ctxt->library[ctxt->libraryp++];
-       l->objref = estrdup(objref);
-       l->srcref = estrdup(srcref);
-       l->file = estrdup(file);
-       l->pkg = estrdup(pkg);
-}
-
-int
-find1(int32 l, int c)
-{
-       char *p;
-       int i;
-
-       p = (char*)&l;
-       for(i=0; i<4; i++)
-               if(*p++ == c)
-                       return i;
-       return 0;
-}
-
-void
-nuxiinit(LinkArch *arch)
-{
-       int i, c;
-
-       if(arch->endian != BigEndian && arch->endian != LittleEndian)
-               sysfatal("unknown endian (%#x) for arch %s", arch->endian, arch->name);
-
-       for(i=0; i<4; i++) {
-               c = find1(arch->endian, i+1);
-               if(arch->endian == LittleEndian) {
-                       if(i < 2)
-                               inuxi2[i] = c;
-                       if(i < 1)
-                               inuxi1[i] = c;
-               } else {
-                       if(i >= 2)
-                               inuxi2[i-2] = c;
-                       if(i >= 3)
-                               inuxi1[i-3] = c;
-               }
-               inuxi4[i] = c;
-               if(c == i) {
-                       inuxi8[i] = c;
-                       inuxi8[i+4] = c+4;
-               } else {
-                       inuxi8[i] = c+4;
-                       inuxi8[i+4] = c;
-               }
-               fnuxi4[i] = c;
-               if(c == i) {
-                       fnuxi8[i] = c;
-                       fnuxi8[i+4] = c+4;
-               } else {
-                       fnuxi8[i] = c+4;
-                       fnuxi8[i+4] = c;
-               }
-       }
-}
-
-uchar  fnuxi8[8];
-uchar  fnuxi4[4];
-uchar  inuxi1[1];
-uchar  inuxi2[2];
-uchar  inuxi4[4];
-uchar  inuxi8[8];
-
-
-
-
-vlong
-atolwhex(char *s)
-{
-       vlong n;
-       int f;
-
-       n = 0;
-       f = 0;
-       while(*s == ' ' || *s == '\t')
-               s++;
-       if(*s == '-' || *s == '+') {
-               if(*s++ == '-')
-                       f = 1;
-               while(*s == ' ' || *s == '\t')
-                       s++;
-       }
-       if(s[0]=='0' && s[1]){
-               if(s[1]=='x' || s[1]=='X'){
-                       s += 2;
-                       for(;;){
-                               if(*s >= '0' && *s <= '9')
-                                       n = n*16 + *s++ - '0';
-                               else if(*s >= 'a' && *s <= 'f')
-                                       n = n*16 + *s++ - 'a' + 10;
-                               else if(*s >= 'A' && *s <= 'F')
-                                       n = n*16 + *s++ - 'A' + 10;
-                               else
-                                       break;
-                       }
-               } else
-                       while(*s >= '0' && *s <= '7')
-                               n = n*8 + *s++ - '0';
-       } else
-               while(*s >= '0' && *s <= '9')
-                       n = n*10 + *s++ - '0';
-       if(f)
-               n = -n;
-       return n;
-}
diff --git a/src/liblink/objfile.c b/src/liblink/objfile.c
deleted file mode 100644 (file)
index 3531c69..0000000
+++ /dev/null
@@ -1,417 +0,0 @@
-// Copyright 2013 The Go Authors.  All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Writing and reading of Go object files.
-//
-// Originally, Go object files were Plan 9 object files, but no longer.
-// Now they are more like standard object files, in that each symbol is defined
-// by an associated memory image (bytes) and a list of relocations to apply
-// during linking. We do not (yet?) use a standard file format, however.
-// For now, the format is chosen to be as simple as possible to read and write.
-// It may change for reasons of efficiency, or we may even switch to a
-// standard file format if there are compelling benefits to doing so.
-// See golang.org/s/go13linker for more background.
-//
-// The file format is:
-//
-//     - magic header: "\x00\x00go13ld"
-//     - byte 1 - version number
-//     - sequence of strings giving dependencies (imported packages)
-//     - empty string (marks end of sequence)
-//     - sequence of defined symbols
-//     - byte 0xff (marks end of sequence)
-//     - magic footer: "\xff\xffgo13ld"
-//
-// All integers are stored in a zigzag varint format.
-// See golang.org/s/go12symtab for a definition.
-//
-// Data blocks and strings are both stored as an integer
-// followed by that many bytes.
-//
-// A symbol reference is a string name followed by a version.
-// An empty name corresponds to a nil LSym* pointer.
-//
-// Each symbol is laid out as the following fields (taken from LSym*):
-//
-//     - byte 0xfe (sanity check for synchronization)
-//     - type [int]
-//     - name [string]
-//     - version [int]
-//     - flags [int]
-//             1 dupok
-//     - size [int]
-//     - gotype [symbol reference]
-//     - p [data block]
-//     - nr [int]
-//     - r [nr relocations, sorted by off]
-//
-// If type == STEXT, there are a few more fields:
-//
-//     - args [int]
-//     - locals [int]
-//     - nosplit [int]
-//     - flags [int]
-//             1 leaf
-//             2 C function
-//     - nlocal [int]
-//     - local [nlocal automatics]
-//     - pcln [pcln table]
-//
-// Each relocation has the encoding:
-//
-//     - off [int]
-//     - siz [int]
-//     - type [int]
-//     - add [int]
-//     - xadd [int]
-//     - sym [symbol reference]
-//     - xsym [symbol reference]
-//
-// Each local has the encoding:
-//
-//     - asym [symbol reference]
-//     - offset [int]
-//     - type [int]
-//     - gotype [symbol reference]
-//
-// The pcln table has the encoding:
-//
-//     - pcsp [data block]
-//     - pcfile [data block]
-//     - pcline [data block]
-//     - npcdata [int]
-//     - pcdata [npcdata data blocks]
-//     - nfuncdata [int]
-//     - funcdata [nfuncdata symbol references]
-//     - funcdatasym [nfuncdata ints]
-//     - nfile [int]
-//     - file [nfile symbol references]
-//
-// The file layout and meaning of type integers are architecture-independent.
-//
-// TODO(rsc): The file format is good for a first pass but needs work.
-//     - There are SymID in the object file that should really just be strings.
-//     - The actual symbol memory images are interlaced with the symbol
-//       metadata. They should be separated, to reduce the I/O required to
-//       load just the metadata.
-//     - The symbol references should be shortened, either with a symbol
-//       table or by using a simple backward index to an earlier mentioned symbol.
-
-#include <u.h>
-#include <libc.h>
-#include <bio.h>
-#include <link.h>
-#include "../cmd/ld/textflag.h"
-#include "../runtime/funcdata.h"
-
-static void readsym(Link*, Biobuf*, char*, char*);
-static int64 rdint(Biobuf*);
-static char *rdstring(Biobuf*);
-static void rddata(Biobuf*, uchar**, int*);
-static LSym *rdsym(Link*, Biobuf*, char*);
-
-static char startmagic[] = "\x00\x00go13ld";
-static char endmagic[] = "\xff\xffgo13ld";
-
-void
-ldobjfile(Link *ctxt, Biobuf *f, char *pkg, int64 length, char *pn)
-{
-       int c;
-       uchar buf[8];
-       int64 start;
-       char *lib;
-
-       start = Boffset(f);
-       ctxt->version++;
-       memset(buf, 0, sizeof buf);
-       Bread(f, buf, sizeof buf);
-       if(memcmp(buf, startmagic, sizeof buf) != 0)
-               sysfatal("%s: invalid file start %x %x %x %x %x %x %x %x", pn, buf[0], buf[1], buf[2], buf[3], buf[4], buf[5], buf[6], buf[7]);
-       if((c = Bgetc(f)) != 1)
-               sysfatal("%s: invalid file version number %d", pn, c);
-
-       for(;;) {
-               lib = rdstring(f);
-               if(lib[0] == 0)
-                       break;
-               addlib(ctxt, pkg, pn, lib);
-       }
-       
-       for(;;) {
-               c = Bgetc(f);
-               Bungetc(f);
-               if(c == 0xff)
-                       break;
-               readsym(ctxt, f, pkg, pn);
-       }
-       
-       memset(buf, 0, sizeof buf);
-       Bread(f, buf, sizeof buf);
-       if(memcmp(buf, endmagic, sizeof buf) != 0)
-               sysfatal("%s: invalid file end", pn);
-       
-       if(Boffset(f) != start+length)
-               sysfatal("%s: unexpected end at %lld, want %lld", pn, (vlong)Boffset(f), (vlong)(start+length));
-}
-
-static void
-readsym(Link *ctxt, Biobuf *f, char *pkg, char *pn)
-{
-       int i, j, c, t, v, n, ndata, nreloc, size, dupok;
-       static int ndup;
-       char *name;
-       uchar *data;
-       Reloc *r;
-       LSym *s, *dup, *typ;
-       Pcln *pc;
-       Auto *a;
-       
-       if(Bgetc(f) != 0xfe)
-               sysfatal("readsym out of sync");
-       t = rdint(f);
-       name = expandpkg(rdstring(f), pkg);
-       v = rdint(f);
-       if(v != 0 && v != 1)
-               sysfatal("invalid symbol version %d", v);
-       dupok = rdint(f);
-       dupok &= 1;
-       size = rdint(f);
-       typ = rdsym(ctxt, f, pkg);
-       rddata(f, &data, &ndata);
-       nreloc = rdint(f);
-       
-       if(v != 0)
-               v = ctxt->version;
-       s = linklookup(ctxt, name, v);
-       dup = nil;
-       if(s->type != 0 && s->type != SXREF) {
-               if((t == SDATA || t == SBSS || t == SNOPTRBSS) && ndata == 0 && nreloc == 0) {
-                       if(s->size < size)
-                               s->size = size;
-                       if(typ != nil && s->gotype == nil)
-                               s->gotype = typ;
-                       return;
-               }
-               if((s->type == SDATA || s->type == SBSS || s->type == SNOPTRBSS) && s->np == 0 && s->nr == 0)
-                       goto overwrite;
-               if(s->type != SBSS && s->type != SNOPTRBSS && !dupok && !s->dupok)
-                       sysfatal("duplicate symbol %s (types %d and %d) in %s and %s", s->name, s->type, t, s->file, pn);
-               if(s->np > 0) {
-                       dup = s;
-                       s = linknewsym(ctxt, ".dup", ndup++); // scratch
-               }
-       }
-overwrite:
-       s->file = pkg;
-       s->dupok = dupok;
-       if(t == SXREF)
-               sysfatal("bad sxref");
-       if(t == 0)
-               sysfatal("missing type for %s in %s", name, pn);
-       if(t == SBSS && (s->type == SRODATA || s->type == SNOPTRBSS))
-               t = s->type;
-       s->type = t;
-       if(s->size < size)
-               s->size = size;
-       if(typ != nil) // if bss sym defined multiple times, take type from any one def
-               s->gotype = typ;
-       if(dup != nil && typ != nil)
-               dup->gotype = typ;
-       s->p = data;
-       s->np = ndata;
-       s->maxp = s->np;
-       if(nreloc > 0) {
-               s->r = emallocz(nreloc * sizeof s->r[0]);
-               s->nr = nreloc;
-               s->maxr = nreloc;
-               for(i=0; i<nreloc; i++) {
-                       r = &s->r[i];
-                       r->off = rdint(f);
-                       r->siz = rdint(f);
-                       r->type = rdint(f);
-                       r->add = rdint(f);
-                       r->xadd = rdint(f);
-                       r->sym = rdsym(ctxt, f, pkg);
-                       r->xsym = rdsym(ctxt, f, pkg);
-               }
-       }
-       
-       if(s->np > 0 && dup != nil && dup->np > 0 && strncmp(s->name, "gclocals·", 10) == 0) {
-               // content-addressed garbage collection liveness bitmap symbol.
-               // double check for hash collisions.
-               if(s->np != dup->np || memcmp(s->p, dup->p, s->np) != 0)
-                       sysfatal("dupok hash collision for %s in %s and %s", s->name, s->file, pn);
-       }
-       
-       if(s->type == STEXT) {
-               s->args = rdint(f);
-               s->locals = rdint(f);
-               s->nosplit = rdint(f);
-               v = rdint(f);
-               s->leaf = v&1;
-               s->cfunc = v&2;
-               n = rdint(f);
-               for(i=0; i<n; i++) {
-                       a = emallocz(sizeof *a);
-                       a->asym = rdsym(ctxt, f, pkg);
-                       a->aoffset = rdint(f);
-                       a->name = rdint(f);
-                       a->gotype = rdsym(ctxt, f, pkg);
-                       a->link = s->autom;
-                       s->autom = a;
-               }
-
-               s->pcln = emallocz(sizeof *s->pcln);
-               pc = s->pcln;
-               rddata(f, &pc->pcsp.p, &pc->pcsp.n);
-               rddata(f, &pc->pcfile.p, &pc->pcfile.n);
-               rddata(f, &pc->pcline.p, &pc->pcline.n);
-               n = rdint(f);
-               pc->pcdata = emallocz(n * sizeof pc->pcdata[0]);
-               pc->npcdata = n;
-               for(i=0; i<n; i++)
-                       rddata(f, &pc->pcdata[i].p, &pc->pcdata[i].n);
-               n = rdint(f);
-               pc->funcdata = emallocz(n * sizeof pc->funcdata[0]);
-               pc->funcdataoff = emallocz(n * sizeof pc->funcdataoff[0]);
-               pc->nfuncdata = n;
-               for(i=0; i<n; i++)
-                       pc->funcdata[i] = rdsym(ctxt, f, pkg);
-               for(i=0; i<n; i++)
-                       pc->funcdataoff[i] = rdint(f);
-               n = rdint(f);
-               pc->file = emallocz(n * sizeof pc->file[0]);
-               pc->nfile = n;
-               for(i=0; i<n; i++)
-                       pc->file[i] = rdsym(ctxt, f, pkg);
-
-               if(dup == nil) {
-                       if(s->onlist)
-                               sysfatal("symbol %s listed multiple times", s->name);
-                       s->onlist = 1;
-                       if(ctxt->etextp)
-                               ctxt->etextp->next = s;
-                       else
-                               ctxt->textp = s;
-                       ctxt->etextp = s;
-               }
-       }
-
-       if(ctxt->debugasm) {
-               Bprint(ctxt->bso, "%s ", s->name);
-               if(s->version)
-                       Bprint(ctxt->bso, "v=%d ", s->version);
-               if(s->type)
-                       Bprint(ctxt->bso, "t=%d ", s->type);
-               if(s->dupok)
-                       Bprint(ctxt->bso, "dupok ");
-               if(s->cfunc)
-                       Bprint(ctxt->bso, "cfunc ");
-               if(s->nosplit)
-                       Bprint(ctxt->bso, "nosplit ");
-               Bprint(ctxt->bso, "size=%lld value=%lld", (vlong)s->size, (vlong)s->value);
-               if(s->type == STEXT)
-                       Bprint(ctxt->bso, " args=%#llux locals=%#llux", (uvlong)s->args, (uvlong)s->locals);
-               Bprint(ctxt->bso, "\n");
-               for(i=0; i<s->np; ) {
-                       Bprint(ctxt->bso, "\t%#06ux", i);
-                       for(j=i; j<i+16 && j<s->np; j++)
-                               Bprint(ctxt->bso, " %02ux", s->p[j]);
-                       for(; j<i+16; j++)
-                               Bprint(ctxt->bso, "   ");
-                       Bprint(ctxt->bso, "  ");
-                       for(j=i; j<i+16 && j<s->np; j++) {
-                               c = s->p[j];
-                               if(' ' <= c && c <= 0x7e)
-                                       Bprint(ctxt->bso, "%c", c);
-                               else
-                                       Bprint(ctxt->bso, ".");
-                       }
-                       Bprint(ctxt->bso, "\n");
-                       i += 16;
-               }
-               for(i=0; i<s->nr; i++) {
-                       r = &s->r[i];
-                       Bprint(ctxt->bso, "\trel %d+%d t=%d %s+%lld\n", (int)r->off, r->siz, r->type, r->sym->name, (vlong)r->add);
-               }
-       }
-}
-
-static int64
-rdint(Biobuf *f)
-{
-       int c;
-       uint64 uv;
-       int shift;
-       
-       uv = 0;
-       for(shift = 0;; shift += 7) {
-               if(shift >= 64)
-                       sysfatal("corrupt input");
-               c = Bgetc(f);
-               uv |= (uint64)(c & 0x7F) << shift;
-               if(!(c & 0x80))
-                       break;
-       }
-
-       return (int64)(uv>>1) ^ ((int64)((uint64)uv<<63)>>63);
-}
-
-static char*
-rdstring(Biobuf *f)
-{
-       int n;
-       char *p;
-       
-       n = rdint(f);
-       p = emallocz(n+1);
-       Bread(f, p, n);
-       return p;
-}
-
-static void
-rddata(Biobuf *f, uchar **pp, int *np)
-{
-       *np = rdint(f);
-       *pp = emallocz(*np);
-       Bread(f, *pp, *np);
-}
-
-static LSym*
-rdsym(Link *ctxt, Biobuf *f, char *pkg)
-{
-       int n, v;
-       char *p;
-       LSym *s;
-       
-       n = rdint(f);
-       if(n == 0) {
-               rdint(f);
-               return nil;
-       }
-       p = emallocz(n+1);
-       Bread(f, p, n);
-       v = rdint(f);
-       if(v != 0)
-               v = ctxt->version;
-       s = linklookup(ctxt, expandpkg(p, pkg), v);
-       
-       if(v == 0 && s->name[0] == '$' && s->type == 0) {
-               if(strncmp(s->name, "$f32.", 5) == 0) {
-                       int32 i32;
-                       i32 = strtoul(s->name+5, nil, 16);
-                       s->type = SRODATA;
-                       adduint32(ctxt, s, i32);
-                       s->reachable = 0;
-               } else if(strncmp(s->name, "$f64.", 5) == 0 || strncmp(s->name, "$i64.", 5) == 0) {
-                       int64 i64;
-                       i64 = strtoull(s->name+5, nil, 16);
-                       s->type = SRODATA;
-                       adduint64(ctxt, s, i64);
-                       s->reachable = 0;
-               }
-       }
-
-       return s;
-}
diff --git a/src/liblink/pcln.c b/src/liblink/pcln.c
deleted file mode 100644 (file)
index cdc11b8..0000000
+++ /dev/null
@@ -1,100 +0,0 @@
-// Copyright 2013 The Go Authors.  All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-#include <u.h>
-#include <libc.h>
-#include <bio.h>
-#include <link.h>
-
-
-// funcpctab writes to dst a pc-value table mapping the code in func to the values
-// returned by valfunc parameterized by arg. The invocation of valfunc to update the
-// current value is, for each p,
-//
-//     val = valfunc(func, val, p, 0, arg);
-//     record val as value at p->pc;
-//     val = valfunc(func, val, p, 1, arg);
-//
-// where func is the function, val is the current value, p is the instruction being
-// considered, and arg can be used to further parameterize valfunc.
-
-// pctofileline computes either the file number (arg == 0)
-// or the line number (arg == 1) to use at p.
-// Because p->lineno applies to p, phase == 0 (before p)
-// takes care of the update.
-
-// pctospadj computes the sp adjustment in effect.
-// It is oldval plus any adjustment made by p itself.
-// The adjustment by p takes effect only after p, so we
-// apply the change during phase == 1.
-
-// pctopcdata computes the pcdata value in effect at p.
-// A PCDATA instruction sets the value in effect at future
-// non-PCDATA instructions.
-// Since PCDATA instructions have no width in the final code,
-// it does not matter which phase we use for the update.
-
-
-// iteration over encoded pcdata tables.
-
-static uint32
-getvarint(uchar **pp)
-{
-       uchar *p;
-       int shift;
-       uint32 v;
-
-       v = 0;
-       p = *pp;
-       for(shift = 0;; shift += 7) {
-               v |= (uint32)(*p & 0x7F) << shift;
-               if(!(*p++ & 0x80))
-                       break;
-       }
-       *pp = p;
-       return v;
-}
-
-void
-pciternext(Pciter *it)
-{
-       uint32 v;
-       int32 dv;
-
-       it->pc = it->nextpc;
-       if(it->done)
-               return;
-       if(it->p >= it->d.p + it->d.n) {
-               it->done = 1;
-               return;
-       }
-
-       // value delta
-       v = getvarint(&it->p);
-       if(v == 0 && !it->start) {
-               it->done = 1;
-               return;
-       }
-       it->start = 0;
-       dv = (int32)(v>>1) ^ ((int32)(v<<31)>>31);
-       it->value += dv;
-       
-       // pc delta
-       v = getvarint(&it->p);
-       it->nextpc = it->pc + v*it->pcscale;
-}
-
-void
-pciterinit(Link *ctxt, Pciter *it, Pcdata *d)
-{
-       it->d = *d;
-       it->p = it->d.p;
-       it->pc = 0;
-       it->nextpc = 0;
-       it->value = -1;
-       it->start = 1;
-       it->done = 0;
-       it->pcscale = ctxt->arch->minlc;
-       pciternext(it);
-}
diff --git a/src/liblink/sym.c b/src/liblink/sym.c
deleted file mode 100644 (file)
index 9ee1797..0000000
+++ /dev/null
@@ -1,255 +0,0 @@
-// Derived from Inferno utils/6l/obj.c and utils/6l/span.c
-// http://code.google.com/p/inferno-os/source/browse/utils/6l/obj.c
-// http://code.google.com/p/inferno-os/source/browse/utils/6l/span.c
-//
-//     Copyright © 1994-1999 Lucent Technologies Inc.  All rights reserved.
-//     Portions Copyright © 1995-1997 C H Forsyth (forsyth@terzarima.net)
-//     Portions Copyright © 1997-1999 Vita Nuova Limited
-//     Portions Copyright © 2000-2007 Vita Nuova Holdings Limited (www.vitanuova.com)
-//     Portions Copyright © 2004,2006 Bruce Ellis
-//     Portions Copyright © 2005-2007 C H Forsyth (forsyth@terzarima.net)
-//     Revisions Copyright © 2000-2007 Lucent Technologies Inc. and others
-//     Portions Copyright © 2009 The Go Authors.  All rights reserved.
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-#include <u.h>
-#include <libc.h>
-#include <bio.h>
-#include <link.h>
-
-static int
-yy_isalpha(int c)
-{
-       return c >= 0 && c <= 0xFF && isalpha(c);
-}
-
-static struct {
-       char *name;
-       int val;
-} headers[] = {
-       {"darwin",      Hdarwin},
-       {"dragonfly",   Hdragonfly},
-       {"elf",         Helf},
-       {"freebsd",     Hfreebsd},
-       {"linux",       Hlinux},
-       {"android",     Hlinux}, // must be after "linux" entry or else headstr(Hlinux) == "android"
-       {"nacl",                Hnacl},
-       {"netbsd",      Hnetbsd},
-       {"openbsd",     Hopenbsd},
-       {"plan9",       Hplan9},
-       {"solaris",     Hsolaris},
-       {"windows",     Hwindows},
-       {"windowsgui",  Hwindows},
-};
-
-int
-headtype(char *name)
-{
-       int i;
-
-       for(i=0; i < nelem(headers); i++)
-               if(strcmp(name, headers[i].name) == 0)
-                       return headers[i].val;
-       return -1;
-}
-
-char*
-headstr(int v)
-{
-       static char buf[20];
-       int i;
-
-       for(i=0; i < nelem(headers); i++)
-               if(v == headers[i].val)
-                       return headers[i].name;
-       snprint(buf, sizeof buf, "%d", v);
-       return buf;
-}
-
-Link*
-linknew(LinkArch *arch)
-{
-       Link *ctxt;
-       char *p;
-       char buf[1024];
-
-       nuxiinit(arch);
-       
-       ctxt = emallocz(sizeof *ctxt);
-       ctxt->arch = arch;
-       ctxt->version = HistVersion;
-       ctxt->goroot = getgoroot();
-
-       p = getgoarch();
-       if(strcmp(p, arch->name) != 0)
-               sysfatal("invalid goarch %s (want %s)", p, arch->name);
-       
-       if(getwd(buf, sizeof buf) == 0)
-               strcpy(buf, "/???");
-       if(yy_isalpha(buf[0]) && buf[1] == ':') {
-               // On Windows.
-               ctxt->windows = 1;
-
-               // Canonicalize path by converting \ to / (Windows accepts both).
-               for(p=buf; *p; p++)
-                       if(*p == '\\')
-                               *p = '/';
-       }
-       
-       ctxt->headtype = headtype(getgoos());
-       if(ctxt->headtype < 0)
-               sysfatal("unknown goos %s", getgoos());
-       
-       // Record thread-local storage offset.
-       // TODO(rsc): Move tlsoffset back into the linker.
-       switch(ctxt->headtype) {
-       default:
-               sysfatal("unknown thread-local storage offset for %s", headstr(ctxt->headtype));
-       case Hplan9:
-       case Hwindows:
-               break;
-       case Hlinux:
-       case Hfreebsd:
-       case Hnetbsd:
-       case Hopenbsd:
-       case Hdragonfly:
-       case Hsolaris:
-               /*
-                * ELF uses TLS offset negative from FS.
-                * Translate 0(FS) and 8(FS) into -16(FS) and -8(FS).
-                * Known to low-level assembly in package runtime and runtime/cgo.
-                */
-               ctxt->tlsoffset = -2*ctxt->arch->ptrsize;
-               break;
-
-       case Hnacl:
-               switch(ctxt->arch->thechar) {
-               default:
-                       sysfatal("unknown thread-local storage offset for nacl/%s", ctxt->arch->name);
-               case '5':
-                       ctxt->tlsoffset = 0;
-                       break;
-               case '6':
-                       ctxt->tlsoffset = 0;
-                       break;
-               case '8':
-                       ctxt->tlsoffset = -8;
-                       break;
-               }
-               break;
-
-       case Hdarwin:
-               /*
-                * OS X system constants - offset from 0(GS) to our TLS.
-                * Explained in ../../runtime/cgo/gcc_darwin_*.c.
-                */
-               switch(ctxt->arch->thechar) {
-               default:
-                       sysfatal("unknown thread-local storage offset for darwin/%s", ctxt->arch->name);
-               case '6':
-                       ctxt->tlsoffset = 0x8a0;
-                       break;
-               case '8':
-                       ctxt->tlsoffset = 0x468;
-                       break;
-               case '5':
-                       ctxt->tlsoffset = 0; // dummy value, not needed
-                       break;
-               }
-               break;
-       }
-       
-       // On arm, record goarm.
-       if(ctxt->arch->thechar == '5') {
-               p = getgoarm();
-               if(p != nil)
-                       ctxt->goarm = atoi(p);
-               else
-                       ctxt->goarm = 6;
-       }
-
-       return ctxt;
-}
-
-LSym*
-linknewsym(Link *ctxt, char *symb, int v)
-{
-       LSym *s;
-
-       s = malloc(sizeof(*s));
-       memset(s, 0, sizeof(*s));
-
-       s->dynid = -1;
-       s->plt = -1;
-       s->got = -1;
-       s->name = estrdup(symb);
-       s->type = 0;
-       s->version = v;
-       s->value = 0;
-       s->sig = 0;
-       s->size = 0;
-       ctxt->nsymbol++;
-
-       s->allsym = ctxt->allsym;
-       ctxt->allsym = s;
-
-       return s;
-}
-
-static LSym*
-_lookup(Link *ctxt, char *symb, int v, int creat)
-{
-       LSym *s;
-       char *p;
-       uint32 h;
-       int c;
-
-       h = v;
-       for(p=symb; c = *p; p++)
-               h = h+h+h + c;
-       h &= 0xffffff;
-       h %= LINKHASH;
-       for(s = ctxt->hash[h]; s != nil; s = s->hash)
-               if(s->version == v && strcmp(s->name, symb) == 0)
-                       return s;
-       if(!creat)
-               return nil;
-
-       s = linknewsym(ctxt, symb, v);
-       s->extname = s->name;
-       s->hash = ctxt->hash[h];
-       ctxt->hash[h] = s;
-
-       return s;
-}
-
-LSym*
-linklookup(Link *ctxt, char *name, int v)
-{
-       return _lookup(ctxt, name, v, 1);
-}
-
-// read-only lookup
-LSym*
-linkrlookup(Link *ctxt, char *name, int v)
-{
-       return _lookup(ctxt, name, v, 0);
-}
-
index 46ab35bcbc2db7a2033dc3fcbdb0e0889f8b700f..1d51f2842ecccadfe5fbd848b5e681c604b9d455 100755 (executable)
@@ -35,9 +35,6 @@ if(! test -f run.rc){
        exit wrongdir
 }
 
-# Generate libc_plan9.h.
-../include/plan9/mklibc.rc > ../include/plan9/libc_plan9.h
-
 # Clean old generated file that will cause problems in the build.
 rm -f ./runtime/runtime_defs.go