Kbase 18347: Progress/400 8.0C50 on AS/400 Operating System V4R3
Autor |
  Progress Software Corporation - Progress |
Acesso |
  Público |
Publicação |
  26/10/1998 |
|
SUMMARY:
This solution applies to Progress/400 DataServer.
In latest release of AS/400 operating system, V4R3, IBM has fixed a
bug that was existing already in previous releases V3R1, V3R2, V3R6,
V3R7, V4R1 and V4R2. Unfortunatelly this fix prevents Progress/400
DataServer to work properly since our code was workarounding the
cited bug.
The result is that Progress/400 8.0C50 and earlier do not work with
V4R3. To make it working, a CLLE program has to be compiled and make
it available to the operating system (the program has been provided
by IBM and it is listed at the end of this KBase). Notice that only
8.0C50 has been certified for V4R3, earlier releases will most likely
work but they are not supported.
It is expected that next release 8.0C60 and version 9 will not need
any fix since they will automatically detect if the IBM problem is
there or it is not.
IBM has also some PTF's available to fix earlier OS400 releases. If
the appropriate PTF is installed and the AS/400 is running release
8.0C50 or earlier, Progress will break and the same fix will have to
be applied. These PTF's are:
V4R1M0 SF51815
V4R2M0 SF51817
V4R1M4 SF51816
Please read the comments in the QMHRTVM program and follow these
steps to install it:
1. The fastest way to put the code in the AS/400 is copying & pasting
it from this KBase to a text file and then using ftp to transfer
it to the AS/400 (in ASCII mode) to the PROGRESS/QCLSRC file:
PUT QMHRTVM.TXT PROGRESS/QCLSRC.QMHRTVM
2. Use STRPDM PROGRESS/QCLSRC to assign type CLLE to the QMHRTVM
member and use option 14 to compile it.
3. Create a new library (let's call it FIXV4R3), and move the QMHRTVM
object to it:
CRTLIB FIXV4R3
WRKOBJPDM PROGRESS QMHRTVM and use option 3 (Copy)
4. Every time you have to run a Progress utility (like DUPPRODB or
STRPRONET), add the library to the system library list:
CHGSYSLIBL FIXV4R3 *ADD
5. Run the Progress utility.
6. Once the Progress utility has finished, remove it:
CHGSYSLIBL FIXV4R3 *REMOVE
jsa
26 Oct 98
/**********************************************************/
/* */
/* QMHRTVM */
/* */
/* This program can be used to correct the offeset in the */
/* RTVM0300 format returned by the QMHRTVM API. Prior to */
/* V4R3 the offsets in this format were incorrect. The */
/* offsets were set to a value 1 greater than they should */
/* have been. This program can be used as an interface */
/* between the application program and the API to set the */
/* offsets to the values expected by the application. */
/* */
/* To use this program, create it with the CRTBNDCL */
/* command and name it QMHRTVM. Put it in a library that */
/* is ahead of QSYS for the jobs that require the */
/* conversion. DO NOT use the CRTCLPGM command to create */
/* the program. This program must be able to accept */
/* either 10 or 13 parameters to match the QMHRVTM API, */
/* and only CL programs created with the CRTBNDCL command */
/* can accept a variable number of parameters. */
/* */
/* This program can be set up to convert the offsets to */
/* match either the V4R3 values or the pre-V4R3 values. */
/* See the comments for variables &CMPOFF and &ADJUST. */
/* */
/**********************************************************/
PGM (&PARM1 &PARM2 &PARM3 &PARM4 &PARM5 &PARM6 &PARM7 +
&PARM8 &PARM9 &PARM10 &PARM11 &PARM12 &PARM13)
DCL &PARM1 *CHAR 104
DCL &PARM2 *CHAR 4
DCL &PARM3 *CHAR 8
DCL &PARM4 *CHAR 1
DCL &PARM5 *CHAR 1
DCL &PARM6 *CHAR 1
DCL &PARM7 *CHAR 1
DCL &PARM8 *CHAR 1
DCL &PARM9 *CHAR 1
DCL &PARM10 *CHAR 1
DCL &PARM11 *CHAR 1
DCL &PARM12 *CHAR 1
DCL &PARM13 *CHAR 1
DCL &DATALEN *DEC (5 0)
DCL &WORK *CHAR 1
/**********************************************************/
/* Set the values of these variables as follows: */
/* */
/* To have the offsets set to the values returned by the */
/* program as corrected in V4R3 and the applicable PTFs */
/* for earlier versions, set &CMPOFF to 104 and &ADJUST */
/* to -1. */
/* */
/* To have the offsets set to the values that were */
/* returned by QMHRTVM prior to V4R3, set &CMPOFF to 105 */
/* and &ADJUST to 1. */
/* */
/**********************************************************/
DCL &CMPOFF *DEC (5 0) VALUE(105)
DCL &ADJUST *DEC (1 0) VALUE( 1)
/**********************************************************/
/* Determine how many parameters were passed. This */
/* code references parameter 11. If only 10 parameters */
/* were passed, an MCH exception will occur, and the */
/* MONMSG statement will branch to call QMHRTVM with 10 */
/* parameters. Otherwise it will be called with 13 */
/* parameters. */
/**********************************************************/
CHGVAR &WORK &PARM11
MONMSG MCH0000 EXEC(GOTO TENPARMS)
CALL QSYS/QMHRTVM (&PARM1 &PARM2 &PARM3 &PARM4 &PARM5 +
&PARM6 &PARM7 &PARM8 &PARM9 &PARM10 +
&PARM11 &PARM12 &PARM13)
MONMSG CPF0000 EXEC(CALL QMHRSNEM (' ' X'00000000' +
X'000000000000000000000000000000000000000+
15CD7C7D4C2C4E8404040' +
X'0000001E' RSNM0200 ' ' X'00000000'))
GOTO SKIP
TENPARMS:
RCVMSG MSGTYPE(*EXCP) WAIT(0) RMV(*YES)
CALL QSYS/QMHRTVM (&PARM1 &PARM2 &PARM3 &PARM4 &PARM5 +
&PARM6 &PARM7 &PARM8 &PARM9 &PARM10)
MONMSG CPF0000 EXEC(CALL QMHRSNEM (' ' X'00000000' +
X'000000000000000000000000000000000000000+
15CD7C7D4C2C4E8404040' +
X'0000001E' RSNM0200 ' ' X'00000000'))
SKIP:
/**********************************************************/
/* Determine if it is necessary to modify the offsets. */
/* Just return if: */
/* - Not format RTVM0300 */
/* - Message information length is too short to include */
/* any offsets */
/* - Offsets are already set to the expected values as */
/* set in the &CMPOFF variable. */
/**********************************************************/
IF (&PARM3 *NE 'RTVM0300') RETURN
IF (%BIN(&PARM2 1 4) *LT 56) RETURN
IF (%BIN(&PARM1 53 4) *EQ &CMPOFF) RETURN
/**********************************************************/
/* If the message information length includes some, but */
/* not all, of the offsets, the following statements will */
/* go to the correct statement to adjust only the offsets */
/* that are included in the structure. */
/**********************************************************/
IF (%BIN(&PARM2 1 4) *LT 68) GOTO SKIP3
IF (%BIN(&PARM2 1 4) *LT 80) GOTO SKIP2
IF (%BIN(&PARM2 1 4) *LT 92) GOTO SKIP1
/**********************************************************/
/* Adjust the offsets in the structure by adding the */
/* value set in the &ADJUST variable. */
/**********************************************************/
CHGVAR %BIN(&PARM1 89 4) (%BIN(&PARM1 89 4) + &ADJUST)
SKIP1:
CHGVAR %BIN(&PARM1 77 4) (%BIN(&PARM1 77 4) + &ADJUST)
SKIP2:
CHGVAR %BIN(&PARM1 65 4) (%BIN(&PARM1 65 4) + &ADJUST)
SKIP3:
CHGVAR %BIN(&PARM1 53 4) (%BIN(&PARM1 53 4) + &ADJUST)
ENDPGM