000100 IDENTIFICATION DIVISION.

000200 PROGRAM-ID. ESCAPE-NAME-PATTERN IS COMMON PROGRAM.

000300

000400* This program demonstrates how to convert a table or

000500* procedure name obtained with an InstantSQL browse

000600* statement into a string pattern for use in another

000700* InstantSQL browse statement. It is written as a

000800* nested program to be contained within the separately

000900* compiled program that uses InstantSQL. It is called

001000* as follows:

001100*

001200* CALL "ESCAPE-NAME-PATTERN"

001300* USING Input-Name Input-Escape

001400* GIVING Output-Pattern.

001500*

001600* where, the arguments are as shown in the Linkage

001700* Section of this program. The argument descriptions

001800* were chosen such that they conform to InstantSQL

001900* data structures, for example, Input-Escape matches

002000* sql-ConSearchPatternEscGroup in the extended

002100* connection description group.

002200

002300 DATA DIVISION.

002400 WORKING-STORAGE SECTION.

002500 01 WS-IN-OFFSET PIC S9(4) BINARY.

002600 01 WS-OUT-OFFSET PIC S9(4) BINARY.

002700

002800 LINKAGE SECTION.

002900 01 INPUT-NAME.

003000 02 IN-LENGTH PIC S9(9) BINARY.

003100 02 IN-TEXT PIC X(sql-TableNameSize).

003200 01 INPUT-ESCAPE.

003300 02 IE-LENGTH PIC S9(4) LEADING.

003400 02 IE-TEXT PIC X(10).

003500 01 OUTPUT-PATTERN.

003600 02 OUT-LENGTH PIC S9(9) BINARY.

003700 02 OUT-TEXT PIC X(sql-TableNameSize).

003800

003900 PROCEDURE DIVISION

004000 USING INPUT-NAME INPUT-ESCAPE

004100 GIVING OUTPUT-PATTERN.

004200

004300 COPY-NAME-AND-ESCAPES.

004400 MOVE -1 TO OUT-LENGTH.

004500 MOVE SPACES TO OUT-TEXT.

004600 MOVE 0 TO WS-OUT-OFFSET.

004700 PERFORM VARYING WS-IN-OFFSET FROM 1 BY 1

004800 UNTIL WS-IN-OFFSET > IN-LENGTH

004900 EVALUATE IN-TEXT(WS-IN-OFFSET:1)

005000 WHEN "_"

005100 WHEN "%"

005200 PERFORM COPY-ESCAPE

005300 PERFORM COPY-NAME-CHAR

005400 WHEN IE-TEXT(1:1)

005500 IF ((WS-IN-OFFSET + IE-LENGTH - 1) <= IN-LENGTH) AND

005600 (IN-TEXT(WS-IN-OFFSET:IE-LENGTH) =

005700 IE-TEXT(1:IE-LENGTH))

005800 PERFORM COPY-ESCAPE

005900 PERFORM COPY-ESCAPE

006000 COMPUTE WS-IN-OFFSET = WS-IN-OFFSET + IE-LENGTH - 1

006100 ELSE

006200 PERFORM COPY-NAME-CHAR

006300 END-IF

006400 WHEN OTHER

006500 PERFORM COPY-NAME-CHAR

006600 END-EVALUATE

006700 END-PERFORM.

006800 MOVE WS-OUT-OFFSET TO OUT-LENGTH.

006900 EXIT PROGRAM. *> Successful exit.

007000

007100 COPY-NAME-CHAR.

007200 IF WS-OUT-OFFSET < sql-TableNameSize

007300 ADD 1 TO WS-OUT-OFFSET

007400 MOVE IN-TEXT(WS-IN-OFFSET:1) TO OUT-TEXT(WS-OUT-OFFSET:1)

007500 ELSE

007600 EXIT PROGRAM *> Overflow exit.

007700 END-IF.

007800

007900 COPY-ESCAPE.

008000 IF (WS-OUT-OFFSET + IE-LENGTH - 1) <= LENGTH OF OUT-TEXT

008100 MOVE IE-TEXT(1:IE-LENGTH) TO

008200 OUT-TEXT(WS-OUT-OFFSET + 1:IE-LENGTH)

008300 ADD IE-LENGTH TO WS-OUT-OFFSET

008400 ELSE

008500 EXIT PROGRAM *> Overflow exit.

008600 END-IF.

008700

008800 END PROGRAM ESCAPE-NAME-PATTERN.