Tek-Tips is the largest IT community on the Internet today!

Members share and learn making Tek-Tips Forums the best source of peer-reviewed technical information on the Internet!

  • Congratulations Mike Lewis on being selected by the Tek-Tips community for having the most helpful posts in the forums last week. Way to Go!

Animating in Micro Focus Cobol

Status
Not open for further replies.

rustym

Programmer
Aug 9, 2001
11
0
0
US
I'm trying to step into the following Cobol module, which has been compiled to INT code. There are calls in this module which are to an external DLL. Note the code at the top of Working Storage and at the top of the Procedure Division to allow loading this DLL into memory. I have a comment in the section of code where I get the "114 error". What can I do to sucessfully step through this code?

Here is the module I am working with:

IDENTIFICATION DIVISION.
PROGRAM-ID. 'EaslBrdg'.

SPECIAL-NAMES.
CALL-CONVENTION 3 IS WINAPI
CALL-CONVENTION 66 IS NTAPI
CALL-CONVENTION 8 IS STATIC-CALL.

DATA DIVISION.

WORKING-STORAGE SECTION.
* Set up to call an external DLL called ESLlib.dll...
01 DLL-POINTER PROCEDURE-POINTER.
01 WORK-AREAS.
05 WK-MODULE-NAME PIC X(08).
05 WK-STRING-SIZE PIC S9(09) COMP-5 VALUE +0. V2.01
05 WK-RECVD-SIZE PIC S9(09) COMP-5 VALUE +0. V2.01
05 STRING-BUFFER-SIZE PIC 9(08).
05 STRING-RECVD-SIZE PIC 9(08).
05 WK-OKAY PIC X(01) VALUE SPACES.
88 ALLS-OKAY VALUE 'Y'.
01 CNST-CONSTANTS.
05 CNST-PROGRAM-ID PIC X(08) VALUE 'EASLBRDG'.
05 CNST-1 PIC 9(01) VALUE 1.
05 CNST-INVALID-MODULE PIC X(08) VALUE 'NA000007'.
05 CNST-10 PIC S9(04) COMP-5 VALUE +10.
05 CNST-IOAREA-SIZE PIC S9(04) COMP-5 VALUE +32000.
05 CNST-N PIC X(01) VALUE 'N'.
05 CNST-Y PIC X(01) VALUE 'Y'.

COPY ACMYW001.
COPY ANAYU001.
COPY ANAYU002.
COPY ANAYW001.
COPY ANAYW002.
COPY ANAYW003.

LINKAGE SECTION.
* I assign values to these variables once in the debugger.
* Ordinarily they would be passed in with values.
01 LNK-MODULE-NAME PIC X(08).
01 LNK-COMPLETION-CODE PIC 9(02).
01 LNK-IO-AREA PIC X(32000).

PROCEDURE DIVISION NTAPI USING LNK-MODULE-NAME
LNK-COMPLETION-CODE
LNK-IO-AREA.
* Load the DLL into memory...
SET DLL-POINTER TO ENTRY "ESLlib"

PERFORM 1000-PROCESS-REQUEST.
EXIT PROGRAM.
STOP RUN.

1000-PROCESS-REQUEST SECTION.
PERFORM 1100-GET-EASEL-STRINGS.
PERFORM 9010-TRACE-IO-API.
IF ALLS-OKAY
PERFORM 1200-CALL-MODULE.
PERFORM 1300-PUT-EASEL-STRINGS.
PERFORM 9010-TRACE-IO-API.
1000-EXIT.
EXIT.

1100-GET-EASEL-STRINGS SECTION.
MOVE CNST-Y TO WK-OKAY.

MOVE SPACES TO U001-IO-AREA
WK-MODULE-NAME.
MOVE CNST-IOAREA-SIZE TO WK-STRING-SIZE.
* THIS IS WHERE I GET THE 114 ERROR "Attempt to access item * beyond bounds of memory"
CALL STATIC-CALL "EslQueryStringChars" USING
BY VALUE LNK-MODULE-NAME
BY REFERENCE U001-IO-AREA
BY VALUE WK-STRING-SIZE
RETURNING WK-RECVD-SIZE
END-CALL.
MOVE U001-IO-AREA TO WK-MODULE-NAME.
IF WK-RECVD-SIZE = ZERO
MOVE CNST-N TO WK-OKAY
PERFORM 1250-INVALID-MODULE
GO TO 1100-EXIT.

MOVE SPACES TO U001-COMPLETION-CODE.
MOVE CNST-10 TO WK-STRING-SIZE.

CALL STATIC-CALL "EslQueryStringChars" USING
BY VALUE LNK-COMPLETION-CODE
BY REFERENCE U001-COMPLETION-CODE
BY VALUE WK-STRING-SIZE
RETURNING WK-RECVD-SIZE
END-CALL.

MOVE SPACES TO U001-IO-AREA.
MOVE CNST-IOAREA-SIZE TO WK-STRING-SIZE.

CALL STATIC-CALL"EslQueryStringChars" USING
BY REFERENCE LNK-IO-AREA
BY REFERENCE U001-IO-AREA
BY VALUE WK-STRING-SIZE
RETURNING WK-RECVD-SIZE
END-CALL.

MOVE WK-RECVD-SIZE TO U001-IO-AREA-LENGTH.
1100-EXIT.
EXIT.

1200-CALL-MODULE SECTION.
CALL WINAPI WK-MODULE-NAME USING U001-COMPLETION-CODE
U001-IO-AREA-LENGTH
U001-IO-AREA
ON EXCEPTION
PERFORM 1250-INVALID-MODULE.
1200-EXIT.
EXIT.

1250-INVALID-MODULE SECTION.
MOVE WNASTAT-FAILURE TO U001-RETURN-STATUS.
MOVE CNST-INVALID-MODULE TO U001-RETURN-MESSAGE.
MOVE WK-MODULE-NAME TO U001-IO-AREA.
MOVE FUNCTION LENGTH (WK-MODULE-NAME)
TO U001-IO-AREA-LENGTH.
1250-EXIT.
EXIT.

1300-PUT-EASEL-STRINGS SECTION.
MOVE CNST-10 TO WK-STRING-SIZE.
CALL STATIC-CALL "EslSetStringValue" USING
BY REFERENCE LNK-COMPLETION-CODE
BY REFERENCE U001-COMPLETION-CODE
BY VALUE WK-STRING-SIZE
END-CALL.

MOVE U001-IO-AREA-LENGTH TO WK-STRING-SIZE.
CALL STATIC-CALL "EslSetStringValue" USING
BY REFERENCE LNK-IO-AREA
BY REFERENCE U001-IO-AREA
BY VALUE WK-STRING-SIZE
END-CALL.
1300-EXIT.
EXIT.

9000-CALL-TRACER SECTION.
* NOTE: MUST SET FOLLOWING BEFORE CALLING THIS ROUTINE:
* W002-MESSAGE
MOVE CNST-ZERO TO U002-RETURN-STATUS.
MOVE SPACES TO U002-RETURN-MESSAGE.
MOVE CNST-PROGRAM-ID TO W002-MODULE-NAME.
MOVE W002-TRACER-INFO TO U002-IO-AREA.
MOVE FUNCTION LENGTH (U002-IO-AREA) TO
U002-IO-AREA-LENGTH.
CALL WINAPI CNST-TRACE-MODULE USING U002-COMPLETION-CODE
U002-IO-AREA-LENGTH
U002-IO-AREA.
9000-EXIT.
EXIT.

9010-TRACE-IO-API SECTION.
MOVE SPACES TO W002-MESSAGE.
STRING
U001-COMPLETION-CODE ' '
U001-IO-AREA-LENGTH ' '
U001-IO-AREA
DELIMITED BY SIZE
INTO W002-MESSAGE END-STRING.
PERFORM 9000-CALL-TRACER.
9010-EXIT.
EXIT.

Thanks for all your help,
Rusty
 
Set a breakpoint prior to the call. Double-click on the item returned from the call and populate it manually to simulate the call having taken place. Put the cursor on a line after the call and use "skip to cursor".
 
Status
Not open for further replies.

Part and Inventory Search

Sponsor

Back
Top