Most programming languages offer support for subroutines.
When execution changes between subroutines, different sets of variables and functions ("scopes") are available to the program.
Frequently these sets are defined by the placement of the variable and function declarations ("static scoping" or "lexical scoping").
These sets may also be defined by special modifiers to the variable and function declarations.

Show the different scope modifiers available in your language and briefly explain how they change the scope of their variable or function.
If your language has no scope modifiers, note it.

singleton = "global variable"
 
assume_global()
{
  Global  ; assume all variables declared in this function are global in scope
  Static callcount := 0   ; except this one declared static, initialized once only
  MsgBox % singleton  ; usefull to initialize a bunch of singletons
  callcount++ 
}
 
assume_global2()
{
  Local var1  ; assume global except for var1  (similar to global scope declaration)
  MsgBox % singleton
}
 
object(member, value = 0, null = 0) 
{
  Static  ; assume all variables in this function to be static
  If value    ; can be used to simulate objects
	_%member% := value
  Else If null
	_%member% := ""
  Return (_%member%)
}