The consecutive assignments
Spud = Char(Cats(i));
Spud = {};
are overwriting the first with the second. They are also inside the outer loop, which is why @jthi suggests the list is being recreated rather than extended.
Adding a
show( row(), spud, ...etc... );
statement several places to get intermediate results in the log can help too. Or
write( "\!n x=" || char(x) || " y=" || char(y) );
if you want to format it. Or
write( Eval Insert("\!n x=^x^ y=^y^) );
which might be easier to read.
The JSL editor has a reformat command that can help when the loop indentation gets visually misaligned.
Craige