Application Development
Contents:
About This Document
Documentation Website
How to Print the Document
Documentation Conventions
Contact Us!
1. Building a Panther Application
Application Development Steps
Installing Panther
Designing the Project Requirements
Define the Application Architecture
Define the Database Access
Define the Client Platforms
Define the Development Team
Configuring the Server Environment
Setup the COM Component Server
Preparing the Development Environment
Connect to the Database
Setup the Application Client
Configure Library Access
Connecting to the Middleware
Defining Services
Services in JetNet/Oracle Tuxedo
Services in COM and EJB Components
Building a Repository from a Database
Table Views and Links
Creating Application Components
Repository Development
Graphical Editor
Screen Wizard
Enhancing the Interface
Modify Properties
Define User Actions
Define Event Functions
Fetch Database Information
Add Reports
Integrating Application Components
Define Screen Interaction
Share Data Between Screens
Setting Application Security
Deploying on the Web
Configure the Web Application
Create the Web Client Screens
Program Web Events
Testing and Debugging
User Interface
Service Components
Fine-Tuning the Application
Using C and Java Code
Improving Performance
Deploying the Application
Part I. Preparing for Development
2. Understanding the Panther Distribution
3. Defining the Project Requirements
What Is the Application Architecture—Two-tier or Three-tier?
For Three-tier Applications, Which Middleware Meets Your Requirements?
Will the Application Be Deployed on the Web?
What Is the Best Database Schema for this Application?
Is a Database Based on that Schema Currently Available?
How Will the Repository Be Used During Application Development?
How Will the Database Be Accessed?
How Will Service Components Be Used in Your Application?
What Are the Hardware Platforms for the Application Clients?
How Computer Literate Is the Application Audience?
In What Language Will the Programming Code Be Written?
What Method Will Be Used for Handling Errors?
What Type of Network Access Is Available?
How Will the Work Be Distributed Among the Development Team?
4. Defining Application Architecture
Components of a Panther Application
Building Two-Tier Applications
To build a two-tier application:
Building Distributed Applications
Building a JetNet/Oracle Tuxedo Application
To build a three-tier JetNet/Oracle Tuxedo application:
Building a Component-based Application
To build a component-based application:
5. Preparing the Application Server
JetNet Application Server
Create the Application Directory
Configure the Application Servers
See Also
Oracle Tuxedo Application Server
WebSphere Application Server
6. Preparing the Development Clients
Copy Your Panther Distribution
Configure Your Panther Application
Specify Your Panther Environment
Configure Your Project Requirements
Colors
Message File
Multiple Platforms
Programming Functionality
Remote Library Access
Distribute the Setup to the Client Workstations
Create an Application Directory
7. Initializing the Database
Initializing One or More Engines
Initialization Procedure
Setting the Default Engine
Initializing the Database via the Executable
Database Interface Initialization Routine
Changing Static Initialization
How to Create a New Version of dbiinit.c
Options and Arguments
Dynamic Database Initialization
How to Identify the Database Engines in the Initialization File
8. Connecting to Databases
Connecting to the Database in the Screen Editor
How to Make a Direct Connection to the Database from Within the Screen Editor
How to Close a Database Connection Within the Screen Editor
Programmatically Connecting to the Database
How to Close Database Connections
Setting Default and Current Connections
How to Set a Default Connection
How to Override a Default Connection
Multiple Connections to a Single Engine
How to Make Multiple Connections to the Database
How to Close All Connections on an Engine
Connecting to Multiple Engines
Checking the Status of Connections
How to Find out If a Database Connection is Open
How to Find out the Database Connection Assigned to a Database Cursor
How to Find out the Handles to a Database Connection
Verifying Database Access
UNIX
Windows
9. Connecting to the Middleware
Using JetNet and Oracle Tuxedo
Opening a Middleware Session in the Editor
How to Open a Middleware Session
Opening a Middleware Session Programmatically
Using MTS
Using WebSphere Application Server
10. Accessing Libraries
Configuring Your Library Access
Managing Library Access
Accessing Library Members Outside of Source Control
Opening Library Members
Closing Library Members
Releasing a Reservation
Maintaining Libraries Under Source Control
How to Provide an Interface to Your Source Control Manager
Library Members Under Source Control Management
How to Edit a Library Member Under Source Control Management
How to Save a Read-only Library Member and Store It Under Source Control Management
How to Delete a Library Member that Is Under Source Control
Part III. Creating Application Building Blocks
11. Creating and Using a Repository
About Repositories and Inheritance
What You Need to Know
Using the Repository
Creating the Repository
Opening a Default Repository
Creating Repository Entries
Creating Repository Objects
Creating Screen Templates
Storing Database Information
Reimporting Your Database Tables
Database Import Properties
Column Edits
Storing Widget Templates
Storing Widget Definitions
Using the Wizards
Using Inheritance
Controlling Property Inheritance
Updating Inheritance in Application Screens
Finding the Source of Inheritance
12. Creating Service Components
Service Components for JetNet and Oracle Tuxedo
Creating Service Components in JetNet/Oracle Tuxedo
Writing Service Requests in JetNet/Oracle Tuxedo
Creating Client Screens
Updating the JIF
Service Components for COM Components and EJBs
Creating Service Components in Component Applications
Creating Client Screens in Component Applications
Deploying Components in COM Applications
Deploying Components in WebSphere Application Server
Using the Common Component Interface
13. Developing Client Screens
Creating Screens
Creating Dialog Boxes
Understanding Screen Scope
Opening Screens
Search Path
Screen Display Defaults
Displaying Screens in Viewports
Overriding Display Defaults
Specifying Viewports at Runtime
Opening Screens in Windows Applications
Specifying the Window Style
Closing Screens
Setting Screen Properties
Using JPL to Set Screen Properties
Runtime Properties for Screens
14. Identifying Screen Widgets
Widget Types
Widget Identifiers
Object IDs
Widget Names
Field Numbers
Arrays
Non-Scrolling and Scrolling Arrays
Synchronized Scrolling Arrays
Element and Occurrence Numbering
Groups
ActiveX Controls
15. Including Menus and Toolbars
Loading Menus into Memory
Installing Menus
Installing Menus with Shared Content
Installing Menus with Unique Content
Referencing External Menus
Displaying Toolbars
Changing Menus at Runtime
Getting and Setting Properties
Dockable Toolbar Properties
Changing the State of Toggle Items
Creating and Deleting Menus
Inserting and Deleting Menu Items
Uninstalling and Unloading Menus
Invoking Popup Menus
Calling Menu Functions From JPL
Outputting Menu Definitions to ASCII
Keywords
Menu Properties
16. Building Reports
Part IV. Preparing the Programming Interface
17. Understanding Application Events
Screen and Widget Events
Screen Entry
Open Events
Exposure Events
Frameset Events
Widget Events
Automatic Field Function
Event-specific Functions and Arguments
Field Entry
Field Validation
Field Exit
Grid Column Label Click
Tab Control Events
Screen Exit
Screen Exit Processing
Closing Screens
Exiting an Application
Programming User-initiated Events
Transaction Manager Events
Database Interface Events
Web Application Events
Middleware Events
JetNet and Oracle Tuxedo Events
18. Programming Control Strings
Associating Control Strings with the Application
Control String Types
Displaying Screens
Search Path
Viewport Arguments
Executing Functions
Using Built-in Functions
Invoking Operating System Commands
19. Programming in JPL
JPL Modules and Procedures
Module Structure
Parameters
Passing Standard Arguments to JPL Procedures
Return Types
Procedure Execution
Control Flow Statements
Included Modules
Comments
Sample JPL Module
Module Types
Widget Modules
Executing Widget Modules
Screen Modules
Executing Screen Modules
Report Modules
External Modules
Library Modules
File Modules
Module Compilation
Memory-Resident Modules
Writing JPL in the Editor
Screen- and Report-Level JPL
Widget-Level JPL
Library Modules
Using Your Own Editor
Inserting JPL To and From Disk
Compiling and Saving
Calls
Arguments
Returns
Calls from Screens and Widgets
Using a Memory-resident Screen
Calls from Control Strings
JPL Call Command
Inline Calls
Precedence of Called Objects
Variables
Declaring JPL Variables
Declaring Global Variables
Panther Variables
Variable Scope and Lifetime
Colon Preprocessing
Syntax
Expansion
Controlling Expansion with Parentheses
Substring Expansion
Array Expansion
Reexpansion
Constants
Non-Decimal Number System Formats
Quoted String Constants
Setting Properties Using the Property API
Object Specification
Object Modifiers
Array Subscripts
Signed and Unsigned Subscripts
References to Element Field Numbers
Precedence of Object Types
Compound Object Strings
Object Values
Properties
Editor Properties
Runtime and Application Properties
Multi-item Properties
Property Substrings
Property Value Types
Implicit Properties
Properties of Elements and Occurrences
Selection Group Data
Grid Properties
Traversal Properties
Global Variables
Data Types, Operators, and Expressions
Data Types
Operators
Operator Precedence
Conversion of Operands
Concatenation
Substring Specifiers
@date
@length
@sum
Bitwise Operators
Expressions
String Expressions
Numeric Expressions
Bitwise Expressions
Logical Expressions
JPL Commands
Optimization
20. Writing C Functions
Types of C Functions
Using Automatic Functions
Using Demand Functions
Writing C Functions
Calling C Functions
Calling Panther Library Functions
21. Java Event Handlers and Objects
Java Overview
Using Java in Panther
Writing Java Code
Determining the Java Event Handler
Event Handler Interfaces
Screen Event Handlers
ActiveX Control Event Handlers
Check Box Event Handlers
Combo Box Event Handlers
Dynamic Label Event Handlers
Grid Event Handlers
Group Event Handlers
List Box Event Handlers
Option Menu Event Handlers
Push Button Event Handlers
Radio Button Event Handlers
Scale Event Handlers
Tab Card Event Handlers
Toggle Button Event Handlers
Text Field Event Handlers
Object Interfaces
Implementing Service Component Methods in Java
Service Component Methods in Oracle Tuxedo and JetNet
Service Component Methods in COM/DCOM/MTS
Service Component Methods in WebSphere
Working with Java Objects
Instantiating Java Objects
Type-Specifiers and Arguments
Destroying Java Objects
Calling Java Object Methods
Accessing Panther Functions From a Java Method
Accessing Java Object Properties
Designating an Error Handler
Java Samples
22. Using XML Data
Defining XML Properties
Defining XML Screen Properties
Processing XML Properties
Processing XML for Multiple Occurrences
Processing Hidden Widgets
Generating XML
Importing XML
Sample XML File
23. Using Widgets
Changing Widget Display
Controlling Input
Setting Data Entry Formats
Setting Date and Currency Formats
Traversing Widgets
Traversing Sets of Widgets
Getting Widget Data
Getting Widget and Array Data
Getting Properties
Changing Widget Data
Writing Data to Widgets
Clearing Widget Data
Inserting and Deleting Occurrences
Making Widget Selections
Getting Selections
Changing Selections
Manipulating Grids
Making Selections in List Boxes
Accessing Tab Controls
Accessing ActiveX Controls
Checking Validation
24. Setting the Screen Sequence
Forms and Windows
Forms and the Form Stack
Windows and the Window Stack
Window Stack Organization
Sibling Windows
Window Stack Manipulation
25. Moving Data Between Screens
Sending and Receiving Data
Bundles
Sending Data
JPL send
Library Function Calls
Receiving Data
JPL receive
Library Function Calls
Using Global Variables
Accessing Values on Other Screens
Using Local Data Blocks
Selection Groups
Restrictions
Invalid Targets
Data Overflow
Interaction with Screen Modules
Loading and Activating LDBs
Default Activation
Runtime Loading and Activation
Read-only LDBs
Getting Information on LDBs
26. Displaying Messages
Window Versus Status Line Display
Acknowledging Messages
Disabling Messages
Setting Display Defaults
Message Functions
Broadcasting Messages
Status Line Usage
Message Display
Error messages
sm_d_msg_line messages
Ready/Wait
Widget/Menu item status
Screen status
Background status
Other Status Line Information
Error Hook Function
Part V. Accessing the Database
27. Performing Database Operations
How Database Operations are Processed
Developing Database Operations for your Application
Differences in Application Architecture
About the Transaction Manager
About the SQL Generator
About the Database Interface
28. Writing SQL Statements
Database Development Process
Database Interface Commands
Using Database Cursors
Using a Default Cursor
Using a Named Cursor
Declaring a Cursor
Supplying Values Using Colon Expansion
Supplying Values Using Binding
Executing a Cursor with Multiple Connections
Modifying a Cursor
Using Cursors in the Transaction Manager
Closing a Cursor
To close a cursor and free its data structure, execute:
To close the default cursor, execute:
Database Transaction
Engine-Specific Behavior
Error Processing for a Transaction
29. Reading Information from the Database
Fetching Data Using SELECT Statements
Targets for a SELECT Statement
Automatic Mapping
Aliasing
Using DBMS ALIAS
Aliasing by Column Names
Aliasing by Column Positions
Aliasing with the Engine's SELECT Syntax
Fetching Multiple Rows
Determining the Number of Occurrences
Scrolling Through a SELECT Set
Using Scrolling Arrays
Using Non-scrolling Arrays
Scrolling Commands
Remapping Logical Keys for Scrolling
Controlling the Number of Rows Fetched
Choosing a Starting Row in the SELECT Set
Format of Select Results
Character Column
Date-time Column
Numeric Column
Binary Columns
Fetching Unique Column Values
Redirecting Select Results to Other Targets
30. Writing Information to the Database
Colon Preprocessing
Colon-plus Processing
Perform Standard Colon Preprocessing
Determine the Variable's Panther Type
Format a Non-null Value
Colon-equal Processing
Writing Character String Data to the Database
Writing Date/Time or Null Data to the Database
Writing Numbers as Character Strings to the Database
Writing Hexadecimal Values to the Database
Using Parameters in a Cursor Declaration
Parameter Substitution and Formatting
Writing Currency Values to the Database
Writing Data from Arrays
31. Building a Transaction Manager Screen
Development Process for Transaction Manger
Copying Repository Objects
Sequence for Copying Objects
Specifying the Traversal Order
Table Views
Links
How to Gain Access to Table View and Link Properties
How to View the Table Views and Links for a Screen
Setting Link Properties
Determining the Root Table View
Determining the Order of Processing
Specifying the Link Type
Tree Traversal
Setting Table View Properties
Specifying Widget Properties
Changing SQL Generation
Using Grids
Using Validation Links
Specifying Transaction Manager Commands
Changing the Transaction Mode
Adding a Transaction Event Function
32. Writing Transaction Event Functions
The Nature of TM Event Functions
Specifying a Return Code
Specifying TM_PROCEED
Specifying TM_OK
Checking for Database Errors
Specifying TM_FAILURE
Performing Error Checking
Unsupported Events
Modifying SELECT Statement Processing
Replacing a SQL SELECT Statement
Modifying SQL Generation
Replacing Other SQL Statements
33. Using Automated SQL Generation
Guidelines for Automated SQL Generation
Specifying Tables
Specifying Columns
Generating SQL in the Transaction Manager
Sample Tables
Generating SELECT Statements
Fetching Data from the Database
Defining a Widget's Participation in SELECT Statements
Implementing a SELECT expression
Controlling How Data Is Selected
Validating Data
Eliminating Duplicate Rows in a Result Set
How to Implement the DISTINCT or UNIQUE Keyword
Determining What Tables to Select From
Defining the Where Condition
How to Define a Widget's Participation in the WHERE Clause
Fetching an Exact Match
Fetching Records Matching a Partial String
Fetching Records Matching One of a List of Values
Fetching Null Values
Grouping SELECT Statement Results
Grouping Results Automatically
Specifying a GROUP BY Clause
Grouping Multiple Columns
Applying Search Conditions to the Result Set
Sorting the Results from a SELECT Statement
Specifying a Sort Order for a Specific Table View
Example: Sorting Results
Selecting Data from Multiple Database Tables
How to Specify the Join Relationship
Specifying Joins in the Where Condition
Implementing an Equi-join: one-to-one relationship
Generating Multiple SELECT Statements: One-to-many Relationship
Specifying the Join Type
Modifying SELECT Statements
Generating INSERT Statements
Inserting Data to Specific Columns
Defining a Widget's Participation in an INSERT Statement
Inserting Specific Values
Expression (insert_expression) Property
Inserting Data Using an INSERT Expression
Generating UPDATE Statements
Identifying Columns to Update
Defining a Widget's Participation in an UPDATE Statement
Expression (update_expression)
Specifying the Record to Update
Generating DELETE Statements
Implementing Optimistic Locking
Implementing Optimistic Locking using the Version Column Property
Examples of Optimistic Locking
Viewing the SQL Statements
Viewing SELECT Statements
Viewing INSERT Statements
Viewing UPDATE Statements
Validating Input Data against the Database
Implementing a Validation Link
Specifying a Validation Link
Validation Link Processing
Adding a Lookup to a Validation Link
Specifying the Lookup
How to Define a Lookup Specification
34. Specifying Transaction Manager Commands
Transaction Manger Commands
Command Syntax
Limiting the Number of Table Views
Implementing Full and Partial Commands
Setting the Transaction Mode
35. Generating Transaction Manager Events
Generating Transaction Manager Events
Traversing the Table Views
Generating Events in the Transaction Model
Invoking Event Functions and Models
Event Processing Steps
Controlling the Event Stack
Transaction Models and the Event Stack
Adding Your Own Transaction Events
Example
Logging Transaction Events
Using the Transaction Model with JetNet/Oracle Tuxedo
36. Runtime Transaction Manager Processing
Running Transaction Manager
Opening the Screen
Closing the Screen
Viewing the Generated SQL
Disabling the Transaction Manager
Displaying Data
Executing the Select Statement
Scrolling Through the Select Set
Controlling the Number of Rows
Customizing Select Processing
Updating the Database
Traversal for Database Updates
Updating Data
Updating Data in Arrays
Using Multi-text Widgets
Changing the Primary Key
Deleting Data
Clearing Data in Arrays
Inserting Data
Saving Data
Customizing Database Updates
Transaction Modes
Transaction Styles and Classes
Applying Styles
Accessing Transaction Information
Using Functions to Set Transaction Manager Behavior
Using Transaction Manager Variables
Using Traversal Properties
Reading the Current Transaction
Identifying a Widget's Table View
Identifying Links
JPL Properties for Transaction Manager Operations
Determining How Screen Data Has Changed
Processing Errors in the Transaction Manager
Identifying the Value of the TM_STATUS Variable
Setting the Value of TM_STATUS
Event Processing after Errors
Processing the Event Stack
Controlling Error Messages
Error Message Display
Error Message Content
Error Message Numbers
Suppress Error Messages
37. Processing Application Errors
Default Error Handlers
Server Activity
Client Output
Variables for Logging Error and Status Information
Database Error Event Functions
Writing an Error Event Function
Custom Error Handlers
Example
Part VI. Testing Your Application
38. Testing Application Components
Test Mode Menu Bar
Edit menu
Options menu
Keys menu
Windows menu
Transaction menu
Database menu
Middleware Session menu
Report menu
Testing Application Components
Testing Screens and Service Components
Service Components
How to Test a Service Component with a Direct Database Connection
Three-tier Client Screens
How to Test Client Screens with a Remote Database Connection
Two-tier Client Screens
How to Test Client Screens with a Direct Database Connection
Closing and Exiting
How to Close a Screen, but Remain in the Editor
How to Exit from the Editor
How to Exit Application Mode
39. Using the Debugger
Debugging Services and Service Components
How the Debugger Works
Starting and Stopping the Debugger
Views into Your Application
Configuring the Debugger
Setting Log File Preferences
Setting Debugger Preferences
Debugger Menu Bar
File
Tools
View
Windows
Edit
Trace
Breaks
Options
Viewing JPL
Opening a Source Module
Viewing Application Screen Information
Stepping through Program Execution
Using Animation
Setting Breakpoints
Setting Location Breakpoints
Setting Breakpoints on Execution Events
Break on Change in Expression
To call a specified function (in expert mode):
Monitoring Variables and JPL Expressions
Modifying and Monitoring Application Data
40. Identifying Users
Two-tier Applications
JetNet Applications
MTS Applications
41. Optimizing Applications
Database Fetches
Web Applications
LDBs
Part VII. Deploying the Application
42. Building Application Executables
Steps for Creating an Executable
Prepare the Application Directory
Determine the Executables to Build
Link the Database Engine
To link your database engine:
To exclude the JDB database from the executable:
To link JDB and your database engine:
Include C Modules in the Executable
To link your own C modules to the executable:
Identify the Database Version
To verify (or update) database-specific information:
Compile the Changes
Customizing Source Code for an Application
Source Code Structure
Specifying an Application Startup Screen
Specifying an Application Icon
Including Memory-Resident Components
To make screens, menus, or JPL modules memory-resident:
To make configuration files memory-resident:
Rename the Distributed Panther Library
To rename the Panther library:
Subsystem Installation
Oracle Tuxedo Executables
43. Preparing Applications for Release
Basic Deployment Steps
How to Deploy your Application
Required Files
Optional Files
Specifying Files and Directories
Customizing the Distribution
Configuration Support
Specifying a Startup File
Specifying a Title Screen
Specifying Your Own Icon
Part VIII. Advanced Development Topics
44. Installed Event Functions
Installed Function Types
Demand Functions
Automatic Functions
Standard versus Non-standard Arguments
Installation
Preparing Functions for Installation
SM_*FNC Macro
Function Name
Function Address
Installing Functions
func_type
funcs
num_funcs
Prototyped Functions
Accessing Standard Argument Information
Installing Prototyped Functions
Screen Functions
Screen Function Arguments
K_ENTRY
K_EXIT
K_EXPOSE
K_KEYS
K_NORMAL
K_OTHER
Screen Function Returns
Installation of an Automatic Screen Function
Installation of Demand Screen Functions
Field Functions
Execution
Entry
Exit
Validation
Field Function Arguments
VALIDED
MDT
K_ENTRY
K_EXIT
K_EXPOSE
K_EXTEND
K_EXTEND_LAST
K_KEYS
K_NORMAL
K_BACKTAB
K_ARROW
K_SVAL
K_USER
K_OTHER
K_INSDEL
Field Function Returns
Installation of an Automatic Field Function
Installation of Demand Widget Functions
Grid Functions
Grid Function Arguments
K_ENTRY
K_EXIT
K_EXPOSE
K_KEYS
K_NORMAL
K_BACKTAB
K_ARROW
K_SVAL
K_USER
K_OTHER
K_INSDEL
Grid Function Returns
Installation of Demand Grid Functions
Tab Control Functions
Tab Control Function Arguments
K_ENTRY
K_EXIT
K_EXPOSE
Group Functions
Group Function Arguments
Group Function Returns
Installation of an Automatic Group Function
Installation of Demand Group Functions
Client Authentication Functions
Client Authentication Arguments
Client Authentication Returns
Installation
Client Post-Connection Functions
Client Post-Connection Arguments
Client Post-Connection Returns
Installation
Help Function
Help Function Arguments
Help Function Returns
Installation
Timeout Functions
Timeout Function Arguments
TF_TIMEOUT
TF_RESTART
Timeout Function Returns
TF_KEEP_CALLING
TF_STOP_CALLING
Installation
Timer Functions
Timer Function Arguments
TF_TIMEOUT
TF_RESTART
Timer Function Returns
TF_KEEP_CALLING
TF_STOP_CALLING
Installation
Key Change Function
Key Change Function Arguments
Key Change Function Returns
Installation
Error Function
Error Function Arguments
Error Function Returns
Installation
Insert Toggle Function
Arguments
Returns
Installation
Check Digit Function
Arguments
Returns
Installation
Initialization and Reset Functions
Arguments
Returns
Installation
Record and Playback Functions
Arguments
Returns
Installation
Control Functions
Arguments
Returns
Installation
Status Line Function
Arguments
Returns
Installation
Video Processing Function
Arguments
Returns
Installation
Database Driver Hook Functions
Transaction Manager Event Functions
Arguments
Returns
Installation
Errors
Sample Functions
Prototyped
Example 2
Automatic Screen
Automatic Widget
Example 1
Example 2
Demand Widget
Automatic Group
External Help
Timeout
Key Change
Error
Insert Toggle
Initialization and Reset
Record and Playback
Control
Status Line
45. Customizing the User Interface
Using Message Files
Creating and Modifying Message Files
How to Create or Add to a Message File
Message Entry Syntax
Reserved Characters
Missing Entries
Message Classes
Defining a Message Class
Setting Message Display and Behavior Options
Customizing Date and Time Formats
Date/Time Defaults
Date/Time Tokens
Creating Date and Time Defaults
Translating Defaults for Developers
Literal Dates in Calculations
Numeric Formats
Numeric Format Syntax
Formats in Provided Message File
Creating a Default Numeric Format
Translating Defaults for Developers
Decimal Symbols
Customizing Push Button Labels for Message Boxes
How to Change/Translate Push Button Labels
Setting Yes/No Values
Using Alternate Message Files
Configuration Map File
Defining Colors
Defining Color Aliases
Editor Colors
Sample Colors Section
Defining Color Schemes
Default Schemes
Scheme Syntax
Defining Line and Box Styles
Character Mode Styles
GUI Styles
Setting Display and Printing Fonts
Point Sizes
Default Font
Default Font Size
Panther Font Aliases
Sample Configuration Map File
Translating Applications
8-Bit Character Data
Translating Screens in Application Programs
Distribution Translation
Installation Translation
Runtime Translation
46. Processing the Mouse Interface
Trapping Mouse Events
Using Key Change Functions
Trapping Double Clicks on a Widget
Getting Mouse Data
Determining Mouse Click Location
Identifying Mouse Coordinates
Mouse and Widgets
Mouse and Screen
Determining Mouse Button State
Identifying Keyboard Modifiers
Reporting Elapsed Time between Mouse Clicks
Changing the Mouse Pointer State
47. Dynamic Data Exchange
Panther as a DDE Server
Enabling Connections
Creating Links
Paste Links
Links Specified in Client Syntax
Microsoft Word
Microsoft Excel
Processing Links
Updating Client Data
Hot Links
Warm Links
Cold Links
Array Data
Data Conversion
Disabling Panther as a DDE Server
Panther as a DDE Client
Enabling Connections
Creating Links
Paste Links
Explicit Links Through Library Functions
Links Specified in Initialization File
Processing Link Requests
Updating Data from the Server
Array Data
Destroying Links to a DDE Server
Disconnecting from a DDE Server
Execute Transactions
Poke Transactions
48. Writing Portable Applications
Panther Header Definitions
Terminal Dependencies
Display Area and Attributes
Key Translation and Labels
Language Dependencies
Keystroke Filter Translation
Case Conversion
Range Checks
Numeric Data
Alphabetic Data
Non-Language Data
49. Sending Mail in Panther
Defining Global Mail Properties
Defining Multiple Addresses
Creating and Sending Email
Creating a Mail Message Object
Sending Mail
Sending a Screen Image
Sending Mail Using a Field
Sending Mail from a Text File
Sending Simple Mail Messages
Sending Attachments
A. Development Utilities
bin2c
bin2hex
binherit
cmap2bin
f2asc
formlib
jif2asc
jpl2bin
m2asc
msg2bin
msg2hdr
s2asc
B. VideoBiz
Starting VideoBiz
How to Start VideoBiz
VideoBiz Components
The Database
The Repository
Imported Database Tables
Other Repository Entries
Application Screens
Menu Bar/Toolbar
JPL Code
Styles Sheet
Sample Reports
Pixmap Files
The User's Guide to VideoBiz
What is VideoBiz?
Starting VideoBiz
How to Log into VideoBiz as an Employee
How to Exit VideoBiz
Identify the Customer
How To Search for a Customer Record
Add/Update Customer Records
How to Insert a Customer Record
How to Update a Customer Record
Video Rental Listing
How to Return a Video
Rent Videos
How to Rent a Video
Customer Profile
How to Obtain a Customer Profile
Video Lookup
Querying the Database and Selecting a Video
How to Search for a Video
View Video Details
Marketing
How to Run Marketing Reports
C. Panther Java Calculator
Repository Contents
Calculator Screen
Java Classes
D. Deployment Checklist for Two-tier Applications
Directory Structure for Two-tier Applications
Checklist for Deployment
Preparing a Windows Distribution
Preparing a UNIX Distribution
Index