Opened 14 months ago

Last modified 14 months ago

#368 new defect

tty_write_ outputs erroneous spacing.

Reported by: canthony Owned by: Eric Swenson
Priority: minor Milestone:
Component: Hardcore Version:
Keywords: line_length tty_write Cc:

Description

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.

Attachments (3)

tty_write.ec (790 bytes ) - added by canthony 14 months ago.
tty_write.trace1.txt (126.6 KB ) - added by canthony 14 months ago.
Trace though pl1 code of tty_trace call that overflows col
tty_write.trace2.txt (127.7 KB ) - added by canthony 14 months ago.
Trace though pl1 code of tty_trace call that generates the extra spaces

Download all attachments as: .zip

Change History (4)

by canthony, 14 months ago

Attachment: tty_write.ec added

by canthony, 14 months ago

Attachment: tty_write.trace1.txt added

Trace though pl1 code of tty_trace call that overflows col

by canthony, 14 months ago

Attachment: tty_write.trace2.txt added

Trace though pl1 code of tty_trace call that generates the extra spaces

Note: See TracTickets for help on using tickets.