Subject: | |
From: | |
Reply To: | |
Date: | Wed, 21 Apr 1999 17:18:41 GMT |
Content-Type: | text/plain |
Parts/Attachments: |
|
|
In article <[log in to unmask]>,
John C. Vestal <[log in to unmask]> wrote:
> I need an example of how to call a CM routine from an NM XL. I
>would prefer a COBOL example but any help would be appreciated.
So much for needing a PASCAL compiler...
Here's an example of one I wrote in '91. Be careful of input, output and
input/output. Also, where the item passed has an arbitrary length... be
careful to copy only the proper number of bytes.
Also, be sure to reference the correct SL.
$CONTROL SOURCE,LINES=60,DYNAMIC,SUBPROGRAM
IDENTIFICATION DIVISION.
PROGRAM-ID. MXXL002A.
**
** CONST
$define %HpPidtKnown =%0#
$define %HpPidtName =%1#
$define %HpPidtPlabel =%2#
**
$define %HpSystemSl =%0#
$define %HpLogonPubSl =%1#
$define %HpLogonGroupSl =%2#
$define %HpPubSl =%3#
$define %HpGroupSl =%4#
**
$define %HpMethodNormal =0#
$define %HpMethodSplit =1#
$define %HpMethodNoCopy =2#
**
$define %HpParmValue =0#
$define %HpParmWordRef =1#
$define %HpParmByteRef =2#
**
$define %HpCcg =0#
$define %HpCcl =1#
$define %HpCce =2#
$define %HpAllOk =0#
**
$define %Hpinput =%20000000000#
$define %Hpoutput =%10000000000#
**
$page
DATA DIVISION.
WORKING-STORAGE SECTION.
01 Hp--proc.
05 Hp--p-proc-id-type PIC X(01).
05 Hp--p-lib PIC X(01).
05 Hp--p-proc-name PIC X(16).
01 Hp--parms.
05 FILLER OCCURS 32.
10 Hp--pd-parmptr PIC S9(18) COMP.
10 Hp--pd-parmlen PIC S9(04) COMP.
10 Hp--pd-parm-type PIC S9(04) COMP.
10 Hp--pd-io-type PIC S9(09) COMP.
01 Hp--method PIC S9(09) COMP.
01 Hp--nparms PIC S9(09) COMP.
01 Hp--funclen PIC S9(09) COMP.
01 Hp--funcptr PIC S9(09) COMP.
01 Hp--cond-code PIC S9(04) COMP.
01 Hp--status.
05 Hp--all PIC S9(09) COMP.
05 FILLER REDEFINES Hp--all.
10 Hp--info PIC S9(04) COMP.
10 Hp--subsys PIC S9(04) COMP.
LINKAGE SECTION.
COPY MXXKSRB IN MXXCOPY.
COPY MXXKVCA IN MXXCOPY.
01 LINEBUF PIC X(80).
01 UNDERBUF PIC X(80).
** STUB procedure MXXL002A
PROCEDURE DIVISION USING SCROLLING-REVIEW-BLOCK
VIEW-COMM-AREA
LINEBUF
UNDERBUF.
0000-MXXL002A.
*
* Initialization
*
* Setup procedure information--name, lib, etc.
*
MOVE %HpPidtName TO Hp--p-proc-id-type.
MOVE %HpPubSl TO Hp--p-lib.
MOVE "MXXL002A" TO Hp--p-proc-name.
*
* Setup misc. variables
*
MOVE %HpMethodNormal TO Hp--method.
MOVE 4 TO Hp--nparms.
*
* Setup length/pointers for functional return if this
* is a FUNCTION. Set length to zero, pointer to NIL
* if this is not a FUNCTION.
*
MOVE 0 TO Hp--funclen.
MOVE 0 TO Hp--funcptr.
*
* Make a local copy of all VALUE parameters
*
*
* Build parameter descriptor array to describe each
* parameter.
*
*
* SCROLLING-REVIEW-BLOCK -- Input/Output by REFERENCE
*
CALL INTRINSIC ".LOC." USING SCROLLING-REVIEW-BLOCK
GIVING Hp--pd-parmptr (1).
CALL INTRINSIC ".LEN." USING SCROLLING-REVIEW-BLOCK
GIVING Hp--pd-parmlen (1).
MOVE %HpParmWordRef TO Hp--pd-parm-type (1).
COMPUTE Hp--pd-io-type (1) = %Hpinput + %Hpoutput.
*
* VIEW-COMM-AREA -- Input/Output by REFERENCE
*
CALL INTRINSIC ".LOC." USING VIEW-COMM-AREA
GIVING Hp--pd-parmptr (2).
COMPUTE Hp--pd-parmlen (2) = VCA-COMAREALEN * 2.
MOVE %HpParmWordRef TO Hp--pd-parm-type (2).
COMPUTE Hp--pd-io-type (2) = %Hpinput + %Hpoutput.
*
* LINEBUF -- Input by REFERENCE
*
CALL INTRINSIC ".LOC." USING LINEBUF
GIVING Hp--pd-parmptr (3).
CALL INTRINSIC ".LEN." USING LINEBUF
GIVING Hp--pd-parmlen (3).
MOVE %HpParmWordRef TO Hp--pd-parm-type (3).
COMPUTE Hp--pd-io-type (3) = %Hpinput.
*
* UNDERBUF -- Input by REFERENCE
*
CALL INTRINSIC ".LOC." USING UNDERBUF
GIVING Hp--pd-parmptr (4).
CALL INTRINSIC ".LEN." USING UNDERBUF
GIVING Hp--pd-parmlen (4).
MOVE %HpParmWordRef TO Hp--pd-parm-type (4).
COMPUTE Hp--pd-io-type (4) = %Hpinput.
*
* Do the actual SWITCH call
*
CALL INTRINSIC "hpswitchtocm" USING Hp--proc
Hp--method
Hp--nparms
Hp--parms
Hp--funclen
Hp--funcptr
Hp--cond-code
Hp--status.
IF Hp--all NOT = %HpAllOk
THEN
CALL INTRINSIC "quit" USING Hp--info.
*** end
--
Rick Gilligan
Senior Software Specialist
Computer And Software Enterprises, Inc.
E-mail: [log in to unmask]
|
|
|