p The .Fn strvis and .Fn strvisx functions copy into .Fa dst a visual representation of the string .Fa src . The .Fn strvis function encodes characters from .Fa src up to the first .Dv NUL . The .Fn strvisx function encodes exactly .Fa len characters from .Fa src (this is useful for encoding a block of data that may contain .Dv NUL Ns 's). Both forms .Dv NUL terminate .Fa dst . The size of .Fa dst must be four times the number of characters encoded from .Fa src (plus one for the .Dv NUL ) . Both forms return the number of characters in dst (not including the trailing .Dv NUL ) .
p The encoding is a unique, invertible representation comprised entirely of graphic characters; it can be decoded back into the original form using the .Xr unvis 3 or .Xr strunvis 3 functions.
p There are two parameters that can be controlled: the range of characters that are encoded, and the type of representation used. By default, all non-graphic characters. except space, tab, and newline are encoded. (See .Xr isgraph 3 . ) The following flags alter this: l -tag -width VIS_WHITEX t Dv VIS_SP Also encode space. t Dv VIS_TAB Also encode tab. t Dv VIS_NL Also encode newline. t Dv VIS_WHITE Synonym for .Dv VIS_SP | .Dv VIS_TAB | .Dv VIS_NL . t Dv VIS_SAFE Only encode "unsafe" characters. Unsafe means control characters which may cause common terminals to perform unexpected functions. Currently this form allows space, tab, newline, backspace, bell, and return - in addition to all graphic characters - unencoded. .El
p There are three forms of encoding. All forms use the backslash character .Ql \e to introduce a special sequence; two backslashes are used to represent a real backslash. These are the visual formats: l -tag -width VIS_CSTYLE t (default) Use an .Ql M to represent meta characters (characters with the 8th bit set), and use caret .Ql ^ to represent control characters see
f ( Xr iscntrl 3 ) . The following formats are used: l -tag -width xxxxx t Dv \e^C Represents the control character .Ql C . Spans characters .Ql \e000 through .Ql \e037 , and .Ql \e177 (as .Ql \e^? ) . t Dv \eM-C Represents character .Ql C with the 8th bit set. Spans characters .Ql \e241 through .Ql \e376 . t Dv \eM^C Represents control character .Ql C with the 8th bit set. Spans characters .Ql \e200 through .Ql \e237 , and .Ql \e377 (as .Ql \eM^? ) . t Dv \e040 Represents .Tn ASCII space. t Dv \e240 Represents Meta-space. .El
p t Dv VIS_CSTYLE Use C-style backslash sequences to represent standard non-printable characters. The following sequences are used to represent the indicated characters: d -unfilled -offset indent .Li \ea Tn - BEL No (007) .Li \eb Tn - BS No (010) .Li \ef Tn - NP No (014) .Li \en Tn - NL No (012) .Li \er Tn - CR No (015) .Li \et Tn - HT No (011) .Li \ev Tn - VT No (013) .Li \e0 Tn - NUL No (000) .Ed
p When using this format, the nextc parameter is looked at to determine if a .Dv NUL character can be encoded as .Ql \e0 instead of .Ql \e000 . If .Fa nextc is an octal digit, the latter representation is used to avoid ambiguity. t Dv VIS_OCTAL Use a three digit octal sequence. The form is .Ql \eddd where .Em d represents an octal digit. .El
p There is one additional flag, .Dv VIS_NOSLASH , which inhibits the doubling of backslashes and the backslash before the default format (that is, control characters are represented by .Ql ^C and meta characters as .Ql M-C ) . With this flag set, the encoding is ambiguous and non-invertible. .Sh SEE ALSO .Xr vis 1 , .Xr unvis 1 , .Xr unvis 3 .Sh HISTORY These functions first appeared in 4.4BSD.