You are here: Home DOCUMENTATION information SBASIC Manual - Page 42

Technological Arts Inc.

Your Shopping Cart

Your Cart is currently empty.

SBASIC Manual - Page 42

Article Index
SBASIC Manual
Page 2
Page 3
Page 4
Page 5
Page 6
Page 7
Page 8
Page 9
Page 10
Page 11
Page 12
Page 13
Page 14
Page 15
Page 16
Page 17
Page 18
Page 19
Page 20
Page 21
Page 22
Page 23
Page 24
Page 25
Page 26
Page 27
Page 28
Page 29
Page 30
Page 31
Page 32
Page 33
Page 34
Page 35
Page 36
Page 37
Page 38
Page 39
Page 40
Page 41
Page 42
Page 43
Page 44
Page 45
Page 46
Page 47
Page 48
Page 49
Page 50
Page 51
Page 52
Page 53
Page 54
Page 55
Page 56
Page 57
Page 58
Page 59
Page 60
Table of Contents
Index
All Pages

     SBasic User's Manual     SBasic Version 2.7             Page 42
     Printed:  December 5, 1999
     Subroutines, GOSUB, and USR()


     SBasic supports the traditional Basic concept of subroutines.  A
     subroutine is a block of SBasic statements that can be invoked, or
     called, from elsewhere in the SBasic program.  After these statements
     complete execution, control returns to the calling section.

     A subroutine contains a line label marking the start of the
     subroutine, and at least one RETURN statement, which transfers control
     back to the calling section.

     The calling section of SBasic code invokes, or calls, a subroutine by
     means of the GOSUB statement.

     Example:

          main:
          do                            ' start of an endless loop
               gosub foo                ' call subroutine FOO
          loop                          ' loop forever

          foo:                          ' start of subroutine FOO
          a = a + 1                     ' increment A
          return                        ' return to caller

     This example, while not very useful, shows how a subroutine is invoked
     and how it is defined.  Note that you can use a GOSUB to a subroutine
     before that subroutine is defined in your code.

     Note that code inside a subroutine has full access to all variables
     defined with the DECLARE statement.  Changes made to a variable from
     inside a subroutine remain in effect when control returns from that
     subroutine.

     All GOSUBs push a return address onto the target's return stack.
     SBasic's data stack resides a fixed distance below the return stack.
     Excessive nesting of GOSUBs could clobber values on the data stack.

     The address of the subroutine invoked must be either a label or a
     variable; you may not use algebraic expressions or functions as
     addresses for a GOSUB statement.

     GOSUBs may pass one or more arguments to the called subroutine.  Your
     code should include the arguments after the name of the subroutine
     invoked.  For example:

          main:
          do                            ' start an endless loop
               gosub foo, 3, j          ' call FOO with two arguments
          loop                          ' loop forever