How to print Numbers as Columns in Commodore BASIC

In this video I’m demonstrating how to print numbers in evenly spaced columns in Commodore BASIC.

On the C128 and the Plus/4 we can use a nifty little function called PRINT USING for this, with which we can format the output of any printed text or variable.

On the C64 and VIC-20 that function doesn’t exist, so we’ll have to convert a numeric value into a string (using the STR$ function), and then determine how long our string is. Following that we’ll have to manually pad our string value with as many spaces as are required.

BASIC 3.5 / BASIC 7

Here’s the full code for the C128 and Plus/4, which is based on my earlier Lottery Number generator listing. PRINT USING appears in line 120:

10 x=rnd(-ti)
20 for i=1 to 6
30 rn=int(rnd(1)*49)+1
40 for j=1 to i
50 if n(j)=rn then 30
60 next j
70 n(i)=rn
80 next i
100 print:gosub 200
110 for i=1 to 6
120 print using "#####";n(i);
130 next
140 print
199 goto 20
200 rem bubble sort
210 for i=5 to 1 step -1
220 for j=1 to i
230 x=n(j):y=n(j+1)
240 if x>y then n(j)=y:n(j+1)=x
250 next:next
299 return

BASIC 2.0

And here’s the same listing without PRINT USING for the C64 and VIC-20. The string formatting happens in the subroutine in line 300:

10 x=rnd(-ti)
20 for i=1 to 6
30 rn=int(rnd(1)*49)+1
40 for j=1 to i
50 if n(j)=rn then 30
60 next j
70 n(i)=rn
80 next i
100 print:gosub 200
110 for i=1 to 6
120 gosub 300:print a$;
130 next
140 print
199 goto 20
200 rem bubble sort
210 for i=5 to 1 step -1
220 for j=1 to i
230 x=n(j):y=n(j+1)
240 if x>y then n(j)=y:n(j+1)=x
250 next:next
299 return
300 rem space the numbers
310 a$=str$(n(i))
320 if len(a$)=2 then a$=" "+str$(n(i))
399 return

Any questions, please let me know. Happy retro hacking!

PS: It got a bit dark there at the end on my webcam. Help me get some lights by supporting me on Patreon ?





You can leave a comment on my original post.