. add bsd-style MLINKS to minix man set, restoring aliases (e.g. man add64 -> int64) . update daily cron script to run makewhatis and restore makewhatis in man Makefile (makedb), restores functionality of man -k . netbsd imports of man, mdocml, makewhatis, libutil, apropos . update man.conf with manpage locations, restoring man [-s] <section> . throws out some obsolete manpages
		
			
				
	
	
		
			280 lines
		
	
	
		
			7.6 KiB
		
	
	
	
		
			Groff
		
	
	
	
	
	
			
		
		
	
	
			280 lines
		
	
	
		
			7.6 KiB
		
	
	
	
		
			Groff
		
	
	
	
	
	
.\"     $NetBSD: snprintb.3,v 1.14 2009/05/13 02:50:32 pgoyette Exp $
 | 
						|
.\"
 | 
						|
.\" Copyright (c) 1998 The NetBSD Foundation, Inc.
 | 
						|
.\" All rights reserved.
 | 
						|
.\"
 | 
						|
.\" This code is derived from software contributed to The NetBSD Foundation
 | 
						|
.\" by Jeremy Cooper.
 | 
						|
.\"
 | 
						|
.\" Redistribution and use in source and binary forms, with or without
 | 
						|
.\" modification, are permitted provided that the following conditions
 | 
						|
.\" are met:
 | 
						|
.\" 1. Redistributions of source code must retain the above copyright
 | 
						|
.\"    notice, this list of conditions and the following disclaimer.
 | 
						|
.\" 2. Redistributions in binary form must reproduce the above copyright
 | 
						|
.\"    notice, this list of conditions and the following disclaimer in the
 | 
						|
.\"    documentation and/or other materials provided with the distribution.
 | 
						|
.\"
 | 
						|
.\" THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
 | 
						|
.\" ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
 | 
						|
.\" TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 | 
						|
.\" PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
 | 
						|
.\" BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 | 
						|
.\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 | 
						|
.\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 | 
						|
.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 | 
						|
.\" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 | 
						|
.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 | 
						|
.\" POSSIBILITY OF SUCH DAMAGE.
 | 
						|
.\"
 | 
						|
.Dd May 7, 2009
 | 
						|
.Dt SNPRINTB 3
 | 
						|
.Os
 | 
						|
.Sh NAME
 | 
						|
.Nm snprintb
 | 
						|
.Nd bitmask output conversion
 | 
						|
.Sh LIBRARY
 | 
						|
.Lb libutil
 | 
						|
.Sh SYNOPSIS
 | 
						|
.In util.h
 | 
						|
.Ft int
 | 
						|
.Fn "snprintb" "char *buf" "size_t buflen" "const char *fmt" "uint64_t val"
 | 
						|
.Ft int
 | 
						|
.Fn "snprintb_m" "char *buf" "size_t buflen" "const char *fmt" "uint64_t val" \
 | 
						|
"size_t max"
 | 
						|
.Sh DESCRIPTION
 | 
						|
The
 | 
						|
.Fn snprintb
 | 
						|
function formats a bitmask into a mnemonic form suitable for printing.
 | 
						|
.Pp
 | 
						|
This conversion is useful for decoding bit fields in device registers.
 | 
						|
It formats the integer
 | 
						|
.Fa val
 | 
						|
into the buffer
 | 
						|
.Fa buf ,
 | 
						|
of size
 | 
						|
.Fa buflen ,
 | 
						|
using a specified radix and an interpretation of
 | 
						|
the bits within that integer as though they were flags.
 | 
						|
The buffer is always NUL-terminated.
 | 
						|
If the buffer
 | 
						|
.Fa buf
 | 
						|
is too small to hold the formatted output,
 | 
						|
.Fn snprintb
 | 
						|
will fill as much as it can, and return the number of bytes
 | 
						|
that would have written if the buffer was long enough excluding the
 | 
						|
terminating NUL.
 | 
						|
.Pp
 | 
						|
The decoding directive string
 | 
						|
.Fa fmt
 | 
						|
describes how the bitfield is to be interpreted and displayed.
 | 
						|
It follows two possible syntaxes, referred to as
 | 
						|
.Dq old
 | 
						|
and
 | 
						|
.Dq new .
 | 
						|
The main advantage of the
 | 
						|
.Dq new
 | 
						|
formatting is that it is capable of handling multi-bit fields.
 | 
						|
.Pp
 | 
						|
The first character of
 | 
						|
.Fa fmt
 | 
						|
may be
 | 
						|
.Li \e177 ,
 | 
						|
indicating that the remainder of the format string follows the
 | 
						|
.Dq new
 | 
						|
syntax.
 | 
						|
The second character
 | 
						|
.Pq the first for the old format
 | 
						|
is a binary character representation of the
 | 
						|
output numeral base in which the bitfield will be printed before it is decoded.
 | 
						|
Recognized radix values
 | 
						|
.Pq in C escape-character format
 | 
						|
are
 | 
						|
.Li \e10
 | 
						|
.Pq octal ,
 | 
						|
.Li \e12
 | 
						|
.Pq decimal ,
 | 
						|
and
 | 
						|
.Li \e20
 | 
						|
.Pq hexadecimal .
 | 
						|
.Pp
 | 
						|
The remaining characters in
 | 
						|
.Fa fmt
 | 
						|
are interpreted as a list of bit-position\(endescription pairs.
 | 
						|
From here the syntaxes diverge.
 | 
						|
.Pp
 | 
						|
The
 | 
						|
.Dq old
 | 
						|
format syntax is series of bit-position\(endescription pairs.
 | 
						|
Each begins with a binary character value that represents the position
 | 
						|
of the bit being described.
 | 
						|
A bit position value of one describes the least significant bit.
 | 
						|
Whereas a position value of 32
 | 
						|
.Pq octal 40, hexadecimal 20, the ASCII space character
 | 
						|
describes the most significant bit.
 | 
						|
.Pp
 | 
						|
The remaining characters in a bit-position\(endescription pair are the
 | 
						|
characters to print should the bit being described be set.
 | 
						|
Description strings are delimited by the next bit position value character
 | 
						|
encountered
 | 
						|
.Pq distinguishable by its value being \*[Le] 32 ,
 | 
						|
or the end of the decoding directive string itself.
 | 
						|
.Pp
 | 
						|
For the
 | 
						|
.Dq new
 | 
						|
format syntax, a bit-position\(endescription begins with a field type
 | 
						|
followed by a binary bit-position and possibly a field length.
 | 
						|
The least significant bit is bit-position zero, unlike the
 | 
						|
.Dq old
 | 
						|
syntax where it is one.
 | 
						|
.Bl -tag -width "xxxxx"
 | 
						|
.It Cm b\eB
 | 
						|
Describes a bit position.
 | 
						|
The bit-position
 | 
						|
.Fa B
 | 
						|
indicates the corresponding bit, as in the
 | 
						|
.Dq old
 | 
						|
format.
 | 
						|
.It Cm f\eB\eL
 | 
						|
Describes a multi-bit field beginning at bit-position
 | 
						|
.Fa B
 | 
						|
and having a bit-length of
 | 
						|
.Fa L .
 | 
						|
The remaining characters are printed as a description of the field
 | 
						|
followed by
 | 
						|
.Sq \&=
 | 
						|
and the value of the field.
 | 
						|
The value of the field is printed in the base specified as the second
 | 
						|
character of the decoding directive string
 | 
						|
.Ar fmt .
 | 
						|
.It Cm F\eB\eL
 | 
						|
Describes a multi-bit field like
 | 
						|
.Sq f ,
 | 
						|
but just extracts the value for use with the
 | 
						|
.Sq \&=
 | 
						|
and
 | 
						|
.Sq \&:
 | 
						|
formatting directives described below.
 | 
						|
.It Cm \&=\eV
 | 
						|
The field previously extracted by the last
 | 
						|
.Sq f
 | 
						|
or
 | 
						|
.Sq F
 | 
						|
operator is compared to the byte
 | 
						|
.Sq Cm V
 | 
						|
.Pq for values 0 through 255 .
 | 
						|
If they are equal,
 | 
						|
.Sq \&=
 | 
						|
followed by the string following
 | 
						|
.Sq Cm V
 | 
						|
is printed.
 | 
						|
This and the
 | 
						|
.Sq \&:
 | 
						|
operator may be repeated to annotate multiple possible values.
 | 
						|
.It Cm :\eV
 | 
						|
Operates like the
 | 
						|
.Sq \&=
 | 
						|
operator, but omits the leading
 | 
						|
.Sq \&= .
 | 
						|
.El
 | 
						|
.Pp
 | 
						|
Finally, each field is delimited by a NUL
 | 
						|
.Pq Sq \e0
 | 
						|
character.
 | 
						|
By convention, the format string has an additional NUL character at
 | 
						|
the end, following that delimiting the last bit-position\(endescription
 | 
						|
pair.
 | 
						|
.Pp
 | 
						|
The
 | 
						|
.Fn snprintb_m
 | 
						|
function accepts an additional
 | 
						|
.Fa max
 | 
						|
argument.
 | 
						|
If this argument is zero, the
 | 
						|
.Fn snprintb_m
 | 
						|
function returns exactly the same results in the
 | 
						|
.Fa buf
 | 
						|
as the
 | 
						|
.Fn snprintb
 | 
						|
function.
 | 
						|
If the
 | 
						|
.Fa max
 | 
						|
argument is present and has a non-zero value, it represents the maximum
 | 
						|
length of a formatted string.
 | 
						|
If the formatted string would require more than
 | 
						|
.Fa max
 | 
						|
characters, the
 | 
						|
.Fn snprintb_m
 | 
						|
function returns multiple formatted strings in the output buffer
 | 
						|
.Fa buf .
 | 
						|
Each string is NUL-terminated, and the last string is followed by an
 | 
						|
additional NUL character (or, if you prefer, a zero-length string).
 | 
						|
.Sh RETURN VALUES
 | 
						|
The
 | 
						|
.Fn snprintb
 | 
						|
and
 | 
						|
.Fn snprintb_m
 | 
						|
functions return the number of bytes that would have written to the buffer
 | 
						|
if there was adequate space, excluding the final terminating NUL, or \-1 in
 | 
						|
case an error occurred.
 | 
						|
For
 | 
						|
.Fn snprintb_m ,
 | 
						|
the NUL characters terminating each individual string are included in the
 | 
						|
total number of bytes.
 | 
						|
.Sh EXAMPLES
 | 
						|
Two examples of the old formatting style:
 | 
						|
.Bd -literal -offset indent
 | 
						|
snprintb(buf, buflen, "\e10\e2BITTWO\e1BITONE", 3)
 | 
						|
\(rA "3\*[Lt]BITTWO,BITONE\*[Gt]"
 | 
						|
 | 
						|
snprintb(buf, buflen,
 | 
						|
       "\e20\ex10NOTBOOT\ex0fFPP\ex0eSDVMA\ex0cVIDEO"
 | 
						|
       "\ex0bLORES\ex0aFPA\ex09DIAG\ex07CACHE"
 | 
						|
       "\ex06IOCACHE\ex05LOOPBACK\ex04DBGCACHE",
 | 
						|
       0xe860)
 | 
						|
\(rA "e860\*[Lt]NOTBOOT,FPP,SDVMA,VIDEO,CACHE,IOCACHE\*[Gt]"
 | 
						|
.Ed
 | 
						|
.Pp
 | 
						|
An example of the new formatting style:
 | 
						|
.Bd -literal -offset indent
 | 
						|
snprintb(buf, buflen,
 | 
						|
       "\e177\e020b\e0LSB\e0b\e1_BITONE\e0f\e4\e4NIBBLE2\e0"
 | 
						|
       "f\ex10\e4BURST\e0=\e4FOUR\e0=\exfSIXTEEN\e0"
 | 
						|
       "b\ex1fMSB\e0\e0",
 | 
						|
       0x800f0701)
 | 
						|
\(rA "800f0701\*[Lt]LSB,NIBBLE2=0,BURST=f=SIXTEEN,MSB\*[Gt]"
 | 
						|
.Ed
 | 
						|
.Sh ERRORS
 | 
						|
.Fn snprintb
 | 
						|
will fail if:
 | 
						|
.Bl -tag -width Er
 | 
						|
.It Bq Er EINVAL
 | 
						|
The leading character does not describe a supported format,
 | 
						|
or
 | 
						|
.Fn snprintf
 | 
						|
failed.
 | 
						|
.El
 | 
						|
.Sh SEE ALSO
 | 
						|
.Xr printf 3 ,
 | 
						|
.Xr snprintf 3
 | 
						|
.Sh HISTORY
 | 
						|
The
 | 
						|
.Fn snprintb
 | 
						|
function was originally implemented as a non-standard
 | 
						|
.Li %b
 | 
						|
format string for the kernel
 | 
						|
.Fn printf
 | 
						|
function in
 | 
						|
.Nx 1.5
 | 
						|
and earlier releases.
 | 
						|
It was called
 | 
						|
.Fn bitmask_snprintf
 | 
						|
in
 | 
						|
.Nx 5.0
 | 
						|
and earlier releases.
 | 
						|
.Sh AUTHORS
 | 
						|
The
 | 
						|
.Dq new
 | 
						|
format was the invention of
 | 
						|
.An Chris Torek .
 |