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]