|
The programs are pretty short, so I'm posting the code below. How would I know if the first program is using teraspace memory? Also, it's not using pointers or doing anything else fancy (I don't think?). Code for first program: *************** Beginning of data ********************************************** 0001.00 DPARM1 DS 0002.00 D INPUT 15A 0003.00 DPARM2 DS OCCURS(1) 0004.00 D OUTPUT 15A 0005.00 DROW S 1 0 0006.00 * 0007.00 D TstRA S 1 DIM(50) 0008.00 D Char40 C CONST(X'40') Space 0009.00 D CharF9 C CONST(X'F9') '9' 0010.00 C *ENTRY PLIST 0011.00 C PARM PARM1 0012.00 * 0013.00 * remove null characters from ends of passed parms 0014.00 C MOVEA PARM1 TstRA 0015.00 C EXSR $CLEAN 0016.00 C MOVEA TstRA PARM1 0017.00 C CALL 'PGM002C' 0018.00 C PARM INPUT 0019.00 * 0020.00 C MOVEL INPUT OUTPUT 0021.00 C MOVE 1 ROW 0022.00 C/EXEC SQL SET RESULT SETS ARRAY :PARM2 FOR :ROW ROWS 0023.00 C/END-EXEC 0024.00 C RETURN 0025.00 ************************************************* 0026.00 C $CLEAN BEGSR 0027.00 * 0028.00 * remove null character(s) from passed parms 0029.00 * 0030.00 C Z-ADD 0 P 2 0 0031.00 C P DOWLT 50 0032.00 C ADD 1 P 0033.00 C TstRA(P) IFLT Char40 0034.00 C TstRA(P) ORGT CharF9 0035.00 C MOVEA *BLANKS TstRA(P) 0036.00 C ENDIF 0037.00 C ENDDO 0038.00 * 0039.00 C ENDSR 0040.00 /EJECT ****************** End of data ********************************** Code for second program: *************** Beginning of data **************************** 0001.00 PGM (&ITEM) 0002.00 DCL &ITEM *CHAR 15 0003.00 0004.00 OVRDBF IWIL04 (BPCSF/IWIL04 ) 0005.00 OVRDBF ECLL95 (BPCSF/ECLL95 ) 0006.00 OVRDBF ECHL01 (BPCSF/ECHL01 ) 0007.00 OVRDBF FMAL08 (BPCSF/FMAL08 ) 0008.00 OVRDBF FSOL98 (BPCSF/FSOL98 ) 0009.00 OVRDBF @FSO (BPCSF/@FSO ) 0010.00 OVRDBF @SOCL02 (BPCSF/@SOCL02 ) 0011.00 OVRDBF ILIL01 (BPCSF/ILIL01 ) 0012.00 OVRDBF IIML01 (BPCSF/IIML01 ) 0013.00 OVRDBF @ILT (BPCSF/@ILT ) 0014.00 OVRDBF @IMRL02 (BPCSF/@IMRL02 ) 0015.00 OVRDBF @SLD (BPCSF/@SLD ) 0016.00 0017.00 SNDMSG MSG('ITEM:' *CAT &ITEM *CAT '>') + <<< it breaks here 0018.00 TOMSGQ(MYLOGMSGQ) 0019.00 0020.00 CALL PGM(PGM002) PARM(&ITEM) 0021.00 0022.00 DLTOVR *ALL 0023.00 ENDPGM ****************** End of data *************************** Midrange Systems Technical Discussion <midrange-l@xxxxxxxxxxxx> on Monday, June 05, 2006 at 1:01 PM -0500 wrote:
Is it possible that the program that removes the null terminator and pads it with spaces is using teraspace memory to do that? If so, that'd explain why you get the MCH3602, and why it works with ILE programs (which understand how to work with teraspace) but doesn't work with OPM programs (which don't understand teraspace). I don't see why a V5R2 -> V5R4 upgrade would cause this problem, unless you replaced the "first program" (the one that removes the null and pads with blanks) when you upgraded it. The only other possibility that comes to mind is that one of the programs (possibly the one removing the null and adding spaces) is overwriting memory that doesn't belong to it. It's possible that in V5R2, you got "lucky" and overwrote memory that wasn't in use, but that a change in V5R4 caused the layout in memory to change so that you're now overwriting part of a pointer variable.
Mike Naughton Senior Programmer/Analyst Judd Wire, Inc. 124 Turnpike Road Turners Falls, MA 01376 413-863-4357 x444 mnaughton@xxxxxxxxxxxx
As an Amazon Associate we earn from qualifying purchases.
This mailing list archive is Copyright 1997-2024 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].
Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.