VIEWFRAME 1.1 William L. Colsher creamneggs@aol.com **************************************************************************** This article is reprinted from issue 2.2 (March/April 1992) of PIE Developers magazine. Copyright(C) 1996 by Creative Digital Publishing Inc. All rights reserved. **************************************************************************** ViewFrame by Jason Harper is the first major developer tool for the MessagePad to be published by a third party (in this case, Creative Digital Systems, the publisher of this magazine as well). ViewFrame consists of three applications: * ViewFrame - a utility for examining and editing NewtonScript objects * ViewFrame Editor - a tool for writing simple programs on the MessagePad * Programmer's Keyboard - to ease on screen entry of NewtonScript The full ViewFrame package requires a bit over 100K. Given the recently released 1.05 system, you need a storage card. You'll also want to be sure you have good backups on either another storage card or your desktop by using the Newton Connection Kit early and often. ViewFrame is a powerful package. What can you do with ViewFrame? The answer to that depends on how brave you are (or how recent your backups are). ViewFrame's basic operation is object browsing. You can use it to examine any object in the Newton. ViewFrame also allows you to modify writable objects by changing the value of slots or array elements, and adding and deleting slots. Of course you can also browse soups (even create sophisticated queries) and edit their contents as well. In addition to the expected object browser and editors ViewFrame can decompile any CodeBlock into NewtonScript. There are a few limitations (this is version 1.0 after all). For example, conditional expressions aren't fully rebuilt into valid NewtonScript but rather left in a form that reflects the underlying bytecode language. Also nested function definitions aren't fully listed. In general the limitations are not a problem since the only legitimate purpose of decompiling a copyrighted program (such as the Newton OS) is education. You should also note that anything you learn (that's not officially documented) using ViewFrame on a specific Newton platform is most likely only relevant to that specific machine. It is also usually illegal to decompile a program for the purpose of "reverse engineering". When you get tired of browsing through the MessagePad's ROM you can write some NewtonScript programs using the ViewFrame Editor and Programmer's Keyboard. While you can't write complete applications, you can learn quite a bit about NewtonScript. (For the many individuals who want a taste of NewtonScript before investing in the NTK, ViewFrame is the only game in town.) But wait, there's more! You can use ViewFrame to display objects on the MessagePad without recourse to the Inspector. You can even have ViewFrame call your application when ViewFrame is being closed so your debugging code can shut itself off. Yep, you can finally debug communications programs! Finally, like good ol' ResEdit, ViewFrame is extensible. You can add your own Programmer's Keyboard or ViewFrame Editor if those supplied are not to your liking. You can also write new object viewing and editing functions. This process is somewhat more complex, but if you are in a position where you need this functionality you also know enough to create it fairly easily. By now you should be getting the idea. ViewFrame is a nearly indispensable development tool, tremendously educational, and a whole lot of fun. The manual is well written and includes a lot of information that is not presently available anywhere else. The only thing that ViewFrame doesn't have is a NewtonScript tutorial, (nor does it contain any of the basic Newton documentation delivered with the Newton Tool Kit). Complete NewtonScript novices still need to gain access to at least the NTK documentation. (One obvious add-on product is a NewtonScript tutorial with exercises tailored to ViewFrame.) I highly recommend ViewFrame to every Newton programmer. Get it, Use it, Whoop!