NetBSD/usr.bin/col
lukem c1ceae17f0 Enable WARNS=4 by default for usr.bin, except for:
awk  bdes  checknr  compile_et  error  gss  hxtool  kgetcred  kinit
	klist  ldd  less  lex  locale  login  m4  man  menuc  mk_cmds
	mklocale  msgc  openssl  rpcgen  rpcinfo  sdiff  spell  ssh
	string2key  telnet  tn3270  verify_krb5_conf  xlint
2009-04-14 22:15:16 +00:00
..
Makefile Enable WARNS=4 by default for usr.bin, except for: 2009-04-14 22:15:16 +00:00
README
col.1
col.c

README

#	@(#)README	8.1 (Berkeley) 6/6/93

col - filter out reverse line feeds.

Options are:
	-b	do not print any backspaces (last character written is printed)
	-f	allow half line feeds in output, by default characters between
		lines are pushed to the line below
	-x	do not compress spaces into tabs.
	-l num	keep (at least) num lines in memory, 128 are kept by default

In the 32V source code to col(1) the default behavior was to NOT compress
spaces into tabs.  There was a -h option which caused it to compress spaces
into tabs.  There was no -x flag.

The 32V documentation, however, was consistent with the SVID (actually, V7
at the time) and documented a -x flag (as defined above) while making no
mention of a -h flag.  Just before 4.3BSD went out, CSRG updated the manual
page to reflect the way the code worked.  Suspecting that this was probably
the wrong way to go, this version adopts the SVID defaults, and no longer
documents the -h option.

The S5 -p flag is not supported because it isn't clear what it does (looks
like a kludge introduced for a particular printer).

Known differences between AT&T's col and this one (# is delimiter):
	Input			AT&T col		this col
	#\nabc\E7def\n#		#   def\nabc\r#		#   def\nabc\n#
	#a#			##			#a\n#
		- last line always ends with at least one \n (or \E9)
	#1234567 8\n#		#1234567\t8\n#		#1234567 8\n#
		- single space not expanded to tab
     -f #a\E8b\n#		#ab\n#			# b\E9\ra\n#
		- can back up past first line (as far as you want) so you
		  *can* have a super script on the first line
	#\E9_\ba\E8\nb\n#	#\n_\bb\ba\n#		#\n_\ba\bb\n#
		- always print last character written to a position,
		  AT&T col claims to do this but doesn't.

If a character is to be placed on a line that has been flushed, a warning
is produced (the AT&T col is silent).   The -l flag (not in AT&T col) can
be used to increase the number of lines buffered to avoid the problem.

General algorithm: a limited number of lines are buffered in a linked
list.  When a printable character is read, it is put in the buffer of
the current line along with the column it's supposed to be in.  When
a line is flushed, the characters in the line are sorted according to
column and then printed.