CONTENTS Title Page Copyright Page Preface 1 Overview of DECforms 1.1 DECforms Definitions 1.2 DECforms Structure: An Analogy 1.3 Components of DECforms 1.4 DECforms Command Summary 1.5 A Proposed Standard for Form Interface Management 2 The Sample Applications and Demonstration Forms 2.1 Running the Introductory Sample Application 2.2 Running the Advanced Sample Application 2.2.1 Writing a Check 2.2.2 Making a Deposit 2.2.3 Making a Cash Withdrawal 2.2.4 Transferring Funds Between Accounts 2.2.5 Reviewing the Check Register and Account Data 2.2.6 Exploring Special Features of the Sample Application 2.2.7 Exiting from the Sample Application 2.3 Displaying the Demonstration Forms 3 The 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 and Response Steps 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 How a Form Looks in the IFDL 3.8 Methods for Creating Forms 4 Creating a Form 4.1 Step by Step: Creating a Form 4.2 Considerations for Planning a Forms Application 4.2.1 Defining Program Data and Records 4.2.2 Defining Form Data and Form Records 4.2.3 Creating Panels and Panel Fields 4.2.4 Compiling, Linking, and Running the Application 5 Using the Form Development Environment 5.1 Invoking the FDE 5.1.1 Using LSE for Text Editing in the FDE 5.1.2 Using Keys in FDE Menus 5.1.3 Editing an Existing Form 5.1.4 Creating a New Form 5.2 Using FDE Main Menu Options at Form Level 5.2.1 Producing Output 5.2.2 Changing the Form Name 5.2.3 Editing IFDL Source Code 5.3 Using FDE Main Menu Options at 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 Options at 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 Aborted Session 6 Creating and Editing Panels with the Panel Editor 6.1 Invoking and Exiting from the Panel Editor 6.2 The Screen Display 6.2.1 Current Panel 6.2.2 Command Line 6.2.3 Message Window 6.2.4 Status Line 6.2.5 Information Window 6.2.6 Menus 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 and Using Symbols 6.3.5 Defining Function Keys 6.3.6 Executing a Series of Commands in a Command File 6.4 Editing Panels 6.4.1 Moving the Cursor 6.4.2 Creating, Deleting, and Modifying Viewports 6.4.3 Creating and Deleting Panels 6.4.4 Modifying the Color of Panel and Viewport Display Attributes 6.4.5 Creating and Deleting Panel Fields 6.4.6 Modifying Panel Field Descriptions and Pictures 6.4.7 Creating and Deleting Panel Groups 6.4.8 Creating and Deleting Icons 6.4.9 Creating a Menu Using Icons 6.4.10 Drawing Graphic Objects 6.4.11 Creating Text Objects 6.4.12 Selecting and Deselecting Objects 6.4.13 Changing the Order of Objects in the Panel 6.4.14 Using the Clipboard 6.4.15 Moving Objects Within a Panel 6.4.16 Moving Objects Between Different Panels 6.4.17 Copying Objects Within a Panel or Between Panels 6.4.18 Setting or Modifying Video Attributes 6.4.19 Setting or Modifying Font Size 6.4.20 Setting or Modifying Line Width 6.4.21 Setting or Modifying the Character Set of Text Literals 6.5 Specifying Display Attributes Based on Terminal Type 6.6 Recovering an Aborted 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 8 Testing and Printing Forms 8.1 Testing a Form's Appearance 8.2 Creating Printable Forms 9 Declaring, Displaying, and Tracking Data 9.1 Assigning Default Values to Fields 9.2 Altering Video Attributes of Panel Fields 9.3 Declaring and Displaying Arrays 9.3.1 Storing Array Data in the Form 9.3.2 Displaying Data Stored in Form Data Groups 9.3.3 Using Corresponding Subscripts in Field Description Entries 9.3.4 Activating Panel Groups for Input 9.3.5 Specifying Navigation in a Panel Group 9.3.6 Passing Group Data Between the Program and Form 9.4 Transferring Data Explicitly 9.5 Determining What Changed During Operator Input 9.5.1 Tracking Form Data Items 9.5.2 Using Receive Shadow Records 10 Controlling Form Processing 10.1 Using Responses to Perform Conditional Processing 10.2 Using Control Text Responses 10.3 Controlling the Activation List 10.3.1 Using the ACTIVATE Response Step 10.3.2 Using Conditional Protection in Navigation 10.3.3 Controlling the Activation List During Accept Phase 10.3.4 Using the DEACTIVATE Response Step 10.4 Using Escape Routines 10.4.1 Writing a Program That Uses Escape Routines 10.4.2 Writing Responses That Call Escape Routines 10.4.3 Linking Applications That Use Escape Routines 10.5 Moving Between Panels 10.6 Waiting for the Operator 10.7 Printing the Current Display 10.8 Getting the Best Performance from Your Forms 10.8.1 Organize Your Form Records 10.8.2 Use Validation with Care 10.8.3 Consider How to Perform Data Conversion 10.8.4 Use Function Responses Efficiently 10.8.5 Use Input Pictures Wisely 10.8.6 Use Device Type %VT100 10.8.7 Use Form Objects or Shareable Images 10.8.8 Make Scrolling Regions Full Screen Width 10.8.9 Do Not Overuse Panels 10.8.10 Do Not Overlap Panel Objects 10.8.11 Use OUTPUT WHEN Rather than CONCEALED WHEN 10.8.12 Activate Panel Fields Only When Necessary 11 Controlling the Operator Interface 11.1 Using Viewports 11.2 Creating Scrolled Regions 11.2.1 Displaying Scrolled Data 11.2.2 Setting Up the Operator's Control of a Scrolled Region 11.3 Defining Function Keys 11.3.1 Binding Functions to Keys 11.3.2 Writing Function Responses 11.3.3 Disabling Built-In Function Key Bindings 11.4 Using an UNDEFINED, USER, or BUILTIN FUNCTION Declaration 11.5 Modifying the Keypad Mode 11.6 Signaling the Operator 11.7 Sending Messages to the Operator 11.7.1 Sending Messages from the Form 11.7.2 Sending Messages from a Program or Escape Routine 11.8 Providing Online Help 11.8.1 Using Help Messages 11.8.2 Providing Hints 11.8.3 Using Help Panels 11.8.4 Creating Levels of Help Panels 11.8.5 Creating a Hierarchical Help Menu 12 Examining the Sample Applications 12.1 Data Declarations in the Introductory Sample Form and Program 12.2 The Effect of the Request Calls in the Introductory Sample Program 12.2.1 The ENABLE Request 12.2.2 The ACCOUNT Record SEND Request 12.2.3 The UPDATE Record TRANSCEIVE Request 12.2.4 The GET_CHECK Record RECEIVE Request 12.2.5 The GET_DEPOSIT Record RECEIVE Request 12.2.6 The DISABLE Request 12.3 An Operator Transaction in the Advanced Sample Application 13 Elements of Good Screen Design 13.1 Sorting Information 13.2 Providing a Title 13.3 Writing Descriptive Captions 13.4 Using Check Boxes 13.5 Providing Instructions 13.6 Making Effective Use of the Video Screen 13.6.1 How to Present Data 13.6.2 Organizing the Screen Display 13.6.3 Communicating with the Operator A Panel Editor Default Keypad B Panel Editor Command Summary C Default Key Bindings for Built-In Functions Glossary accept response . . . data collection phase data distribution phase . . . escape routine Extract Utility . . . form file Form Interface Management System . . . IFDL IFDL source file . . . nonnumeric literal numeric literal . . . procedural escape receive control message . . . scroll bar send control message . . . vector viewport . . . wait activation item 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 9-1 Using the RESET Response Step 9-2 Altering Video Attributes with HIGHLIGHT WHEN 9-3 Declaration of Form Data Groups 9-4 Declaration of Panel Fields to Display a Form Data Group 9-5 IFDL Source for Returning to the Group Last Visited 9-6 Declaration of Logically Equivalent Program and Form Records That Pass Data to Form Data Groups 9-7 Group Data Transfer on a Receive Request 9-8 Tracked Form Data Items 9-9 Shadow Record Declaration 10-1 Using the IF Response Step 10-2 Control Text Responses 10-3 Conditionally Protecting an Icon 10-4 Escape Routine in a COBOL Program 10-5 FORMS$ENABLE for Escape Routines 10-6 CALL Response Step 10-7 Menu Panel with Choice Processing 11-1 Displaying the Same Panel at Different Locations 11-2 Declarations of the Elements that Control Array Transfer and Scrolling 11-3 Function Declaration for a Built-In Function 11-4 User-Defined Function Declaration 11-5 New Definition for a Built-In Function Response 11-6 Function Response for a User-Defined Function 11-7 Disabling a Built-In Function Key for a Layout 11-8 Disabling a Built-In Function Key for a Panel 11-9 Use of UNDEFINED FUNCTION, USER FUNCTION, and BUILTIN FUNCTION 11-10 Keypad Mode Elementary Attributes 11-11 Signaling an Input Error to the Operator 11-12 Sending a Message to the Form from a Program or Escape Routine 11-13 Declarations of Help Messages 11-14 Using an Entry Response to Display Hints 11-15 Displaying Hints Conditionally with an Internal Response 11-16 Declaring and Using Help Panels 11-17 Function Responses that Create Levels of Help Panels 11-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 An 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 5-1 FDE Main Menu 5-2 Editing Form Records in the FDE 5-3 Editing Form Data in the FDE 5-4 Text Editor 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 Create Field Menu 6-4 Panel Editor Choose Data Type Menu 6-5 Panel Editor Modify Field Description Menu 6-6 Panel Editor Video Attributes Menu 6-7 Panel Editor Font Size Menu 6-8 Panel Editor Line Width Menu 6-9 Panel Editor Character Set Menu 7-1 Translating IFDL Source to a Form File and Back 8-1 Default Output of FORMS EXTRACT APPEARANCES 8-2 Field Pictures in Output of FORMS EXTRACT APPEARANCES 9-1 Appearance of Panel Groups in the Panel Editor 9-2 Appearance of Panel Groups on the Display 11-1 Operation of a Scrolled Region 12-1 Logically Equivalent Record Declarations 12-2 The Introductory Sample Operator Choice Panel 12-3 The Introductory Sample Check Panel 12-4 The Introductory Sample Deposit Panel 12-5 The Advanced Sample Operator Choice Panel 12-6 The Advanced Sample Cash Panel A-1 Panel Editor Default 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 Panel Editor Line Editing Keys 6-2 Panel Editor Predefined Symbols 6-3 Panel Editor Commands for Positioning the Cursor 6-4 Panel Editor SET VIDEO Command Parameters 9-1 Meaning of Shadow Record Characters 12-1 Form Data Item and Form Record Field Correspondence A-1 Panel Editor Default Function Keys C-1 Default Key Bindings for DECforms Built-In Functions