CONTENTS Title Page Copyright Page Preface 1 Overview of DECforms Software 1.1 DECforms Definitions 1.2 DECforms Structure: An Analogy 1.3 Components of DECforms Software 1.4 DECforms Command Summary 1.5 Proposed Standard for Form Interface Management 2 Sample Applications and Demonstration Forms 2.1 Preparing to Run the Sample Applications 2.2 Running the Introductory Sample Application 2.3 Running the Advanced Sample Application 2.3.1 Writing a Check 2.3.2 Depositing Cash 2.3.3 Withdrawing Cash 2.3.4 Transferring Funds Between Accounts 2.3.5 Reviewing the Check Register and Account Data 2.3.6 Finishing Your Tasks with the Sample Application 2.4 Displaying the Demonstration Forms 3 Structure of a Form 3.1 Form Data 3.2 Form Records 3.3 Layouts 3.4 Viewports 3.5 Panels 3.5.1 Literals 3.5.2 Panel Fields 3.5.3 Panel Groups 3.5.4 Icons 3.6 Responses 3.6.1 Accept Responses 3.6.2 Control Text Responses 3.6.3 Request Responses 3.6.4 Internal Responses 3.6.5 Response Steps 3.7 Methods for Creating Forms 3.8 How a Form Is Described in the IFDL 4 Getting Started with DECforms Software 4.1 Creating a Form 4.1.1 Invoking the Form Development Environment 4.1.2 Modifying the Default Layout 4.1.3 Creating and Choosing Panels 4.1.4 Creating the Appearance of the First Panel 4.1.5 Creating the Panel for Writing Checks 4.1.6 Creating the Panel for Making Deposits 4.1.7 Looking at Form Data 4.1.8 Testing the Form 4.1.9 Extracting the Panels for Printing 4.1.10 Exiting from the FDE 4.2 Planning Forms Applications 4.2.1 Defining Program Data and Records 4.2.2 Defining Form Data and Form Records 4.2.3 Determining Panel Use 4.2.4 Compiling, Linking, and Running the Application 5 Using the Form Development Environment 5.1 Invoking the FDE 5.1.1 Specifying an Editor for IFDL Text Editing 5.1.2 Using the FDE Main Menu 5.1.3 Using FDE Function Keys 5.1.4 Creating a New Form 5.1.5 Editing an Existing Form 5.2 Using FDE Main Menu Choices at the Form Level 5.2.1 Specifying the Output Type 5.2.2 Changing the Form Name 5.2.3 Editing IFDL Source Code 5.3 Using FDE Main Menu Choices at the Layout Level 5.3.1 Selecting a Layout 5.3.2 Creating a Layout 5.3.3 Changing Layout Attributes 5.3.4 Testing Your Form 5.3.5 Editing IFDL Source Code 5.4 Using FDE Main Menu Choices at the Panel Level 5.4.1 Selecting a Panel 5.4.2 Creating a Panel 5.4.3 Changing Panel Attributes 5.4.4 Editing Panel Appearance 5.4.5 Editing IFDL Source Code 5.5 Exiting from the FDE 5.6 Recovering an FDE Session 6 Using the Panel Editor 6.1 Invoking and Exiting from the Panel Editor 6.2 Screen Display 6.2.1 Current Panel 6.2.2 Status Line 6.2.3 Message Panel 6.2.4 Command Line 6.2.5 Menus 6.2.6 Information Window 6.2.7 Help Windows 6.3 Using Panel Editor Commands 6.3.1 Entering Commands 6.3.2 Using Command Macros for Text Substitution 6.3.3 Using Expressions 6.3.4 Defining Symbols 6.3.5 Defining Panel Editor Function Keys 6.3.6 Executing a Series of Commands in a Command Script 6.4 Creating and Editing the Appearance of Panels 6.4.1 Moving the Cursor 6.4.2 Using the Repeat Key Function 6.4.3 Creating, Deleting, and Restoring Viewports 6.4.4 Creating, Deleting, and Restoring Panels 6.4.5 Choosing Panels 6.4.6 Setting Video Attributes 6.4.7 Modifying Video Attributes 6.4.8 Modifying the Color of Display Attributes 6.4.9 Setting the Font Size 6.4.10 Modifying the Font Size 6.4.11 Setting Line Width 6.4.12 Modifying Line Width 6.4.13 Setting the Character Set 6.4.14 Modifying the Character Set 6.4.15 Setting the Text Path 6.4.16 Modifying the Text Path 6.4.17 Creating Panel Fields 6.4.18 Modifying Panel Field Descriptions and Pictures 6.4.19 Creating Text Objects 6.4.20 Creating Graphic Objects 6.4.21 Selecting and Deselecting Objects 6.4.22 Moving Objects Within a Panel 6.4.23 Using the Clipboard 6.4.24 Deleting and Restoring Panel Objects 6.4.25 Creating Icons 6.4.26 Creating an Icon-Based Menu 6.4.27 Creating Panel Groups 6.4.28 Changing the Order of Objects in a Panel 6.4.29 Selecting and Deselecting Compound Objects 6.5 Specifying Display Attributes Based on Terminal Type 6.6 Recovering an Editing Session 7 Translating IFDL Source Files and Form Files 7.1 Translating IFDL Source Files into Form Files 7.1.1 IFDL Translator Output: Form Files 7.1.2 IFDL Translator Output: Listing Files 7.1.3 IFDL Translator Output: LSE Diagnostics Files 7.2 Translating Form Files Back into IFDL Source Files 7.3 Correcting Errors on VMS Systems 8 Declaring, Displaying, and Tracking Data 8.1 Assigning Default Values to Fields 8.2 Altering the Video Attributes of Panel Fields 8.3 Declaring and Displaying Groups and Arrays 8.3.1 Storing Array Data in a Form 8.3.2 Displaying Data Stored in Form Data Groups 8.3.3 Using Corresponding Subscripts in Field Description Entries 8.3.4 Activating Panel Groups for Input 8.3.5 Specifying Navigation in a Panel Group 8.3.6 Passing Group Data Between the Program and Form 8.4 Transferring Data Explicitly 8.5 Determining What Changed During Operator Input 8.5.1 Using Tracked Form Data Items 8.5.2 Using Receive Shadow Records 8.5.3 Using Send Shadow Records 9 Controlling Form Processing 9.1 Using IF Response Steps 9.2 Using Control Text Responses 9.3 Controlling the Activation List 9.3.1 Using the ACTIVATE Response Step 9.3.2 Controlling the Activation List During the Accept Phase 9.3.3 Using Conditional Protection in Navigation 9.3.4 Using the DEACTIVATE Response Step 9.4 Writing Responses That Call Escape Routines 9.5 Moving Between Panels 9.6 Waiting for Operator Input 9.7 Printing Panels 9.8 Returning Control to the Application 10 Designing the Operator Interface 10.1 Using Viewports 10.2 Creating Scrolled Regions 10.2.1 Displaying Scrolled Data 10.2.2 Setting Up the Operator's Control of a Scrolled Region 10.3 Defining Form Function Keys 10.3.1 Binding Functions to Keys 10.3.2 Using System Function Keys 10.3.3 Writing Function Responses 10.3.4 Disabling Built-In Function Key Bindings 10.4 Using an UNDEFINED, USER, or BUILTIN FUNCTION Declaration 10.5 Modifying the Keypad Mode 10.6 Signaling the Operator 10.7 Sending Messages to the Operator 10.7.1 Sending Messages from the Form 10.7.2 Sending Messages from a Program or Escape Routine 10.8 Providing Online Help 10.8.1 Using Help Messages 10.8.2 Providing Hints 10.8.3 Using Help Panels 10.8.4 Creating Levels of Help Panels 10.8.5 Creating a Hierarchical Help Menu 11 Getting the Best Performance from Your Form 11.1 Optimizing the Display of Information 11.1.1 Displaying Panel Objects 11.1.2 Using Terminal Hardware Scrolling 11.1.3 Using Double-High and Double-Wide Attributes 11.1.4 Optimizing Screen Clearing 11.1.5 Improving Panel Display on VMS Systems 11.2 Optimizing Form Processing 11.2.1 Placing Function Responses 11.2.2 Preventing Unnecessary Validation 11.2.3 Activating Panel Fields 11.2.4 Specifying the VT100 Device Type 11.2.5 Using Multiple Sessions 11.3 Optimizing Field Input and Processing 11.3.1 Formatting Input Pictures 11.3.2 Specifying Panel Field Processing 11.4 Optimizing Communication Between the Form and the Application 11.4.1 Organizing Form Records 11.4.2 Performing Data Conversion 11.5 Improving Performance When Enabling a Form 11.5.1 Creating Form Object Modules 11.5.2 Using VMS Shareable Images 12 Examining the Sample Applications 12.1 Data Declarations in the Introductory Sample Form and Application 12.2 VMS API Request Calls in the Introductory Sample Application 12.2.1 ENABLE Request 12.2.2 ACCOUNT Record SEND Request 12.2.3 UPDATE Record TRANSCEIVE Request 12.2.4 GET_CHECK Record RECEIVE Request 12.2.5 GET_DEPOSIT Record RECEIVE Request 12.2.6 DISABLE Request 12.3 Portable API Request Calls in the Advanced Sample Application 12.3.1 ENABLE Request 12.3.2 SEND Requests 12.3.3 RECEIVE Requests 12.3.4 TRANSCEIVE Request 12.3.5 DISABLE Request 12.3.6 RECEIVE and SEND Requests in an Operator Transaction A Default Key Bindings for Built-In Functions B Panel Editor Function Keys and Keypad C Names of Keys Definable in the Panel Editor D Panel Editor Commands CENTER SELECTED OBJECTS CHOOSE COPY FROM CLIPBOARD COPY SELECTED OBJECTS TO CLIPBOARD CREATE FIELD CREATE GROUP CREATE ICON CREATE MARKED OBJECT CREATE PANEL CREATE POINT CREATE POLYLINE CREATE RECTANGLE CREATE TEXT CREATE VIEWPORT DEFINE COLOR DEFINE KEY DEFINE SYMBOL DELETE CHARACTER DELETE NAMED DELETE PANEL DELETE SELECTED OBJECTS DELETE VIEWPORT DESELECT ALL OBJECTS DESELECT AREA DESELECT AT DESELECT LAST DESELECT MARKED AREA DESELECT NAMED DISABLE BELL DISABLE ECHO DISABLE HINTS ENABLE BELL ENABLE ECHO ENABLE HINTS EXIT GROUP SELECTED OBJECTS HELP INSERT FROM CLIPBOARD LIST PANELS LIST VIEWPORTS MARK MODIFY FIELD MODIFY GROUP MODIFY PANEL display-attribute COLOR MODIFY PANEL TERMINAL WIDTH MODIFY PANEL VIEWPORT MODIFY SELECTED display-attribute COLOR MODIFY SELECTED OBJECTS CHARACTER SET MODIFY SELECTED OBJECTS FONT SIZE MODIFY SELECTED OBJECTS LINE WIDTH MODIFY SELECTED OBJECTS TEXT PATH MODIFY SELECTED OBJECTS VIDEO MODIFY VIEWPORT display-attribute COLOR MODIFY VIEWPORT TERMINAL WIDTH MOVE CURRENT VIEWPORT MOVE SELECTED OBJECTS MOVE VIEWPORT ORDER SELECTED OBJECTS POSITION HORIZONTAL POSITION NEXT POSITION PREVIOUS POSITION TO POSITION VERTICAL QUIT RECALL MESSAGE REFRESH REMOVE SELECTED OBJECTS TO CLIPBOARD RESIZE CURRENT VIEWPORT RESIZE VIEWPORT ROTATE CLIPBOARD SELECT ALL OBJECTS SELECT AREA SELECT AT SELECT MARKED AREA SELECT NAMED SET CHARACTER SET SET display-attribute COLOR SET ENTRY MODE SET FONT SIZE SET LINE WIDTH SET ORIGIN MODE SET TEXT PATH SET VIDEO SHOW KEY SHOW KEYPAD SHOW PANEL VIEWPORT SHOW POSITION SHOW REFERENCES SHOW SYMBOL SHOW VERSION TEST TOGGLE ENTRY MODE UNDEFINE KEY UNDELETE ALL UNDELETE LAST UNDELETE PANEL UNDELETE VIEWPORT UNGROUP SELECTED OBJECTS UNMARK VIEW CLIPBOARD Glossary EXAMPLES 3-1 IFDL Syntax for a Form 6-1 Panel Editor Command Script 6-2 IFDL Source for Attributes Based on Terminal Type 7-1 IFDL Source Code Before Translation 7-2 IFDL Source Code Produced by Back Translator 8-1 Using the RESET Response Step 8-2 Altering Video Attributes with HIGHLIGHT WHEN 8-3 Declaration of Form Data Groups 8-4 Declaration of Panel Fields to Display a Form Data Group 8-5 IFDL Source Code for Returning to the Group Last Visited 8-6 Declaration of Logically Equivalent Data: Form Data and Records 8-7 Declaration of Logically Equivalent Data: Program Data and Records 8-8 Group Data Transfer on a Receive Request 8-9 Tracked Form Data Items 8-10 Shadow Record Declaration 9-1 Using the IF Response Step 9-2 Control Text Responses 9-3 Conditionally Protecting an Icon 9-4 CALL Response Step 9-5 Menu Panel with Choice Processing 10-1 Displaying the Same Panel at Different Locations 10-2 Declaring Elements That Control Array Transfer and Vertical Scrolling 10-3 Function Declaration for a Built-In Function 10-4 User-Defined Function Declaration 10-5 New Definition for a Built-In Function Response 10-6 Function Response for a User-Defined Function 10-7 Disabling a Built-In Function Key for a Layout 10-8 Disabling a Built-In Function Key for a Panel 10-9 Use of UNDEFINED FUNCTION, USER FUNCTION, and BUILTIN FUNCTION 10-10 Keypad Mode Elementary Attributes 10-11 Signaling an Input Error to the Operator 10-12 Sending a Message to the Form from a Program or Escape Routine 10-13 Declarations of Help Messages 10-14 Using an Entry Response to Display Hints 10-15 Displaying Hints Conditionally with an Internal Response 10-16 Declaring and Using Help Panels 10-17 Function Responses That Create Levels of Help Panels 10-18 Help Panel with Menu Choices 12-1 IFDL Source for the Operator Choice Panel 12-2 IFDL Source for the Introductory Check Panel 12-3 IFDL Source for the Introductory Deposit Panel 12-4 IFDL Source for the Advanced Choice Panel 12-5 IFDL Source for the Advanced Sample Cash Panel FIGURES 1-1 Separation of Form and Function 1-2 Relationship Among Form, Layout, Viewport, and Panel 1-3 Analogy for DECforms Structure 3-1 Information Contained in a Form 3-2 General Structure of a Form 3-3 Hierarchical Structure of a Form 3-4 Structure of a Form in IFDL Declarations 4-1 Appearance of CHOICE_PANEL in the Panel Editor 4-2 Appearance of CHECK_PANEL in the Panel Editor 4-3 Appearance of DEPOSIT_PANEL in the Panel Editor 4-4 Field Pictures in Output of the Deposit Panel 4-5 Initial Data in Output of the Deposit Panel 5-1 FDE Main Menu 5-2 Editing Form Records in the FDE on ULTRIX Systems 5-3 Editing Form Data in the FDE on VMS Systems 5-4 VAXTPU Help in the FDE 5-5 Correcting IFDL Syntax Errors in the FDE 5-6 Creating a Layout in the FDE 5-7 Specifying Screen Colors in the FDE 5-8 Testing a Form in the FDE 5-9 Testing a Form with Control Text in the FDE 5-10 Creating a Panel in the FDE 6-1 Panel Editor Screen Display 6-2 Panel Editor Information Window 6-3 Panel Editor Video Attributes Submenu 6-4 Panel Editor Font Size Submenu 6-5 Panel Editor Line Width Submenu 6-6 Panel Editor Character Set Submenu 6-7 Panel Editor Text Path Submenu 6-8 Panel Editor Create Field Menu 6-9 Panel Editor Choose Data Type Menu for VMS Systems 6-10 Panel Editor Choose Data Type Menu for ULTRIX Systems 6-11 Panel Editor Modify Field Description Menu 7-1 Translating IFDL Source to a Form File and Back 8-1 Appearance of Panel Groups in the Panel Editor 8-2 Appearance of Panel Groups on the Display 10-1 Operation of a Vertical Scrolled Region 12-1 Logically Equivalent Declarations of the ACCOUNT Record 12-2 Introductory Sample Operator Choice Panel 12-3 Introductory Sample Check Panel 12-4 Introductory Sample Deposit Panel 12-5 Advanced Sample Operator Choice Panel 12-6 Advanced Sample Cash Panel B-1 Panel Editor Keypad TABLES 1-1 DECforms Command Summary 3-1 DECforms Accept Responses 3-2 DECforms Default Request Responses 3-3 DECforms Response Steps 5-1 FDE Function Keys 6-1 Command Line Editing Keys 6-2 Panel Editor Predefined Symbols 6-3 Panel Editor Keys for Cursor Positioning 6-4 Clipboard Operations 8-1 Meaning of Shadow Record Characters 10-1 Key Bindings for Scrolling OCCURRENCE Functions 10-2 System Function Keys Requiring Special Consideration 12-1 Form Data Item and Form Record Field Correspondence B-1 Panel Editor Function Keys