#!/usr/bin/perl -s

# visib - text filter to make all characters ASCII visible/printable
# Steve Kinzler, steve@kinzler.com, Sep 04
# https://kinzler.com/me/home.html#unix

$usage = "
usage: $0 [ -N ] [ -b ] [ -f ] [ -r ] [ -T ] [ -o | -x ] [ file ... ]
	-N	make newlines visible
	-b	don't make backspaces visible
	-f	don't make formfeeds visible
	-r	don't make carriage returns visible
	-T	make tabs visible
	-o	show octal values (default)
	-x	show hexadecimal values
See also cat(1) -v\n";
die $usage if $h;

$fmt = $x ? 'x%02x' : '%03o';

while (<>) {
	s/\n/\\n/g	if $N;
	s/[\000-\007\013\016-\037\177-\377]/sprintf("\\$fmt", ord($&))/eg;
	s/\010/\\b/g	unless $b;
	s/\f/\\f/g	unless $f;
	s/\r/\\r/g	unless $r;
	s/\t/\\t/g	if $T;
	print;
}
