18c9893a3SJeroen Ruigrok van der Werven.\" Copyright (c) 2001 Jeroen Ruigrok van der Werven <asmodai@FreeBSD.org> 28c9893a3SJeroen Ruigrok van der Werven.\" All rights reserved. 38c9893a3SJeroen Ruigrok van der Werven.\" 48c9893a3SJeroen Ruigrok van der Werven.\" Redistribution and use in source and binary forms, with or without 58c9893a3SJeroen Ruigrok van der Werven.\" modification, are permitted provided that the following conditions 68c9893a3SJeroen Ruigrok van der Werven.\" are met: 78c9893a3SJeroen Ruigrok van der Werven.\" 1. Redistributions of source code must retain the above copyright 88c9893a3SJeroen Ruigrok van der Werven.\" notice, this list of conditions and the following disclaimer. 98c9893a3SJeroen Ruigrok van der Werven.\" 2. Redistributions in binary form must reproduce the above copyright 108c9893a3SJeroen Ruigrok van der Werven.\" notice, this list of conditions and the following disclaimer in the 118c9893a3SJeroen Ruigrok van der Werven.\" documentation and/or other materials provided with the distribution. 128c9893a3SJeroen Ruigrok van der Werven.\" 138c9893a3SJeroen Ruigrok van der Werven.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 148c9893a3SJeroen Ruigrok van der Werven.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 158c9893a3SJeroen Ruigrok van der Werven.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 168c9893a3SJeroen Ruigrok van der Werven.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 178c9893a3SJeroen Ruigrok van der Werven.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 188c9893a3SJeroen Ruigrok van der Werven.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 198c9893a3SJeroen Ruigrok van der Werven.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 208c9893a3SJeroen Ruigrok van der Werven.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 218c9893a3SJeroen Ruigrok van der Werven.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 228c9893a3SJeroen Ruigrok van der Werven.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 238c9893a3SJeroen Ruigrok van der Werven.\" SUCH DAMAGE. 248c9893a3SJeroen Ruigrok van der Werven.\" 25*2a163c36SJose Luis Duran.Dd December 6, 2023 268c9893a3SJeroen Ruigrok van der Werven.Dt STRFMON 3 278c9893a3SJeroen Ruigrok van der Werven.Os 288c9893a3SJeroen Ruigrok van der Werven.Sh NAME 29d96088b3SJose Luis Duran.Nm strfmon , 30d96088b3SJose Luis Duran.Nm strfmon_l 318c9893a3SJeroen Ruigrok van der Werven.Nd convert monetary value to string 328c9893a3SJeroen Ruigrok van der Werven.Sh LIBRARY 338c9893a3SJeroen Ruigrok van der Werven.Lb libc 348c9893a3SJeroen Ruigrok van der Werven.Sh SYNOPSIS 35fbded498SJeroen Ruigrok van der Werven.In monetary.h 368c9893a3SJeroen Ruigrok van der Werven.Ft ssize_t 37883738f2SMike Barcroft.Fn strfmon "char * restrict s" "size_t maxsize" "const char * restrict format" "..." 3859cc636dSJose Luis Duran.In monetary.h 3959cc636dSJose Luis Duran.In xlocale.h 403f19323aSIsabell Long.Ft ssize_t 413f19323aSIsabell Long.Fn strfmon_l "char * restrict s" "size_t maxsize" "locale_t loc" "const char * restrict format" "..." 428c9893a3SJeroen Ruigrok van der Werven.Sh DESCRIPTION 438c9893a3SJeroen Ruigrok van der WervenThe 448c9893a3SJeroen Ruigrok van der Werven.Fn strfmon 458c9893a3SJeroen Ruigrok van der Wervenfunction places characters into the array pointed to by 4659cc636dSJose Luis Duran.Fa s , 47fbded498SJeroen Ruigrok van der Wervenas controlled by the string pointed to by 488c9893a3SJeroen Ruigrok van der Werven.Fa format . 498c9893a3SJeroen Ruigrok van der WervenNo more than 508c9893a3SJeroen Ruigrok van der Werven.Fa maxsize 518c9893a3SJeroen Ruigrok van der Wervenbytes are placed into the array. 52d0d87283STim J. Robbins.Pp 533f19323aSIsabell LongThe 543f19323aSIsabell Long.Fn strfmon_l 5559cc636dSJose Luis Duranfunction takes an explicit locale argument, whereas the 563f19323aSIsabell Long.Fn strfmon 5759cc636dSJose Luis Duranfunction uses the current global or per-thread locale. 583f19323aSIsabell Long.Pp 59d0d87283STim J. RobbinsThe format string is composed of zero or more directives: 60d0d87283STim J. Robbinsordinary characters (not 611798791dSRuslan Ermilov.Cm % ) , 62d0d87283STim J. Robbinswhich are copied unchanged to the output stream; and conversion 63d0d87283STim J. Robbinsspecifications, each of which results in fetching zero or more subsequent 64d0d87283STim J. Robbinsarguments. 65d0d87283STim J. RobbinsEach conversion specification is introduced by the 66d0d87283STim J. Robbins.Cm % 67d0d87283STim J. Robbinscharacter. 68d0d87283STim J. RobbinsAfter the 69d0d87283STim J. Robbins.Cm % , 70d0d87283STim J. Robbinsthe following appear in sequence: 71d0d87283STim J. Robbins.Bl -bullet 72d0d87283STim J. Robbins.It 73d0d87283STim J. RobbinsZero or more of the following flags: 74d0d87283STim J. Robbins.Bl -tag -width "XXX" 75d0d87283STim J. Robbins.It Cm = Ns Ar f 76d0d87283STim J. RobbinsA 77d0d87283STim J. Robbins.Sq Cm = 78d0d87283STim J. Robbinscharacter followed by another character 79d0d87283STim J. Robbins.Ar f 80d0d87283STim J. Robbinswhich is used as the numeric fill character. 81d0d87283STim J. Robbins.It Cm ^ 82d0d87283STim J. RobbinsDo not use grouping characters, regardless of the current locale default. 83d0d87283STim J. Robbins.It Cm + 84d0d87283STim J. RobbinsRepresent positive values by prefixing them with a positive sign, 85d0d87283STim J. Robbinsand negative values by prefixing them with a negative sign. 86d0d87283STim J. RobbinsThis is the default. 871798791dSRuslan Ermilov.It Cm \&( 88d0d87283STim J. RobbinsEnclose negative values in parentheses. 891798791dSRuslan Ermilov.It Cm \&! 90d0d87283STim J. RobbinsDo not include a currency symbol in the output. 91d0d87283STim J. Robbins.It Cm \- 92d0d87283STim J. RobbinsLeft justify the result. 93d0d87283STim J. RobbinsOnly valid when a field width is specified. 94d0d87283STim J. Robbins.El 95d0d87283STim J. Robbins.It 96d0d87283STim J. RobbinsAn optional minimum field width as a decimal number. 97d0d87283STim J. RobbinsBy default, there is no minimum width. 98d0d87283STim J. Robbins.It 99d0d87283STim J. RobbinsA 100d0d87283STim J. Robbins.Sq Cm # 101d0d87283STim J. Robbinssign followed by a decimal number specifying the maximum 1027cfd67ceSJose Luis Duranexpected number of digits before the radix character. 1037cfd67ceSJose Luis DuranWhen this option is used, values that do not exceed the 1047cfd67ceSJose Luis Duranspecified number of digits are formatted so they will be 1057cfd67ceSJose Luis Durancorrectly aligned with other values printed using the same 1067cfd67ceSJose Luis Duranformat. 1077cfd67ceSJose Luis DuranThis includes always leaving space for a possible sign 1087cfd67ceSJose Luis Duranindicator, even if none is needed for a particular value. 109d0d87283STim J. Robbins.It 110d0d87283STim J. RobbinsA 111d0d87283STim J. Robbins.Sq Cm \&. 112d0d87283STim J. Robbinscharacter followed by a decimal number specifying the number 1130efec50eSJose Luis Duranof digits after the radix character. 114d0d87283STim J. Robbins.It 115d0d87283STim J. RobbinsOne of the following conversion specifiers: 116d0d87283STim J. Robbins.Bl -tag -width "XXX" 117d0d87283STim J. Robbins.It Cm i 118d0d87283STim J. RobbinsThe 119d0d87283STim J. Robbins.Vt double 120d0d87283STim J. Robbinsargument is formatted as an international monetary amount. 121d0d87283STim J. Robbins.It Cm n 122d0d87283STim J. RobbinsThe 123d0d87283STim J. Robbins.Vt double 124d0d87283STim J. Robbinsargument is formatted as a national monetary amount. 125d0d87283STim J. Robbins.It Cm % 126d0d87283STim J. RobbinsA 127d0d87283STim J. Robbins.Sq Li % 128d0d87283STim J. Robbinscharacter is written. 129d0d87283STim J. Robbins.El 130d0d87283STim J. Robbins.El 1318c9893a3SJeroen Ruigrok van der Werven.Sh RETURN VALUES 13259cc636dSJose Luis DuranIf the total number of resulting bytes, including the terminating 133a3fb6da9SGlen Barber.Dv NUL 13459cc636dSJose Luis Duranbyte, is not more than 1358c9893a3SJeroen Ruigrok van der Werven.Fa maxsize , 136fbded498SJeroen Ruigrok van der Werven.Fn strfmon 13759cc636dSJose Luis Duranand 13859cc636dSJose Luis Duran.Fn strfmon_l 13959cc636dSJose Luis Duranreturn the number of bytes placed into the array pointed to by 1408c9893a3SJeroen Ruigrok van der Werven.Fa s , 141fbded498SJeroen Ruigrok van der Wervennot including the terminating 142a3fb6da9SGlen Barber.Dv NUL 143fbded498SJeroen Ruigrok van der Wervenbyte. 1441798791dSRuslan ErmilovOtherwise, \-1 is returned, 1458c9893a3SJeroen Ruigrok van der Werventhe contents of the array are indeterminate, 1468c9893a3SJeroen Ruigrok van der Wervenand 1478c9893a3SJeroen Ruigrok van der Werven.Va errno 1488c9893a3SJeroen Ruigrok van der Wervenis set to indicate the error. 149cdd9d92dSJose Luis Duran.Sh EXAMPLES 150cdd9d92dSJose Luis DuranThe following example will format the value 151cdd9d92dSJose Luis Duran.Dq Li 1234567.89 152cdd9d92dSJose Luis Duranto the string 153cdd9d92dSJose Luis Duran.Dq Li $1,234,567.89 : 154cdd9d92dSJose Luis Duran.Bd -literal -offset indent 155cdd9d92dSJose Luis Duran#include <stdio.h> 156cdd9d92dSJose Luis Duran#include <monetary.h> 157*2a163c36SJose Luis Duran#include <locale.h> 158cdd9d92dSJose Luis Duran 159cdd9d92dSJose Luis Duranint 160*2a163c36SJose Luis Duranmain(void) 161cdd9d92dSJose Luis Duran{ 162cdd9d92dSJose Luis Duran char string[100]; 163cdd9d92dSJose Luis Duran double money = 1234567.89; 164cdd9d92dSJose Luis Duran 165cdd9d92dSJose Luis Duran if (setlocale(LC_MONETARY, "en_US.UTF-8") == NULL) { 166cdd9d92dSJose Luis Duran fprintf(stderr, "Unable to setlocale().\\n"); 167cdd9d92dSJose Luis Duran return (1); 168cdd9d92dSJose Luis Duran } 169cdd9d92dSJose Luis Duran 170cdd9d92dSJose Luis Duran strfmon(string, sizeof(string) - 1, "%n", money); 171cdd9d92dSJose Luis Duran printf("%s\\n", string); 172*2a163c36SJose Luis Duran 173*2a163c36SJose Luis Duran return (0); 174cdd9d92dSJose Luis Duran} 175cdd9d92dSJose Luis Duran.Ed 1768c9893a3SJeroen Ruigrok van der Werven.Sh ERRORS 1778c9893a3SJeroen Ruigrok van der WervenThe 178fbded498SJeroen Ruigrok van der Werven.Fn strfmon 1798c9893a3SJeroen Ruigrok van der Wervenfunction will fail if: 1808c9893a3SJeroen Ruigrok van der Werven.Bl -tag -width Er 1818c9893a3SJeroen Ruigrok van der Werven.It Bq Er E2BIG 1828c9893a3SJeroen Ruigrok van der WervenConversion stopped due to lack of space in the buffer. 183d0d87283STim J. Robbins.It Bq Er EINVAL 184d0d87283STim J. RobbinsThe format string is invalid. 185d0d87283STim J. Robbins.It Bq Er ENOMEM 186d0d87283STim J. RobbinsNot enough memory for temporary buffers. 1878c9893a3SJeroen Ruigrok van der Werven.El 1888c9893a3SJeroen Ruigrok van der Werven.Sh SEE ALSO 189d96088b3SJose Luis Duran.Xr localeconv 3 , 190d96088b3SJose Luis Duran.Xr xlocale 3 1918c9893a3SJeroen Ruigrok van der Werven.Sh STANDARDS 1928c9893a3SJeroen Ruigrok van der WervenThe 1938c9893a3SJeroen Ruigrok van der Werven.Fn strfmon 1948c9893a3SJeroen Ruigrok van der Wervenfunction 1958c9893a3SJeroen Ruigrok van der Wervenconforms to 196d0d87283STim J. Robbins.St -p1003.1-2001 . 1973f19323aSIsabell LongThe 1983f19323aSIsabell Long.Fn strfmon_l 1993f19323aSIsabell Longfunction conforms to 2003f19323aSIsabell Long.St -p1003.1-2008 . 2018c9893a3SJeroen Ruigrok van der Werven.Sh AUTHORS 2022677aa4bSRuslan Ermilov.An -nosplit 2038c9893a3SJeroen Ruigrok van der WervenThe 204fbded498SJeroen Ruigrok van der Werven.Fn strfmon 2058c9893a3SJeroen Ruigrok van der Wervenfunction was implemented by 2068fbf3d50SBaptiste Daroussin.An Alexey Zelkin Aq Mt phantom@FreeBSD.org . 2078c9893a3SJeroen Ruigrok van der Werven.Pp 2088c9893a3SJeroen Ruigrok van der WervenThis manual page was written by 2098fbf3d50SBaptiste Daroussin.An Jeroen Ruigrok van der Werven Aq Mt asmodai@FreeBSD.org 2108c9893a3SJeroen Ruigrok van der Wervenbased on the standards' text. 211b211af11STim J. Robbins.Sh BUGS 212b211af11STim J. RobbinsThe 213b211af11STim J. Robbins.Fn strfmon 214b211af11STim J. Robbinsfunction does not correctly handle multibyte characters in the 215b211af11STim J. Robbins.Fa format 216b211af11STim J. Robbinsargument. 217