Search code examples
functionmultilinebasicc64commodore

Multi-line functions in Commodore 64 BASIC


So, I'd like to write larger functions in Commodore 64 BASIC. So far, from what I'm seeing from other sources (such as various C64 wikis, as well as the user's manual for the C64 itself,) function definitions can only be one line long. That is to say, I can't seem to find an analogous construct in BASIC to brackets/whatever else other languages use to delineate code blocks.

Does anyone know how I'd write code blocks in BASIC that are more than one line?

Example of one-line function:

10 def fn X(n) = n + 1
20 print fn X(5) rem Correctly called function. This will output 6

But I can't do something like:

10 def fn X(n) = 
20 n = n + 1
30 print n
40 rem I'd like the definition of function X to end at line 30 above 
50 fn X(5) rem Produces syntax error on line 40

Thank you for your time!


Solution

  • Sadly C64 BASIC doesn't support more complicated functions.

    It does however support more complicated subroutines, and that's what you want in this case.

    10 rem you can set up n in advance here
    20 n = 23
    30 gosub 50
    40 rem n is now 24
    50 rem start of subroutine; this line is not needed, it's just here for clarity
    60 n=n+1
    70 print n
    80 return
    90 rem now you can call the subroutine on line 50 and it'll return at line 80
    

    Unfortunately passing parameters in to and returning values out of subroutines in C64 BASIC aren't formalized constructs, so you'll just have to work with ordinary variables as shown above.