Version 0.1.002 (released August 12th, 2012)
This version introduces procedures, and includes all of the fundamental building blocks for procedure logic: control flow, variables, error trapping, and basic logging and alerts. To try a procedure simply type it in and press the Run button.

Brand new features implemented in this release (features that were not included in Panorama 6):

- assign -- The assign statement assigns a value to a field or variable.
- catch -- The catch statement works with try and endcatch to trap errors in a sequence of statements.
- elseif -- The elseif statement allows multiple if decisions to be chained together.
- endcatch -- The endcatch statement works with try and catch to trap errors in a sequence of statements.
- endloop -- The endloop statement is used at the end of a loop.
- execute( -- The execute( function allows a formula to execute a sequence of statements and return a result.
- for -- The for statement is used at the beginning of a loop that loops a fixed number of times.
- info("labels") -- The info("labels") function lists the labels in the current procedure.
- looparray -- The looparray statement is used at the beginning of a loop that loops over the elements of an array.
- loopindex -- The loopindex statement allows a procedure to determine how many times a loop has been repeated.
- loopwhile -- The loopwhile statement is used at the beginning of a loop.
- nslog -- The nslog statement sends a message to the console log.
- parameterentity( -- The parameterentity( function returns the entity (field or variable) associated with a subroutine parameter, if any.
- try -- The try statement works with catch and endcatch to trap errors in a sequence of statements.

Features implemented in this release that work differently than they did in Panorama 6.

- alertyesno -- The alertyesno statement displays a modal alert window with a message and two buttons: Yes and No.
- Error Handling -- Techniques for trapping runtime errors instead of letting them abort the program.
- execute -- The execute statement allows a procedure to call a sequence of statements within the current procedure as a "mini-subroutine".
- executecatcherrors -- The executecatcherrors statement is the same as the execute statement, except for the fact that if an error occurs while running, it can be trapped by an if error statement immediately following the executecatcherrors statement.
- executelocal -- The executelocal statement is the same as the execute statement, but it shares local variables with the procedure that called it.
- goto -- The goto statement allows a procedure to arbitrarily jump from one spot to another within the procedure.
- info("procedurestack") -- The info("procedurestack") function returns the contents of Panorama's procedure call stack.
- message -- The message statement displays a modal alert window with a message.
- onerror -- The onerror statement can be used to catch all errors that are not trapped by if error or try statements.
- shortcall -- The shortcall statement allows a procedure to call a sequence of statements within the current procedure as a "mini-subroutine".
- usecallerslocalvariables -- The usecallerslocalvariables statement temporarily swaps out a subroutine's current local variables with the local variables of the procedure that called this subroutine. The statement can be used only in a subroutine, not in a calling procedure.
- usemylocalvariables -- The usemylocalvariables statement reverses the action of the UseCallersLocalVariables statement, switching back to the current procedure's normal local variables.

Features implemented in this release that work exactly the same as they did in Panorama 6.

- Comments -- A comment is a note inside a program.
- else -- The else statement works together with the if statement to specify statements that will be executed for both the true and false cases.
- endif -- The endif statement marks the end of statements controlled by a previoius if statement.
- functionvalue -- The functionvalue statement returns a value calculated by a procedure using the call(, callwithin( or execute( functions.
- global -- The global statement creates one or more global variables.
- if -- The if statement decides what code to execute next.
- info("dialogtrigger") -- The info("dialogtrigger") function returns the name of the last button pressed in an alert or dialog.
- info("error") -- The info("error") function returns the most recent error message.
- info("errorparameter") -- The info("errorparameter") function returns the parameter that caused a runtime error.
- info("errorstack") -- The info("errorstack") function returns the contents of the procedure stack after an error.
- info("errorstatement") -- The info("errorstatement") function returns the name of the statement that Panorama was trying to run at the time an error occurred.
- info("executeerrorsource") -- The info("executeerrorsource") function can be used in Error Handling code when an error occurs in code running via the execute statement or its siblings.
- info("localvariables") -- The info("localvariables") function builds a carriage return separated text array containing a list of the currently allocated local variables.
- info("parameters") -- The info("parameters") function returns the number of parameters passed to a subroutine.
- info("runninghandler") -- The info("runninghandler") function returns true if the current procedure is running as a "handler" procedure.
- local -- The local statement creates one or more local variables.
- loop -- The loop statement is used at the beginning of a loop.
- nop -- The nop statement does nothing (*n*o *op*eration).
- parameter( -- The parameter( function is used to transfer data between a main procedure and a subroutine.
- repeatloopif -- The repeatloopif statement decides whether to continue with a loop or to start over again from the top.
- return -- The return statement ends a subroutine.
- setparameter -- The setparameter statement is used to transfer data from a subroutine back to the main procedure that called it.
- stop -- The stop statement stops all running procedures immediately.
- stoploopif -- The stoploopif statement decides whether to continue with a loop or to exit the loop immediately.
- until -- The until statement is used at the end of a loop, and can control how many times the loop is executed.
- while -- The while statement is used at the end of a loop, and can control how many times the loop is executed.

ALL features that were added or changed in this release:

- alertyesno -- The alertyesno statement displays a modal alert window with a message and two buttons: Yes and No.
- assign -- The assign statement assigns a value to a field or variable.
- catch -- The catch statement works with try and endcatch to trap errors in a sequence of statements.
- endcatch -- The endcatch statement works with try and catch to trap errors in a sequence of statements.
- endif -- The endif statement marks the end of statements controlled by a previoius if statement.
- executecatcherrors -- The executecatcherrors statement is the same as the execute statement, except for the fact that if an error occurs while running, it can be trapped by an if error statement immediately following the executecatcherrors statement.
- goto -- The goto statement allows a procedure to arbitrarily jump from one spot to another within the procedure.
- info("dialogtrigger") -- The info("dialogtrigger") function returns the name of the last button pressed in an alert or dialog.
- info("errorparameter") -- The info("errorparameter") function returns the parameter that caused a runtime error.
- info("errorstack") -- The info("errorstack") function returns the contents of the procedure stack after an error.
- info("errorstatement") -- The info("errorstatement") function returns the name of the statement that Panorama was trying to run at the time an error occurred.
- info("labels") -- The info("labels") function lists the labels in the current procedure.
- info("localvariables") -- The info("localvariables") function builds a carriage return separated text array containing a list of the currently allocated local variables.
- info("parameters") -- The info("parameters") function returns the number of parameters passed to a subroutine.
- info("procedurestack") -- The info("procedurestack") function returns the contents of Panorama's procedure call stack.
- loopindex -- The loopindex statement allows a procedure to determine how many times a loop has been repeated.
- nop -- The nop statement does nothing (*n*o *op*eration).
- nslog -- The nslog statement sends a message to the console log.
- onerror -- The onerror statement can be used to catch all errors that are not trapped by if error or try statements.
- try -- The try statement works with catch and endcatch to trap errors in a sequence of statements.

See Also

- Version 0.1.001 (released July 7th, 2012) -- Summary of Version 0.1.001 (released 7/7/2012)
- Version 0.1.003 (released December 2nd, 2012) -- Summary of Version 0.1.003 (released 12/2/2012)
- Version 0.1.004 (released December 10th, 2012) -- Summary of Version 0.1.004 (released 12/10/2012)
- Version 0.1.005 (released December 21st, 2012) -- Summary of Version 0.1.005 (released 12/21/2012)
- Version 0.1.006 (released December 26th, 2012) -- Summary of Version 0.1.006 (released 12/26/2012)
- Version 0.1.007 (released May 1st, 2013) -- Summary of Version 0.1.007 (released 5/1/2013)
- Version 0.1.008 (released May 22nd, 2013) -- Summary of Version 0.1.008 (released 5/22/2013)
- Version 0.1.009 (released July 9th, 2013) -- Summary of Version 0.1.009 (released 7/9/2013)
- Version 0.1.010 (released October 14th, 2013) -- Summary of Version 0.1.010 (released 10/14/2013)
- Version 0.1.011 (released December 6th, 2013) -- Summary of Version 0.1.011 (released 12/6/2013)
- Version 0.1.012 (released August 29th, 2015) -- Summary of Version 0.1.012 (released 8/29/2015)
- Version 0.1.013 (released September 6th, 2015) -- Summary of Version 0.1.013 (released 9/6/2015)
- Version 0.1.014 (released September 14th, 2015) -- Summary of Version 0.1.014 (released 9/14/2015)
- Version 0.1.015 (released September 29th, 2015) -- Summary of Version 0.1.015 (released 9/29/2015)
- Version 0.1.016 (released October 12th, 2015) -- Summary of Version 0.1.016 (released 10/12/2015)
- Version 0.1.017 (released November 11th, 2015) -- Summary of Version 0.1.017 (released 11/11/2015)
- Version 0.1.018 (released December 7th, 2015) -- Summary of Version 0.1.018 (released 12/7/2015)
- Version 0.1.019 (released January 28th, 2016) -- Summary of Version 0.1.019 (released 1/28/2016)
- Version 0.1.020 (released February 15th, 2016) -- Summary of Version 0.1.020 (released 2/15/2016)
- Version 0.1.021 (released February 29th, 2016) -- Summary of Version 0.1.021 (released 2/29/2016)
- Version 0.1.022 (released March 1st, 2016) -- Summary of Version 0.1.022 (released 3/1/2016)
- Version 0.1.023 (released May 27th, 2016) -- Summary of Version 0.1.023 (released 5/27/2016)
- Version 0.1.024 (released June 12th, 2016) -- Summary of Version 0.1.024 (released 6/12/2016)
- Version 0.1.025 (released July 21st, 2016) -- Summary of Version 0.1.025 (released 7/21/2016)
- Version 0.1.026 (released August 29th, 2016) -- Summary of Version 0.1.026 (released 8/29/2016)
- Version 0.1.027 (released September 18th, 2016) -- Summary of Version 0.1.027 (released 9/18/2016)
- Version 0.1.028 (released November 9th, 2016) -- Summary of Version 0.1.028 (released 11/9/2016)
- Version 0.1.029 (released December 31st, 2016) -- Summary of Version 0.1.029 (released 12/31/2016)
- Version 0.1.030 (released February 12th, 2017) -- Summary of Version 0.1.030 (released 2/12/2017)
- Version 0.1.031 (released March 3rd, 2017) -- Summary of Version 0.1.031 (released 3/3/2017)
- Version 0.1.032 (released April 3rd, 2017) -- Summary of Version 0.1.032 (released 4/3/2017)
- Version 0.9 (released May 15th, 2017) -- Summary of Version 0.9 (released 5/15/2017)
- Version 0.9.001 (released July 18th, 2017) -- Summary of Version 0.9.001 (released 7/18/2017)
- Version 0.9.002 (released July 27th, 2017) -- Summary of Version 0.9.002 (released 7/27/2017)
- Version 0.9.003 (released September 10th, 2017) -- Summary of Version 0.9.003 (released 9/10/2017)
- Version 0.9.004 (released September 14th, 2017) -- Summary of Version 0.9.004 (released 9/14/2017)
- Version 0.9.005 (released September 19th, 2017) -- Summary of Version 0.9.005 (released 9/19/2017)
- Version 0.9.006 (released September 27th, 2017) -- Summary of Version 0.9.006 (released 9/27/2017)
- Version 0.9.007 (released October 3rd, 2017) -- Summary of Version 0.9.007 (released 10/3/2017)
- Version 0.9.008 (released October 12th, 2017) -- Summary of Version 0.9.008 (released 10/12/2017)
- Version 10.0.0 (released October 18th, 2017) -- Summary of Version 10.0.0 (released 10/18/2017)
- Version 10.0.01 (released December 10th, 2017) -- Summary of Version 10.0.01 (released 12/10/2017)
- Version 10.1 (released August 6th, 2018) -- Summary of Version 10.1 (released 8/6/2018)
- Version 10.1.1 (released August 30th, 2018) -- Summary of Version 10.1.1 (released 8/30/2018)
- Version 10.1.2 (released November 15th, 2018) -- Summary of Version 10.1.2 (released 11/15/2018)
- Version 10.2 (released October 7th, 2021) -- Summary of Version 10.2 (released 10/7/2021)