From 522b0689c340d26feeac360640bf7e2e0582353c Mon Sep 17 00:00:00 2001 From: rsc Date: Tue, 30 Sep 2003 19:05:50 +0000 Subject: Reorg --- src/libfmt/Make.Darwin-PowerMacintosh | 6 - src/libfmt/Make.FreeBSD-386 | 7 - src/libfmt/Make.HP-UX-9000 | 6 - src/libfmt/Make.Linux-386 | 7 - src/libfmt/Make.NetBSD-386 | 7 - src/libfmt/Make.OSF1-alpha | 6 - src/libfmt/Make.SunOS-sun4u | 2 - src/libfmt/Make.SunOS-sun4u-cc | 6 - src/libfmt/Make.SunOS-sun4u-gcc | 6 - src/libfmt/Makefile | 88 +-------- src/libfmt/Makefile.MID | 63 ------- src/libfmt/bundle.ports | 51 ----- src/libfmt/fmt.h | 100 ---------- src/libfmt/fmtinstall.3 | 346 ---------------------------------- src/libfmt/mkfile | 1 - src/libfmt/rpm.spec | 34 ---- 16 files changed, 5 insertions(+), 731 deletions(-) delete mode 100644 src/libfmt/Make.Darwin-PowerMacintosh delete mode 100644 src/libfmt/Make.FreeBSD-386 delete mode 100644 src/libfmt/Make.HP-UX-9000 delete mode 100644 src/libfmt/Make.Linux-386 delete mode 100644 src/libfmt/Make.NetBSD-386 delete mode 100644 src/libfmt/Make.OSF1-alpha delete mode 100644 src/libfmt/Make.SunOS-sun4u delete mode 100644 src/libfmt/Make.SunOS-sun4u-cc delete mode 100644 src/libfmt/Make.SunOS-sun4u-gcc delete mode 100644 src/libfmt/Makefile.MID delete mode 100644 src/libfmt/bundle.ports delete mode 100644 src/libfmt/fmt.h delete mode 100644 src/libfmt/fmtinstall.3 delete mode 100644 src/libfmt/mkfile delete mode 100644 src/libfmt/rpm.spec (limited to 'src/libfmt') diff --git a/src/libfmt/Make.Darwin-PowerMacintosh b/src/libfmt/Make.Darwin-PowerMacintosh deleted file mode 100644 index 14b8d4e7..00000000 --- a/src/libfmt/Make.Darwin-PowerMacintosh +++ /dev/null @@ -1,6 +0,0 @@ -CC=gcc -CFLAGS+=-Wall -Wno-missing-braces -Wno-parentheses -Wno-switch -O2 -g -c -I. -I${PREFIX}/include -O=o -AR=ar -ARFLAGS=rvc -NAN=nan64.$O diff --git a/src/libfmt/Make.FreeBSD-386 b/src/libfmt/Make.FreeBSD-386 deleted file mode 100644 index 9799dcbb..00000000 --- a/src/libfmt/Make.FreeBSD-386 +++ /dev/null @@ -1,7 +0,0 @@ -CC=gcc -CFLAGS+=-Wall -Wno-missing-braces -Wno-parentheses -Wno-switch -O2 -g -c -I. -I$(PREFIX)/include -pg -O=o -AR=ar -ARFLAGS=rvc -NAN=nan64.$O # default, can be overriden by Make.$(SYSNAME) -NAN=nan64.$O diff --git a/src/libfmt/Make.HP-UX-9000 b/src/libfmt/Make.HP-UX-9000 deleted file mode 100644 index edbdc111..00000000 --- a/src/libfmt/Make.HP-UX-9000 +++ /dev/null @@ -1,6 +0,0 @@ -CC=cc -CFLAGS=-O -c -Ae -I. -O=o -AR=ar -ARFLAGS=rvc -NAN=nan64.$O diff --git a/src/libfmt/Make.Linux-386 b/src/libfmt/Make.Linux-386 deleted file mode 100644 index 20432828..00000000 --- a/src/libfmt/Make.Linux-386 +++ /dev/null @@ -1,7 +0,0 @@ -CC=gcc -CFLAGS+=-Wall -Wno-missing-braces -Wno-parentheses -Wno-switch -O2 -g -c -I. -DNEEDLL -O=o -AR=ar -ARFLAGS=rvc -NAN=nan64.$O # default, can be overriden by Make.$(SYSNAME) -NAN=nan64.$O diff --git a/src/libfmt/Make.NetBSD-386 b/src/libfmt/Make.NetBSD-386 deleted file mode 100644 index 087ed3ab..00000000 --- a/src/libfmt/Make.NetBSD-386 +++ /dev/null @@ -1,7 +0,0 @@ -CC=gcc -CFLAGS+=-Wall -Wno-missing-braces -Wno-parentheses -Wno-switch -O2 -g -c -I. -I$(PREFIX)/include -O=o -AR=ar -ARFLAGS=rvc -NAN=nan64.$O # default, can be overriden by Make.$(SYSNAME) -NAN=nan64.$O diff --git a/src/libfmt/Make.OSF1-alpha b/src/libfmt/Make.OSF1-alpha deleted file mode 100644 index 3d45279b..00000000 --- a/src/libfmt/Make.OSF1-alpha +++ /dev/null @@ -1,6 +0,0 @@ -CC=cc -CFLAGS+=-g -c -I. -O=o -AR=ar -ARFLAGS=rvc -NAN=nan64.$O diff --git a/src/libfmt/Make.SunOS-sun4u b/src/libfmt/Make.SunOS-sun4u deleted file mode 100644 index c5fe67b8..00000000 --- a/src/libfmt/Make.SunOS-sun4u +++ /dev/null @@ -1,2 +0,0 @@ -include Make.SunOS-sun4u-$(CC) -NAN=nan64.$O diff --git a/src/libfmt/Make.SunOS-sun4u-cc b/src/libfmt/Make.SunOS-sun4u-cc deleted file mode 100644 index 829301de..00000000 --- a/src/libfmt/Make.SunOS-sun4u-cc +++ /dev/null @@ -1,6 +0,0 @@ -CC=cc -CFLAGS+=-g -c -I. -O -O=o -AR=ar -ARFLAGS=rvc -NAN=nan64.$O diff --git a/src/libfmt/Make.SunOS-sun4u-gcc b/src/libfmt/Make.SunOS-sun4u-gcc deleted file mode 100644 index 5c415948..00000000 --- a/src/libfmt/Make.SunOS-sun4u-gcc +++ /dev/null @@ -1,6 +0,0 @@ -CC=gcc -CFLAGS+=-Wall -Wno-missing-braces -Wno-parentheses -Wno-switch -O2 -g -c -O=o -AR=ar -ARFLAGS=rvc -NAN=nan64.$O diff --git a/src/libfmt/Makefile b/src/libfmt/Makefile index 4b8ff604..0b072191 100644 --- a/src/libfmt/Makefile +++ b/src/libfmt/Makefile @@ -1,27 +1,7 @@ - -# this works in gnu make -SYSNAME:=${shell uname} -OBJTYPE:=${shell uname -m | sed 's;i.86;386;; s;/.*;;; s; ;;g'} - -# this works in bsd make -SYSNAME!=uname -OBJTYPE!=uname -m | sed 's;i.86;386;; s;/.*;;; s; ;;g' - -# the gnu rules will mess up bsd but not vice versa, -# hence the gnu rules come first. - -include Make.$(SYSNAME)-$(OBJTYPE) - -PREFIX=/usr/local - -NUKEFILES= - -TGZFILES= +9SRC=.. +include $(9SRC)/Makehdr LIB=libfmt.a -VERSION=2.0 -PORTPLACE=devel/libfmt -NAME=libfmt NUM=\ charstod.$O\ @@ -64,71 +44,13 @@ OFILES=\ HFILES=\ fmtdef.h\ - fmt.h\ - -all: $(LIB) + $(9SRC)/include/fmt.h\ -install: $(LIB) - test -d $(PREFIX)/man/man3 || mkdir $(PREFIX)/man/man3 - install -m 0644 print.3 $(PREFIX)/man/man3/print.3 - install -m 0644 fmtinstall.3 $(PREFIX)/man/man3/fmtinstall.3 - install -m 0644 fmt.h $(PREFIX)/include/fmt.h - install -m 0644 $(LIB) $(PREFIX)/lib/$(LIB) +include $(9SRC)/Makesyslib $(NAN).$O: nan.h strtod.$O: nan.h test: $(LIB) test.$O - $(CC) -o test test.$O $(LIB) -L$(PREFIX)/lib -lutf - -$(LIB): $(OFILES) - $(AR) $(ARFLAGS) $(LIB) $(OFILES) - -NUKEFILES+=$(LIB) -.c.$O: - $(CC) $(CFLAGS) -I$(PREFIX)/include $*.c - -%.$O: %.c - $(CC) $(CFLAGS) -I$(PREFIX)/include $*.c - - -$(OFILES): $(HFILES) - -tgz: - rm -rf $(NAME)-$(VERSION) - mkdir $(NAME)-$(VERSION) - cp Makefile Make.* README LICENSE NOTICE *.[ch137] rpm.spec bundle.ports $(TGZFILES) $(NAME)-$(VERSION) - tar cf - $(NAME)-$(VERSION) | gzip >$(NAME)-$(VERSION).tgz - rm -rf $(NAME)-$(VERSION) - -clean: - rm -f $(OFILES) $(LIB) - -nuke: - rm -f $(OFILES) *.tgz *.rpm $(NUKEFILES) - -rpm: - make tgz - cp $(NAME)-$(VERSION).tgz /usr/src/RPM/SOURCES - rpm -ba rpm.spec - cp /usr/src/RPM/SRPMS/$(NAME)-$(VERSION)-1.src.rpm . - cp /usr/src/RPM/RPMS/i586/$(NAME)-$(VERSION)-1.i586.rpm . - scp *.rpm rsc@amsterdam.lcs.mit.edu:public_html/software - -PORTDIR=/usr/ports/$(PORTPLACE) - -ports: - make tgz - rm -rf $(PORTDIR) - mkdir $(PORTDIR) - cp $(NAME)-$(VERSION).tgz /usr/ports/distfiles - cat bundle.ports | (cd $(PORTDIR) && awk '$$1=="---" && $$3=="---" { ofile=$$2; next} {if(ofile) print >ofile}') - (cd $(PORTDIR); make makesum) - (cd $(PORTDIR); make) - (cd $(PORTDIR); /usr/local/bin/portlint) - rm -rf $(PORTDIR)/work - shar `find $(PORTDIR)` > ports.shar - (cd $(PORTDIR); tar cf - *) | gzip >$(NAME)-$(VERSION)-ports.tgz - scp *.tgz rsc@amsterdam.lcs.mit.edu:public_html/software + $(CC) -o test test.$O $(LIB) -L$(9SRC)/lib -lutf -.phony: all clean nuke install tgz rpm ports diff --git a/src/libfmt/Makefile.MID b/src/libfmt/Makefile.MID deleted file mode 100644 index 8302c281..00000000 --- a/src/libfmt/Makefile.MID +++ /dev/null @@ -1,63 +0,0 @@ -LIB=libfmt.a -VERSION=2.0 -PORTPLACE=devel/libfmt -NAME=libfmt - -NUM=\ - charstod.$O\ - pow10.$O\ - -OFILES=\ - dofmt.$O\ - errfmt.$O\ - fltfmt.$O\ - fmt.$O\ - fmtfd.$O\ - fmtfdflush.$O\ - fmtlock.$O\ - fmtprint.$O\ - fmtquote.$O\ - fmtrune.$O\ - fmtstr.$O\ - fmtvprint.$O\ - fprint.$O\ - print.$O\ - runefmtstr.$O\ - runeseprint.$O\ - runesmprint.$O\ - runesnprint.$O\ - runesprint.$O\ - runevseprint.$O\ - runevsmprint.$O\ - runevsnprint.$O\ - seprint.$O\ - smprint.$O\ - snprint.$O\ - sprint.$O\ - strtod.$O\ - vfprint.$O\ - vseprint.$O\ - vsmprint.$O\ - vsnprint.$O\ - $(NUM)\ - $(NAN)\ - -HFILES=\ - fmtdef.h\ - fmt.h\ - -all: $(LIB) - -install: $(LIB) - test -d $(PREFIX)/man/man3 || mkdir $(PREFIX)/man/man3 - install -m 0644 print.3 $(PREFIX)/man/man3/print.3 - install -m 0644 fmtinstall.3 $(PREFIX)/man/man3/fmtinstall.3 - install -m 0644 fmt.h $(PREFIX)/include/fmt.h - install -m 0644 $(LIB) $(PREFIX)/lib/$(LIB) - -$(NAN).$O: nan.h -strtod.$O: nan.h - -test: $(LIB) test.$O - $(CC) -o test test.$O $(LIB) -L$(PREFIX)/lib -lutf - diff --git a/src/libfmt/bundle.ports b/src/libfmt/bundle.ports deleted file mode 100644 index 9ecf6a24..00000000 --- a/src/libfmt/bundle.ports +++ /dev/null @@ -1,51 +0,0 @@ ---- Makefile --- -# New ports collection makefile for: libfmt -# Date Created: 11 Feb 2003 -# Whom: rsc -# -# THIS LINE NEEDS REPLACING. IT'S HERE TO GET BY PORTLINT -# $FreeBSD: ports/devel/libfmt/Makefile,v 1.1 2003/02/12 00:51:22 rsc Exp $ - -PORTNAME= libfmt -PORTVERSION= 2.0 -CATEGORIES= devel -MASTER_SITES= http://pdos.lcs.mit.edu/~rsc/software/ -EXTRACT_SUFX= .tgz - -MAINTAINER= rsc@post.harvard.edu - -DEPENDS= ${PORTSDIR}/devel/libutf - -MAN3= print.3 fmtinstall.3 - -USE_REINPLACE=yes - -.include - -post-patch: - ${REINPLACE_CMD} -e 's,$$(PREFIX),${PREFIX},g' ${WRKSRC}/Makefile - -.include ---- pkg-comment --- -Extensible formatted print C library (printf with user-defined verbs) ---- pkg-descr --- -Libfmt is a port of Plan 9's formatted print library. -As a base it provides all the syntax of ANSI printf -but adds the ability for client programs to install -new print verbs. One such print verb (installed by -default) is %r, which prints the system error string. -Instead of perror("foo"), you can write fprint(2, "foo: %r\n"). -This is especially nice when you write verbs to format -the data structures used by your particular program. - -WWW: http://pdos.lcs.mit.edu/~rsc/software/#libfmt -http://plan9.bell-labs.com/magic/man2html/2/print - -Russ Cox -rsc@post.harvard.edu ---- pkg-plist --- -lib/libfmt.a -include/fmt.h ---- /dev/null --- -This is just a way to make sure blank lines don't -creep into pkg-plist. diff --git a/src/libfmt/fmt.h b/src/libfmt/fmt.h deleted file mode 100644 index c913e14a..00000000 --- a/src/libfmt/fmt.h +++ /dev/null @@ -1,100 +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. - */ - -#ifndef _FMTH_ -#define _FMTH_ 1 - -#include - -#ifndef _UTFH_ -#include -#endif - -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 */ - int r; /* % format Rune */ - int width; - int prec; - unsigned long flags; -}; - -enum{ - FmtWidth = 1, - FmtLeft = FmtWidth << 1, - FmtPrec = FmtLeft << 1, - FmtSharp = FmtPrec << 1, - FmtSpace = FmtSharp << 1, - FmtSign = FmtSpace << 1, - FmtZero = FmtSign << 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 print(char*, ...); -extern char* seprint(char*, char*, char*, ...); -extern char* vseprint(char*, char*, char*, va_list); -extern int snprint(char*, int, char*, ...); -extern int vsnprint(char*, int, char*, va_list); -extern char* smprint(char*, ...); -extern char* vsmprint(char*, va_list); -extern int sprint(char*, char*, ...); -extern int fprint(int, char*, ...); -extern int vfprint(int, char*, va_list); - -extern int runesprint(Rune*, char*, ...); -extern int runesnprint(Rune*, int, char*, ...); -extern int runevsnprint(Rune*, int, char*, va_list); -extern Rune* runeseprint(Rune*, Rune*, char*, ...); -extern Rune* runevseprint(Rune*, Rune*, char*, va_list); -extern Rune* runesmprint(char*, ...); -extern Rune* runevsmprint(char*, va_list); - -extern int fmtfdinit(Fmt*, int, char*, int); -extern int fmtfdflush(Fmt*); -extern int fmtstrinit(Fmt*); -extern char* fmtstrflush(Fmt*); -extern int runefmtstrinit(Fmt*); - -extern int quotestrfmt(Fmt *f); -extern void quotefmtinstall(void); -extern int (*fmtdoquote)(int); - - -extern int fmtinstall(int, int (*)(Fmt*)); -extern int dofmt(Fmt*, char*); -extern int fmtprint(Fmt*, char*, ...); -extern int fmtvprint(Fmt*, char*, va_list); -extern int fmtrune(Fmt*, int); -extern int fmtstrcpy(Fmt*, char*); - -extern double fmtstrtod(const char *, char **); -extern double fmtcharstod(int(*)(void*), void*); - -#endif diff --git a/src/libfmt/fmtinstall.3 b/src/libfmt/fmtinstall.3 deleted file mode 100644 index 2a0e55bf..00000000 --- a/src/libfmt/fmtinstall.3 +++ /dev/null @@ -1,346 +0,0 @@ -.TH FMTINSTALL 3 -.de EX -.nf -.ft B -.. -.de EE -.fi -.ft R -.. -.SH NAME -fmtinstall, dofmt, fmtprint, fmtvprint, fmtstrcpy, fmtfdinit, fmtfdflush, fmtstrinit, fmtstrflush \- support for user-defined print formats and output routines -.SH SYNOPSIS -.B #include -.PP -.ft L -.nf -.ta \w' 'u +\w' 'u +\w' 'u +\w' 'u +\w' 'u -typedef struct Fmt Fmt; -struct Fmt{ - 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 */ - int r; /* % format character */ - int width; - int prec; - unsigned long flags; -}; - -enum{ - FmtWidth = 1, - FmtLeft = FmtWidth << 1, - FmtPrec = FmtLeft << 1, - FmtSharp = FmtPrec << 1, - FmtSpace = FmtSharp << 1, - FmtSign = FmtSpace << 1, - FmtZero = FmtSign << 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 -}; -.fi -.PP -.B -.ta \w'\fLchar* 'u - -.PP -.B -int fmtfdinit(Fmt *f, int fd, char *buf, int nbuf); -.PP -.B -int fmtfdflush(Fmt *f); -.PP -.B -int fmtstrinit(Fmt *f); -.PP -.B -char* fmtstrflush(Fmt *f); -.PP -.B -int fmtinstall(int c, int (*fn)(Fmt*)); -.PP -.B -int dofmt(Fmt *f, char *fmt); -.PP -.B -int fmtprint(Fmt *f, char *fmt, ...); -.PP -.B -int fmtvprint(Fmt *f, char *fmt, va_list v); -.PP -.B -int fmtrune(Fmt *f, int r); -.PP -.B -int fmtstrcpy(Fmt *f, char *s); -.SH DESCRIPTION -The interface described here allows the construction of custom -.IR print (3) -verbs and output routines. -In essence, they provide access to the workings of the formatted print code. -.PP -The -.IR print (3) -suite maintains its state with a data structure called -.BR Fmt . -A typical call to -.IR print (3) -or its relatives initializes a -.B Fmt -structure, passes it to subsidiary routines to process the output, -and finishes by emitting any saved state recorded in the -.BR Fmt . -The details of the -.B Fmt -are unimportant to outside users, except insofar as the general -design influences the interface. -The -.B Fmt -records -the verb being processed, its precision and width, -and buffering parameters. -Most important, it also records a -.I flush -routine that the library will call if a buffer overflows. -When printing to a file descriptor, the flush routine will -emit saved characters and reset the buffer; when printing -to an allocated string, it will resize the string to receive more output. -The flush routine is nil when printing to fixed-size buffers. -User code need never provide a flush routine; this is done internally -by the library. -.SS Custom output routines -To write a custom output routine, such as an error handler that -formats and prints custom error messages, the output sequence can be run -from outside the library using the routines described here. -There are two main cases: output to an open file descriptor -and output to a string. -.PP -To write to a file descriptor, call -.I fmtfdinit -to initialize the local -.B Fmt -structure -.IR f , -giving the file descriptor -.IR fd , -the buffer -.IR buf , -and its size -.IR nbuf . -Then call -.IR fmtprint -or -.IR fmtvprint -to generate the output. -These behave just like -.B fprint -(see -.IR print (3)) -or -.B vfprint -except that the characters are buffered until -.I fmtfdflush -is called. -A typical example of this sequence appears in the Examples section. -.PP -The same basic sequence applies when outputting to an allocated string: -call -.I fmtstrinit -to initialize the -.BR Fmt , -then call -.I fmtprint -and -.I fmtvprint -to generate the output. -Finally, -.I fmtstrflush -will return the allocated string, which should be freed after use. -Regardless of the output style or type, -.I fmtprint -or -.I fmtvprint -generates the characters. -.SS Custom format verbs -.I Fmtinstall -is used to install custom verbs and flags labeled by character -.IR c , -which may be any non-zero Unicode character. -.I Fn -should be declared as -.IP -.EX -int fn(Fmt*) -.EE -.PP -.IB Fp ->r -is the flag or verb character to cause -.I fn -to be called. -In -.IR fn , -.IB fp ->width , -.IB fp ->prec -are the width and precision, and -.IB fp ->flags -the decoded flags for the verb (see -.IR print (3) -for a description of these items). -The standard flag values are: -.B FmtSign -.RB ( + ), -.B FmtLeft -.RB ( - ), -.B FmtSpace -.RB ( '\ ' ), -.B FmtSharp -.RB ( # ), -.B FmtComma -.RB ( , ), -.B FmtLong -.RB ( l ), -.B FmtShort -.RB ( h ), -.B FmtByte -.RB ( hh ), -.B FmtUnsigned -.RB ( u ), -.B FmtLDouble -.RB ( L ), -and -.B FmtVLong -.RB ( ll ). -The flag bits -.B FmtWidth -and -.B FmtPrec -identify whether a width and precision were specified. -.PP -.I Fn -is passed a pointer to the -.B Fmt -structure recording the state of the output. -If -.IB fp ->r -is a verb (rather than a flag), -.I fn -should use -.B Fmt->args -to fetch its argument from the list, -then format it, and return zero. -If -.IB fp ->r -is a flag, -.I fn -should return a negative value: -the negation of one of the above flag values, or some otherwise unused power of two. -All interpretation of -.IB fp ->width\f1, -.IB fp ->prec\f1, -and -.IB fp-> flags -is left up to the conversion routine. -.I Fmtinstall -returns 0 if the installation succeeds, \-1 if it fails. -.PP -.IR Fmtprint -and -.IR fmtvprint -may be called to -help prepare output in custom conversion routines. -However, these functions clear the width, precision, and flags. -The function -.I dofmt -is the underlying formatter; it -uses the existing contents of -.B Fmt -and should be called only by sophisticated conversion routines. -All these routines return the number of characters -produced. -.PP -Some internal functions may be useful to format primitive types. -They honor the width, precision and flags as described in -.IR print (3). -.I Fmtrune -formats a single character -.BR r . -.I Fmtstrcpy -formats a string -.BR s . -All these routines return zero for successful execution. -.SH EXAMPLES -This function prints an error message with a variable -number of arguments and then quits. -Compared to the corresponding example in -.IR print (3), -this version uses a smaller buffer, will never truncate -the output message, but might generate multiple -.B write -system calls to produce its output. -.IP -.EX -.ta 6n +6n +6n +6n +6n +6n +6n +6n +6n - -void fatal(char *fmt, ...) -{ - Fmt f; - char buf[64]; - va_list arg; - - fmtfdinit(&f, 1, buf, sizeof buf); - fmtprint(&f, "fatal: "); - va_start(arg, fmt); - fmtvprint(&f, fmt, arg); - va_end(arg); - fmtprint(&f, "\en"); - fmtfdflush(&f); - exits("fatal error"); -} -.EE -.PP -This example adds a verb to print complex numbers. -.IP -.EX -typedef -struct { - double r, i; -} Complex; - -int -Xfmt(Fmt *f) -{ - Complex c; - - c = va_arg(f->args, Complex); - return fmtprint(f, "(%g,%g)", c.r, c.i); -} - -main(...) -{ - Complex x; - - x.r = 1.5; - x.i = -2.3; - - fmtinstall('X', Xfmt); - print("x = %X\en", x); -} -.EE -.SH SEE ALSO -.IR print (3) -.SH HISTORY -This formatted print library originally -appeared as part of the Plan 9 C library. -.SH BUGS -The Plan 9 version supports Unicode strings and produces UTF output. -This version assumes that characters are always represented by 1-byte values. diff --git a/src/libfmt/mkfile b/src/libfmt/mkfile deleted file mode 100644 index bb99a25a..00000000 --- a/src/libfmt/mkfile +++ /dev/null @@ -1 +0,0 @@ -<../libutf/mkfile diff --git a/src/libfmt/rpm.spec b/src/libfmt/rpm.spec deleted file mode 100644 index 2cd51484..00000000 --- a/src/libfmt/rpm.spec +++ /dev/null @@ -1,34 +0,0 @@ -Summary: Extensible formatted print library. (Printf with user-defined verbs.) -Name: libfmt -Version: 2.0 -Release: 1 -Group: Development/C -Copyright: BSD-like -Packager: Russ Cox -Source: http://pdos.lcs.mit.edu/~rsc/software/libfmt-2.0.tgz -URL: http://pdos.lcs.mit.edu/~rsc/software/#libfmt -Requires: libutf - -%description -Libfmt is a port of Plan 9's formatted print library. -As a base it provides all the syntax of ANSI printf -but adds the ability for client programs to install -new print verbs. One such print verb (installed by -default) is %r, which prints the system error string. -Instead of perror("foo"), you can write fprint(2, "foo: %r\n"). -This is especially nice when you write verbs to format -the data structures used by your particular program. -%prep -%setup - -%build -make - -%install -make install - -%files -/usr/local/include/fmt.h -/usr/local/lib/libfmt.a -/usr/local/man/man3/print.3 -/usr/local/man/man3/fmtinstall.3 -- cgit v1.2.3