CONTENTS Title Page Copyright Page Preface Part I DEC VTX/VALU Overview 1 DEC VTX/VALU Product Set 1.1 VTX Application Service (VAS) 1.2 VAS Run-Time Image 1.2.1 VAS and Remote Applications and ISAM Files 1.2.2 VAS in the VTX Environment 1.3 External Link (ELK) 1.3.1 Synchronous and Asynchronous ELK Applications 1.3.2 Comparison of VAS and ELK 1.4 Remote Update Server Link (RUSL) 1.5 VAS, ELK, RUSL, and Distributed Processing Glossary Part II VTX/VALU Guide to Using VAS 2 VAS Overview 2.1 The Role of VAS in a VTX System 2.1.1 Connecting VAS to VTX 2.1.2 Preliminary VAS Tasks 2.2 Steps for Implementing a Simple VAS Transaction 3 Writing Transaction Definitions 3.1 VAS General Rules and Conventions 3.2 VAS Reserved Words 3.2.1 Predefined Local Variables ACTION CASE COPY DISPLAY DISPLAY/DMENU EXIT LOG REQUEST TRANSACTION VARIABLE 3.3 VAS Transaction Definition Syntax 4 Sample VAS Transactions 4.1 Sample 1: Displaying Data and Logging Subscriber Input 4.1.1 VTX Infobase Preliminaries 4.1.2 What Happens: Programmer's View 4.1.3 What Happens: Subscriber's View 4.2 Sample 2: Using a CUR 4.2.1 VTX Infobase Preliminaries 4.2.2 What Happens: Programmer's View 4.2.3 What Happens: Subscriber's View 4.3 Sample 3: Using a Remote Application 4.3.1 VTX Infobase Preliminaries 4.3.2 What Happens: Programmer's View 4.4 Sample 4: Error Handling 4.4.1 VTX Infobase Preliminaries 4.4.2 What Happens: Programmer's View 4.4.3 Probable Causes of Error 4.4.4 Summary: VAS Error Handling 5 VAS Communications 5.1 Starting the VTXCTL Utility 5.2 VTXCTL Mode Commands BUILD CONNECT VAS EXIT HELP SAVE SHOW VAS START VAS STOP VAS 5.3 VAS Mode Commands DEPOSIT EXAMINE EXIT HELP LOAD SHOW ALL SHOW CHANNEL SHOW SESSION SHOW STATUS START CHANNEL/DATA_FILE START CHANNEL/DECnet START CHANNEL/SNA START CHANNEL/X25 START COMMUNICATION START LOG START NOTIFY STOP CHANNEL STOP COMMUNICATION STOP LOG STOP NOTIFY STOP SESSION 6 Callable User-Written Routines 6.1 Writing a CUR 6.1.1 Data Manipulation in a CUR 6.2 Compiling a CUR 6.3 Linking a CUR Image 6.4 Loading a CUR Image 6.5 How Does VAS Use a CUR? 6.5.1 Sample CURs 6.6 Testing CURs 7 Using Remote Applications 7.1 Subchannel Communication Links 7.1.1 Distributed Capability 7.2 Communication Process 7.3 Record Level Interface 7.3.1 Locking Subchannels 7.4 Abort Handling 7.4.1 Abort Handling: The Application End 7.4.2 Generic Remote Application 7.4.3 Explanation of Example 8 Communicating with DECnet Applications 8.1 DECnet Communication 8.1.1 How VAS Initiates Logical Links 8.1.1.1 Using the TASK Keyword 8.1.1.2 Specifying a DECnet Object Number 8.1.2 Using Proxy Access 8.1.3 Completing the Link Transparently 8.2 Sample DECnet Application 8.3 BASIC DECnet Program 8.4 COBOL DECnet Program 8.5 Pascal DECnet Program 9 Communicating with X.25 Applications 9.1 System Requirements 9.2 Writing Applications for X.25 Communication 9.2.1 Sample Application 10 Communicating with SNA LU6.2 Applications 10.1 System Requirements 10.1.1 DECnet/SNA Gateway 10.1.2 OpenVMS/SNA 10.1.3 DECnet/SNA OpenVMS APPC/LU6.2 Programming Interface 10.2 SNA Terminology 10.3 Basic and Mapped Conversations 10.4 VAS and APPC/LU62 10.5 VAS and CICS Transactions 10.5.1 Sample PL/1 CICS Transaction 10.5.2 Possible Sources of Error 10.5.2.1 VTXCTL 10.5.2.2 VAS 10.5.2.3 VASSNA (APPC/LU6.2 Link) 11 Reading from ISAM Files 11.1 Preliminary Information 11.2 VAS Restrictions and Requirements 11.2.1 How VAS Reads Records from a File 11.2.2 Sample Transaction 11.2.3 What Happens: Programmer's View 11.2.4 What Happens: Subscriber's View 12 Sample VAS Application 12.1 Component Configuration 12.2 Application Flow 12.2.1 Read a Record 12.2.2 Write a Record 12.2.3 Delete a Record 12.2.4 Scan the Records 12.3 Sample Session 12.4 Listings 12.4.1 Initializing an Application 12.4.2 Defining the Records for the ISAM File 12.4.3 Defining the Transactions 12.4.4 Modifying the ISAM File Contents 12.4.5 Scanning ISAM File Records 12.4.6 Validating Key Values 13 VAS Messages 13.1 VAS Message Modification 13.2 VAS Error Messages Part III DEC VTX Guide to Using RUSL 14 Overview of RUSL 14.1 Update Server Communications 14.2 IP Accounts 14.3 RUSL Sessions and Applications 14.4 Session Context Block (SCB) 14.5 RUSL Interface Routines 14.5.1 Calling Modes 14.5.2 Application Flow 14.6 RUSL Callback Routines 14.7 RUSL$LIBRARY Definition Files 14.8 RUSL Buffers 14.9 RUSL Literals 14.10 Building a RUSL Application 14.11 RUSL and ELK 14.12 RUSL and VAS 15 Sample Add Page Operation 15.1 Adding a Display Page 15.1.1 What Happens: Programmer's View 15.1.2 What Happens: Information Provider's View 15.2 Expanded Add Page Application 15.2.1 What Happens: Programmer's View 15.3 Other Programming Language Add Page Examples 16 Sample Extract Page Operation 16.1 What Happens: Programmer's View 16.2 What Happens: Information Provider's View 17 Sample Multithreaded Application 17.1 What Happens: Programmer's View 17.2 What Happens: Information Provider's View 17.3 Building the Sample Application 18 RUSL Interface Routines RUSL$ADD_KEYWORD RUSL$ADD_PAGE RUSL$CONNECT RUSL$DELETE_KEYWORD RUSL$DELETE_PAGE RUSL$DISCONNECT RUSL$EXTRACT_KEYWORD RUSL$EXTRACT_PAGE RUSL$FREE_BUFFER RUSL$GET_BUFFER RUSL$START_APPL RUSL$STOP_APPL 19 RUSL Callback Routines AST_COMP_RTN ETX_RTN FORM_RTN GLOBAL_BREAK_RTN KWD_RTN LCR_PROMPT_RTN LCR_RTN PCR_RTN PDR_PROMPT_RTN PDR_RTN 20 RUSL Buffers 20.1 Forms Definition Buffer 20.2 Keyword Buffer 20.3 LCRREC Buffer 20.4 PCR-Fixed Buffer 20.5 PCR Keyword Buffer 20.6 PCR Menu Buffer 20.7 PCR Remote Buffer 20.8 PDR Buffer 20.9 Session Context Block Buffer 20.9.1 Extended SCB 20.10 RUSL Buffer Formats 21 RUSLDEF.BAS Listing 22 Sample Keyword Operations Application 23 Determining Maximum Menu Choices and List Menu Entries 23.1 Determining Page Number Size 23.2 Determining the Maximum Byte Count 24 Migrating RUSL Applications to VAX VTX/VALU Version 4.0 24.1 BASIC Application Changes 24.1.1 General Changes in BASIC Applications 24.1.2 Session Identifier in BASIC Applications 24.1.3 Keyword Access in PCRKWD in BASIC Applications 24.1.4 Field Access in FRMDEF in BASIC Applications 24.1.5 Menu Choice Access in PCRMNU in BASIC Applications 24.2 C Application Changes 24.2.1 Up-Front Declarations in C Applications 24.2.2 Inline Code in C Applications 24.3 FORTRAN Application Changes 24.3.1 Up-Front Declarations in FORTRAN Applications 24.3.2 Inline Code in FORTRAN Applications 24.4 Pascal Application Changes 24.4.1 Up-Front Declarations in Pascal Applications 24.4.2 Inline Code in Pascal Applications 25 RUSL Status Codes Part IV VTX/VALU Guide to ELK 26 ELK Overview 26.1 VAP Rules and Concepts 26.1.1 Starting a Session 26.1.2 Stopping a Session 26.1.3 Understanding Backward and Forward VAP Messages 26.2 Supported Programming Languages 26.3 Compiling an ELK Application 26.4 Linking an ELK Application 26.5 Starting an ELK Application 26.5.1 Running an Application 26.5.2 Declaring an Application 26.5.3 Using a Startup Command File 26.6 Multiple-Session or Single-Session Programs 26.6.1 Synchronous or Asynchronous Programs 27 ELK Programming Concepts 27.1 What Happens: Programmer's View 27.2 What Happens: Subscriber's View 28 Exchanging Data and Invoking Infobase Pages 28.1 What Happens: Programmer's View 28.2 What Happens: Subscriber's View 28.3 Programmer/Information Provider Interaction 28.4 VTX Page Numbering 28.5 Invoking Infobase Pages 28.5.1 Invoking a Display Page 28.5.2 Invoking a Menu Page 28.5.3 Invoking a Form Page 29 Creating Pages Dynamically 29.1 What Happens: Programmer's View 29.2 What Happens: Subscriber's View 29.3 Generating Pages 29.3.1 Generating a Display Page 29.3.2 Generating a Menu Page 29.3.2.1 Application-Formatted Menu Page 29.3.2.2 TCP-Formatted Menu Page 29.3.3 Generating a Form Page 29.3.4 Generating a Help Page 29.3.5 Generating Pages: Some Considerations 30 Handling Concurrent Sessions 30.1 What Happens: Programmer's View 30.1.1 Maintaining Session Context 30.1.2 Handling Backward Messages 30.1.3 Connect Routine 30.1.4 Input Routine 30.1.5 Disconnect Routine 30.1.6 Status Routine 30.1.7 Token Granted Routine 30.2 What Happens: Subscriber's View 31 Asynchronous ELK Applications 31.1 What Happens: Programmer's View 31.2 Responding to Backward Messages 31.3 Creating the Dispatch Table 31.4 Specifying the Dispatch Table 31.5 What Happens: Subscriber's View 32 ELK Interface Routines ELK$ASCII_TO_VTXPAGE ELK$CREATE_SCB ELK$DELETE_SCB ELK$DISABLE_CONNECT ELK$ENABLE_CONNECT ELK$FREE_BUFFER ELK$GET_BUFFER ELK$RECEIVE ELK$SEND ELK$START_APPL ELK$STOP_APPL ELK$VTXPAGE_TO_ASCII 33 ELK Forward Message Codes 33.1 Disabling the PRINT/ALL and SAVE/ALL Commands 33.2 Buffer Formats 33.3 ELK$KF_BREAK 33.4 ELK$KF_CONFIRM 33.5 ELK$KF_DISPLAY_PAGE 33.5.1 ELK$KF_DSPLAY_FORM 33.5.2 ELK$KF_DSPLAY_KEYWORD 33.5.3 ELK$KF_DSPLAY_PAGE 33.5.4 ELK$KF_DSPLAY_RELATIVE_NEXT 33.5.5 ELK$KF_DSPLAY_RELATIVE_PREV 33.5.6 ELK$KF_DSPLAY_REPEAT 33.6 ELK$KF_FORCEPAGE 33.7 ELK$KF_FORMGET 33.8 ELK$KF_LOG 33.9 ELK$KF_OUTPUT 33.9.1 ELK$KF_OUTPUT_ABORT 33.9.2 ELK$KF_OUTPUT_ACCESS 33.9.3 ELK$KF_OUTPUT_APPROP 33.9.4 ELK$KF_OUTPUT_AVAIL 33.9.5 ELK$KF_OUTPUT_DYNMENU 33.9.6 ELK$KF_OUTPUT_ETX 33.9.7 ELK$KF_OUTPUT_FORMDEF 33.9.8 ELK$KF_OUTPUT_MENU 33.9.9 ELK$KF_OUTPUT_NYI 33.9.10 ELK$KF_OUTPUT_OK 33.9.11 ELK$KF_OUTPUT_PAGE 33.9.12 ELK$KF_OUTPUT_PRESENT 33.9.13 ELK$KF_OUTPUT_SYNTAX 33.9.14 ELK$KF_OUTPUT_TITLE 33.10 ELK$KF_REQUEST_TOKEN 34 ELK Backward Message Codes 34.1 ELK$KB_CONNECT 34.2 ELK$KB_DISCONNECT 34.3 ELK$KB_INPUT Messages 34.3.1 ELK$KB_INPUT_BACKUP 34.3.2 ELK$KB_INPUT_CHOICE 34.3.3 ELK$KB_INPUT_FORMDATA 34.3.4 ELK$KB_INPUT_GETAGAIN 34.3.5 ELK$KB_INPUT_HELP 34.3.6 ELK$KB_INPUT_NEXTPAGE 34.3.7 ELK$KB_INPUT_PREVPAGE 34.4 ELK$KB_STATUS 34.5 ELK$KB_TOKEN_GRANTED 35 Using ELK as a Server 35.1 Declaring an Application to Be a Server 35.2 Additional Capabilities 35.2.1 ELK Backward Messages Received Only by Servers 35.2.1.1 ELK$KB_INPUT_DIRECT 35.2.1.2 ELK$KB_INPUT_KEYWORD 35.2.1.3 ELK$KB_INPUT_SETMARK 35.2.1.4 ELK$KB_INPUT_TOMARK 35.2.1.5 ELK$KB_INPUT_MAINMENU 35.2.1.6 ELK$KB_WHERE 35.2.2 ELK Forward Messages Sent Only by Servers 35.2.2.1 ELK$KF_OUTPUT_MARK 35.2.2.2 ELK$KF_OUTPUT_KEYWORD 35.2.2.3 ELK$KF_OUTPUT_NODIRECT 35.2.2.4 ELK$KF_HERE 35.3 Responsibilities and Restrictions 36 ELK Application Protocol Rules 37 ELK Dispatch Routines Dispatch Routine Call Format 38 Listing of VTXELKDEF.BAS 39 Sample ELK Applications 40 ELK Return Status Codes EXAMPLES 2-1 VAS.COM Listing 3-1 Annotated TDS File 4-1 VAS Sample Transaction Definition 1 4-2 VAS Sample Transaction Definition 2 4-3 VAS Sample Transaction Definition 3 4-4 VAS Sample Transaction Definition 4 6-1 Sample CURs 8-1 Sample DECnet Application (FORTRAN) 8-2 Sample Transaction Definition Calling DECnet Application 8-3 Sample DECnet Application (BASIC) 8-4 Sample DECnet Application (COBOL) 8-5 Sample DECnet Application (Pascal) 9-1 Sample X.25 Application 10-1 Sample PL/1 CICS Transaction 11-1 Sample START CHANNEL Command 11-2 Sample ISAM Read Transaction 12-1 Sample Startup Procedure 12-2 Sample Record Definition File 12-3 Sample VAS Transaction Definitions 12-4 Sample WRITE and DELETE Functions 12-5 Sample SCAN Function 12-6 Sample CUR 15-1 Sample RUSL Program-Adding a Display Page 15-2 Sample Program Execution 15-3 Sample RUSL Program-Adding Pages 15-4 BLISS Example 15-5 C Example 15-6 COBOL Example 15-7 FORTRAN Example 15-8 Pascal Example 16-1 Sample RUSL Program-Extracting Pages 16-2 Sample Program Execution 17-1 Sample RUSL Program-Managing Multiple Sessions 17-2 Sample Program Execution 17-3 Sample Supplement-Callback and Support Routines 22-1 Sample RUSL Program Keyword Operations 26-1 Sample VTX Startup Command File 27-1 Sample ELK Program 1 28-1 Sample ELK Program 2 29-1 Sample ELK Program 3 30-1 Sample ELK Program 4 31-1 Sample ELK Program 5 39-1 C Example 39-2 COBOL Example 39-3 FORTRAN Example 39-4 Pascal Example FIGURES 1-1 Page Request in VTX/VAS Environment 1-2 Connect Request in the VTX/VAS Environment 1-3 VAS in the VTX Environment 1-4 Subscriber/Server Communication 1-5 Subscriber/Application Communication 1-6 Similarity of Update Server to RUSL Application 1-7 VAS and ELK in the VTX Environment 1-8 Distributed Information Provider Environment 2-1 Remote Pages Pointing to a VAS Transaction 2-2 Linking a VTX Infobase Page to a VAS Page 4-1 Request Buffer Format 5-1 VTXCTL Commands 7-1 Remote Communication over a Single Subchannel 7-2 Remote Communication over Multiple Subchannels 7-3 Sample Distributed Configuration 1 7-4 Sample Distributed Configuration 2 7-5 Sample Distributed Configuration 3 7-6 VAS/Application Communication 9-1 VAS Communication over a PSDN 10-1 DECnet/SNA Distributed Transaction Environment 10-2 Session Supporting Conversations in Serial Fashion 10-3 VAS Uses a Session for One Conversation 10-4 VAS and the SNA Environment 10-5 Use of Multiple DECnet/SNA Gateways by VAS 12-1 VAS Component Configuration 12-2 Application Flow 12-3 VTX Main Page 12-4 Sample Application Main Page 12-5 Dynamically Created Menu Page 12-6 Selected Record 14-1 Similarity of VTXUPD with RUSL Application 14-2 Multiple RUSL Applications Connected to an Update Server 14-3 Distributed Updating 14-4 General RUSL Program Logic 14-5 ELK and RUSL Interaction 14-6 VAS and RUSL Interaction 20-1 Extended Session Context Block 26-1 VTX Application Environment 26-2 VAP Communication 27-1 General ELK Program Logic 27-2 Menu Page 8 27-3 Display Page 810.00000 28-1 Form Page 8100 28-2 Using ELK$KF_DISPLAY_PAGE to Send a Display or Menu Page 28-3 Using ELK$KF_DISPLAY_PAGE/DSPLAY_FORM to Display a Form Page 29-1 Generating a Dynamic Display or Application-Formatted Menu Page 29-2 Generating a TCP-Formatted Dynamic Menu 29-3 Application-Generated Form 33-1 Assigning Initial Field Values from Account File Record 35-1 Subscriber Connected to ELK Through Server 35-2 Subscriber Connected Directly to ELK 37-1 Dispatch Table Format TABLES 1 Structure of This Manual 5-1 VTXCTL Utility-VTXCTL Mode Commands 5-2 VTXCTL Utility-VAS Mode Commands 7-1 VAS Request/Response Buffer Format 7-2 Effects of MSG_TYPE Values 20-1 FRMDEF Buffer Field Contents 20-2 KEYWRD Buffer Field Contents 20-3 LCRREC Buffer Field Contents 20-4 PCRFIX Buffer Field Contents 20-5 PCRKWD Buffer Field Contents 20-6 PCRMNU Buffer Field Contents 20-7 PCRRMT Buffer Field Contents 20-8 PDRBUF Buffer Field Contents 20-9 SCB Buffer Field Contents 20-10 FRMDEF 20-11 KEYWRD 20-12 LCRREC 20-13 PCRFIX 20-14 PCRKWD 20-15 PCRMNU 20-16 PCRRMT 20-17 PDRBUF 20-18 SCB 33-1 ELK$KF_DSPLAY_FORM Buffer Format 33-2 ELK$KF_DSPLAY_KEYWORD Buffer Format 33-3 ELK$KF_DSPLAY_PAGE Buffer Format 33-4 ELK$KF_FORMGET Buffer Format 33-5 ELK$KF_LOG Buffer Format 33-6 ELK$KF_OUTPUT_DYNMENU Buffer Format 33-7 ELK$KF_OUTPUT_FORMDEF Fields 33-8 ELK$KF_OUTPUT_TITLE Buffer Format 34-1 ELK$KB_CONNECT Buffer Format 34-2 ELK$KB_INPUT_FORMDATA Buffer Format 35-1 ELK$KB_INPUT_DIRECT Buffer Format 35-2 ELK$KB_INPUT_KEYWORD Buffer Format 35-3 ELK$KF_HERE Buffer Format 36-1 Valid Application Responses to VAP Backward Messages 36-2 Valid Application Responses to VAP Forward Messages