Version 10.2.0 b28 (released August 23, 2022)

If you write Panorama code, you really should be using debug instrumentation. This release makes using instrumentation even easier than before. In fact, with b28 you can start using instrumentation with these four simple steps:

1. Open the Advanced Preferences panel and enable the Instrumentation Panel (you’ll only have to do this once).
2. Open a procedure window and add one or more zlog statements to the code (works just like message, but output goes to instrumentation). Leave the procedure window open.
3. Using the Instrumentation menu (microscope icon), choose Monitor Log in Terminal.app (or BBEdit if you have BBEdit 14.5 or later installed). A new terminal window will appear. (Note from the future: Starting with b34, Panorama now has a built in Instrumenation Log window, so using Terminal.app or BBEdit is no longer necessary. See Debug Instrumentation.
4. Run your procedure. The output from the zlog statements will appear in the terminal window as the program runs.

There is no step 5. You don’t have to worry about setting up Console.app, or enabling coverage of your procedure, or anything else. And once you’ve done this once, there are only two steps: add zlog statements to your code, and run the procedure. When you’re done debugging, just close the procedure window. You don’t even need to remove the zlog statements, they’ll automatically be disabled when the procedure window is closed. If you later need to do further debugging, they’ll be ready for further use simply by opening the procedure window again.

Of course there are additional details if you want to read about them (see Debug Instrumentation, but it’s not really necessary for basic debugging.

In addition to the changes to debug instrumentation, there is also a potpourri of assorted bug fixes, as listed below.

- It’s now super easy and convenient to to dynamically monitor debug instrumentation activity with Terminal.app or BBEdit. No special setup is required – just one menu command and the instrumentation activity is visible. Thank you to Mark de Jong for providing the inspiration to use the tail shell command for monitoring using Terminal.app, and to Dr. Drang for his blog post that explained how to do this with BBEdit (https://leancrew.com/all-this/2022/06/bbedit-tail-mode-and-bbtail/).
- Debug instrumentation now defaults to automatically enabled coverage for open procedure windows. This means that you no longer need to explicitly enable and disable coverage for each procedure. This default can be turned off if you don’t want automatic instrumentation coverage of open procedures.
- You are now allowed to enable instrumentation coverage even if the current procedure doesn’t contain any ZLOG statements (you will be asked to confirm that you really want to do this).
- New ShellScriptWithTerminal statement runs a shell script in a new Terminal.app window. This is similar to the ShellScript statement, but the results are visible in the terminal window (so this is handy for debugging shell scripts).
- Timer code no longer automatically runs with showlater. (This reverses a change in b27, which fixes problems some users encountered with .Initialize code.)
- The ImportText statement no longer deletes all existing data if you append “” (empty text).
- Fixed the EndShowLater statement, it no longer causes a syntax error.
- The Right statement now works correctly when there are hidden fields in the data sheet.
- Closing a Text Editor Object with the closeactiveobject statement now returns focus to the form itself. (This means that the up/down arrow keys will still work after closing the editor.)
- The Database Options dialog now only uploads the database server configuration if the configuration has actually changed. (In the past, it would always upload when the OK button was pressed in this dialog, even if the server configuration options hadn’t changed. The server configuration options are the options on the Server panel of this dialog.)
- Binary values longer than 64 bytes will now be displayed in the data sheet as <BINARY DATA (nn bytes)> instead of being dumped as hex.
- The radixstr( and hexstr( functions now interpret text values as binary data, instead of converting the text to a number. This is compatible with how Panorama 6 did it, and I think makes more sense.
- Fixed the radixstr( function so that it no longer crashes if empty text was specified as as the radix choice [for example radixstr(“”,23)].
- Implemented the webhomesubfolder( function.
- Fixed the opensavedwindows statement so that it will work with user defined initial window positions.
- Panorama no longer crashes when a large binary value is assigned into a Binary field.
- Fixed an edge case that could cause arrayfilter( to crash if it contains an “illegal” formula that returns a nil result.
- Removed Single Step from the Program menu.
- Applied documentation suggestions and corrections from Thomas Cooper, David Scott and Craig MacPherson