Contents
xx
Figures
Figure 1–1: Measures of 4GL Efficiency . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1–2
Figure 2–1: A Procedure-driven Application Calling the Operating System . . . . . . . 2–3
Figure 2–2: Flow of Execution in a Procedure-driven Program . . . . . . . . . . . . . . . . 2–4
Figure 2–3: The Operating System Interacting with an Event-driven Application . . 2–5
Figure 2–4: Flow of Control in an Event-driven Program . . . . . . . . . . . . . . . . . . . . . 2–6
Figure 3–1: Procedure Call Stack . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3–24
Figure 3–2: Object Sharing Among External Procedures . . . . . . . . . . . . . . . . . . . . 3–26
Figure 6–1: Key Labels, Key Codes, and Key Functions . . . . . . . . . . . . . . . . . . . . . 6–2
Figure 6–2: Progress Key Translation Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . 6–4
Figure 6–3: Key Codes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6–5
Figure 6–4: The p-gon1.p Procedure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6–32
Figure 7–1: The Unnamed Streams . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7–2
Figure 7–2: Redirecting the Unnamed Output Stream . . . . . . . . . . . . . . . . . . . . . . . 7–3
Figure 7–3: Multiple Output Destinations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7–7
Figure 7–4: The OUTPUT CLOSE Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7–9
Figure 7–5: Redirecting the Unnamed Input Stream . . . . . . . . . . . . . . . . . . . . . . . . 7–15
Figure 7–6: Multiple Input Sources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7–17
Figure 7–7: Multiple Output Streams Scenario . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7–19
Figure 7–8: How QUOTER Prepares a File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7–33
Figure 7–9: Extracting QUOTER Input with SUBSTRING . . . . . . . . . . . . . . . . . . . . 7–35
Figure 8–1: Name Scoping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8–4
Figure 9–1: Data Movement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9–17
Figure 9–2: The Primary Data-handling Statements . . . . . . . . . . . . . . . . . . . . . . . . 9–18
Figure 9–3: Inner Joins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9–39
Figure 9–4: Left Outer Joins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9–42
Figure 9–5: Inner Join Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9–44
Figure 9–6: Left Outer Join Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9–46
Figure 9–7: Database Fields and Sequences Comparison . . . . . . . . . . . . . . . . . . . 9–63
Figure 9–8: Sequences and Overlapping Transactions . . . . . . . . . . . . . . . . . . . . . . 9–66
Figure 9–9: Positioning Database References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9–77
Figure 10–1: Resizable Browse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10–46
Figure 10–2: Character Browse in Row Mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10–47
Figure 10–3: Character Browse in Edit Mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10–48
Figure 11–1: Cascading Replication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11–16
Figure 11–2: Example Replication Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11–20
Figure 12–1: Transaction Undo Processing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12–3
Figure 12–2: Transaction Involving Two Tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12–4
Figure 12–3: The Transaction Block for the p-txn11.p Procedure . . . . . . . . . . . . . . . 12–35
Figure 13–1: Multi-user Update Scenario Without Locks . . . . . . . . . . . . . . . . . . . . . . 13–2
Figure 13–2: Multi-user Update Scenario with Locks . . . . . . . . . . . . . . . . . . . . . . . . . 13–4
Figure 13–3: How Progress Applies Locks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13–7
Figure 13–4: Locks and Transactions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13–11
Figure 13–5: Transaction Size and Locks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13–22