|
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-2025 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.