﻿id	summary	reporter	owner	description	type	status	priority	milestone	component	version	resolution	keywords	cc
368	tty_write_ outputs erroneous spacing.	canthony	Eric Swenson	"Attached is tty_write.ec, containing:

{{{
&command_line off
stty -delay 0,0,0,0,0,0 -modes ^erkl,^esc,^ll
flnnl AAAAAAAAAAAAAAAAAAAAAAAAAA
flnnl BBBBBBBBBBBBBBBBBBBBBBBBBB
flnnl CCCCCCCCCCCCCCCCCCCCCCCCCC
flnnl DDDDDDDDDDDDDDDDDDDDDDDDDD
flnnl EEEEEEEEEEEEEEEEEEEEEEEEEE
flnnl FFFFFFFFFFFFFFFFFFFFFFFFFF
flnnl GGGGGGGGGGGGGGGGGGGGGGGGGG
flnnl HHHHHHHHHHHHHHHHHHHHHHHHHH
flnnl IIIIIIIIIIIIIIIIIIIIIIIIII
flnnl JJJJJJJJJJJJJJJJJJJJJJJJJJ
flnnl KKKKKKKKKKKKKKKKKKKKKKKKKK
flnnl LLLLLLLLLLLLLLLLLLLLLLLLLL
flnnl MMMMMMMMMMMMMMMMMMMMMMMMMM
flnnl NNNNNNNNNNNNNNNNNNNNNNNNNN
flnnl OOOOOOOOOOOOOOOOOOOOOOOOOO
flnnl PPPPPPPPPPPPPPPPPPPPPPPPPP
flnnl QQQQQQQQQQQQQQQQQQQQQQQQQQ
flnnl RRRRRRRRRRRRRRRRRRRRRRRRRR
flnnl SSSSSSSSSSSSSSSSSSSSSSSSSS
flnnl TTTTTTTTTTTTTTTTTTTTTTTTTT
flnnl UUUUUUUUUUUUUUUUUUUUUUUUUU
flnnl WWWWWWWWWWWWWWWWWWWWWWWWWW
}}}

When executed, the following output is generated:

{{{
ec tty_write
AAAAAAAAAAAAAAAAAAAAAAAAAABBBBBBBBBBBBBBBBBBBBBBBBBBCCCCCCCCCCCCCCCCCCCCCCCCCCDD
DDDDDDDDDDDDDDDDDDDDDDDDEEEEEEEEEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFFFFFFFFFFFFFFGGGG
GGGGGGGGGGGGGGGGGGGGGGHHHHHHHHHHHHHHHHHHHHHHHHHHIIIIIIIIIIIIIIIIIIIIIIIIIIJJJJJJ
JJJJJJJJJJJJJJJJJJJJKKKKKKKKKKKKKKKKKKKKKKKKKKLLLLLLLLLLLLLLLLLLLLLLLLLLMMMMMMMM
MMMMMMMMMMMMMMMMMMNNNNNNNNNNNNNNNNNNNNNNNNNNOOOOOOOOOOOOOOOOOOOOOOOOOOPPPPPPPPPP
PPPPPPPPPPPPPPPPQQQQQQQQQQQQQQQQQQQQQQQQQQRRRRRRRRRRRRRRRRRRRRRRRRRRSSSSSSSSSSSS
SSSSSSSSSSSSSSTTTTTTTTTTTTTTTTTTTTTTTTTT                                        
                                                                        UUUUUUUU
UUUUUUUUUUUUUUUUUU                                                                                                                                              
}}}


In wtcb.incl.pl1, line 81 is:

{{{
    2 actcol fixed bin (9) unsigned unaligned,          /* tty column position */
}}}

tty_write_ tracks the tty column position there; when the column position exceeds 511, the 9 bit value overflows and wraps around zero.

Also in wtcb.incl.pl1, line 81:

{{{
    2 white_col fixed bin (17) unaligned,               /* column position resulting from trailing white space */
}}}

Note that this is an 18 bit value.

In tty_write.pl1, lines 1161 to 1167:
{{{
insert_white:                  
     proc;
             
/* this procedure puts white space into the output string */
  
        if wcol ^= col                          /* make sure we're not already where we belong */
        then do;
}}}

Normally wcol tracks col; but due to the overflow of col, insert_space appends spaces to the output to advance col to match wcol.

Note: col and wcol are local copies of wtcb.col and wtcb.white_col, declared as fixed bin.  The overflow occurs when tty_write finishes a string and updates wtcb from the local copies; on the next call to tty_write the locals are restored from wtcb and insert_white generates the extra spaces.


"	defect	new	minor		Hardcore			line_length tty_write	
