1 &ANALYZE-SUSPEND _VERSION-NUMBER UIB_v8r2 GUI
3 &ANALYZE-SUSPEND _UIB-CODE-BLOCK _CUSTOM _DEFINITIONS Procedure
4 /*--------------------------------------------------------------------------
15 ------------------------------------------------------------------------*/
16 /* This .W file was created with the Progress UIB.
*/
17 /*----------------------------------------------------------------------*/
19 /* *************************** Definitions
************************** */
21 /* _UIB-CODE-BLOCK-END
*/
26 /* *********************** Procedure Settings
************************ */
28 &ANALYZE-SUSPEND _PROCEDURE-SETTINGS
29 /* Settings for
THIS-PROCEDURE
33 Add Fields to
: Neither
34 Other Settings
: CODE-ONLY
COMPILE
36 &ANALYZE-RESUME _END-PROCEDURE-SETTINGS
38 /* ************************* Create Window
************************** */
40 &ANALYZE-SUSPEND _CREATE-WINDOW
41 /* DESIGN Window definition
(used by the UIB
)
42 CREATE WINDOW Procedure
ASSIGN
51 &ANALYZE-SUSPEND _UIB-CODE-BLOCK _CUSTOM _MAIN-BLOCK Procedure
54 /* *************************** Main Block
*************************** */
55 DEF INPUT PARAMETER locale
AS CHAR FORMAT "X(25)" INITIAL "" NO-UNDO.
56 DEF INPUT PARAMETER in-state
AS CHAR FORMAT "X(10)" INITIAL "" NO-UNDO.
57 DEF OUTPUT PARAMETER matching-postcode
AS CHAR INITIAL ?
NO-UNDO.
59 DEF VAR w1
AS WIDGET-HANDLE NO-UNDO.
61 ASSIGN WIDTH-CHARS = 68
64 TITLE = "Postal Code Search".
66 DEF VAR postcode-line
AS CHAR NO-UNDO.
67 DEF VAR test-value
AS CHAR NO-UNDO.
68 DEF VAR test-length
AS INTEGER NO-UNDO.
69 DEF VAR some-found
AS LOGICAL INITIAL no
NO-UNDO.
71 DEF VAR postcode
AS CHAR LABEL "Code" FORMAT "X(4)" INITIAL ?
NO-UNDO.
72 DEF VAR out-locale
AS CHAR LABEL "Location name" FORMAT "X(50)" NO-UNDO.
73 DEF VAR out-state
AS CHAR LABEL "State" FORMAT "X(10)" NO-UNDO.
75 DEFINE STREAM code-list.
76 DEF VAR start-pos
AS INTEGER NO-UNDO.
78 /* This mucking around with the seek offset in the stream should mean
*/
79 /* the search happens a lot quicker.
*/
80 INPUT STREAM code-list
FROM postcode.txt .
81 start-pos
= ASC(CAPS(SUBSTRING(locale
, 1, 1))) - ASC('A'
) - 1.
82 IF start-pos
< 0 THEN start-pos
= 0.
83 SEEK STREAM code-list
TO END.
84 start-pos
= INTEGER( (SEEK(code-list
) * start-pos
) / 26 ).
85 SEEK STREAM code-list
TO start-pos.
86 /* MESSAGE start-pos
VIEW-AS ALERT-BOX INFORMATION.
*/
88 test-length
= LENGTH( locale
).
90 VIEW FRAME x
IN WINDOW w1.
93 DO WHILE TRUE WITH FRAME x
:
94 IMPORT STREAM code-list
UNFORMATTED postcode-line.
95 test-value
= SUBSTRING( postcode-line
, 6, test-length
).
96 IF test-value
= locale
THEN DO:
97 postcode
= SUBSTRING( postcode-line
, 1, 4).
98 out-locale
= SUBSTRING( postcode-line
, 6, R-INDEX( postcode-line
, "(") - 6 ).
99 out-state
= SUBSTRING( postcode-line
, R-INDEX( postcode-line
, "(") + 1 ).
100 out-state
= SUBSTRING( out-state
, 1, INDEX( out-state
, ")") - 1 ).
101 DISPLAY postcode out-locale out-state
WITH DOWN FRAME x
NO-BOX USE-TEXT.
103 IF out-locale
= locale
AND (out-state
= in-state
OR in-state
= "") THEN
104 matching-postcode
= postcode.
107 ELSE IF some-found
THEN LEAVE.
112 IF matching-postcode
<> ?
THEN
113 MESSAGE "Recommended postcode is" matching-postcode
VIEW-AS ALERT-BOX INFORMATION .
117 /* _UIB-CODE-BLOCK-END
*/