|
Hi all, I've tried everything I know but I cannot get this MI source member to compile, I consistently get the following error: Operation code for instruction number X'000A' invalid. Message MCH4204, X'000A' received while running create program command. If I remove the line in question (CMPNV), and recompile I get the same error on the next statement SETSPPO, If I remove that statement the program will compile. Both these statements look fine to me: CMPNV(B) THE-OFFSET, WCBTBL-SIZE/NLO(NEXT-WCB-TABLE); SETSPPO .WCB-ENTRY, THE-OFFSET; I have checked that the label NEXT-WCB-TABLE exists as do THE-OFFSET var (BIN(4)), WCBTBL-SIZE (BIN4), and .WCB-ENTRY (space pointer) Here is the complete source member. I challenge anyone to get this to compile. P.S. I have tried this on both a V5R1 and V5R2 machines. Thanks! Paul (Stumped in Seattle ). Source follows: ENTRY RTVJOBLDA(ENTPARM) EXT; /* Declare a pointer to the job name */ DCL SPCPTR P#JOBNAM PARM; /* Declare a pointer to the job user */ DCL SPCPTR P#JOBUSR PARM; /* Declare a pointer to the job number */ DCL SPCPTR P#JOBNBR PARM; /* Declare a pointer to the job data area required (*LDA etc) */ DCL SPCPTR P#JOBARA PARM; /* Declare a pointer to the passed LDA space. */ DCL SPCPTR P#RETSPC PARM; /* Declare a pointer to the returned code. */ DCL SPCPTR P#RETCDE PARM; /* Parameter list. */ DCL OL ENTPARM(P#JOBNAM,P#JOBUSR,P#JOBNBR,P#JOBARA, P#RETSPC,P#RETCDE) EXT PARM MIN(0); /* Job name */ DCL DD #JOBNAME CHAR(10) BAS(P#JOBNAM); /* Job user name */ DCL DD #JOBUSER CHAR(10) BAS(P#JOBUSR); /* Job number */ DCL DD #JOBNBR CHAR(6) BAS(P#JOBNBR); /* Job data area */ DCL DD #JOBARA CHAR(4) BAS(P#JOBARA); /* Returned LDA value */ DCL DD #RETSPC CHAR(2000) BAS(P#RETSPC); /* Returned code */ DCL DD #RETCDE PKD(1) BAS(P#RETCDE); /* Current Job PCO space */ DCL DD OWN-PCO CHAR(512) BASPCO; /*------------------------------------------*/ /* Pointer in PCO to Master Table (QWCBT00) */ /*------------------------------------------*/ DCL SYSPTR @WCBT00 DEF(OWN-PCO) POS(433); /* Offset X'1B0' */ DCL SPCPTR .WCB-ROOT; DCL DD WCB-ROOT CHAR(2048) BAS(.WCB-ROOT); DCL SYSPTR .WCB-TABLES(30) DEF(WCB-ROOT) POS(577); /* Work variables */ DCL DD THE-TABLE BIN(4); DCL DD THE-OFFSET BIN(4); /* Size of the Work Control Block table(s) */ DCL SPCPTR .WCBSPC; DCL DD WCBTBL-SPACE CHAR(256) BAS(.WCBSPC); DCL DD WCBTBL-SIZE BIN(4) DEF(WCBTBL-SPACE) POS(21); /* Work Control Table entry structure */ DCL SPCPTR .WCB-ENTRY; DCL DD WCB-ENTRY CHAR(1024) BAS(.WCB-ENTRY); DCL DD WCB-JOBNAM CHAR(10) DEF(WCB-ENTRY) POS( 1); DCL DD WCB-JOBUSR CHAR(10) DEF(WCB-ENTRY) POS( 11); DCL DD WCB-JOBNBR CHAR( 6) DEF(WCB-ENTRY) POS( 21); DCL SYSPTR .JOBPCS DEF(WCB-ENTRY) POS( 33); DCL SYSPTR .JOBLDA DEF(WCB-ENTRY) POS(113); /* GDA has a space and actual data space */ DCL SPCPTR .ARAPTR; DCL DD ARASPACE CHAR(2048) BAS(.ARAPTR); DCL DD ARAOFF BIN(2) DEF(ARASPACE) POS(3); /* Space pointer to a PCS space. */ DCL SPCPTR .PCSPTR; DCL DD PCSSPC CHAR(4096) BAS(.PCSPTR); /* Pointer from the PCSSPC to the jobs GDA. */ DCL SYSPTR .JOBGDA DEF(PCSSPC) POS(209); /* H'D1' */ DCL SYSPTR .JOBPDA DEF(PCSSPC) POS(353); /* H'161' */ /*------------------------------------------*/ /* Executable instructions */ /*------------------------------------------*/ GET-WCB-ROOT: SETSPPFP .WCB-ROOT, @WCBT00; /* Point WCB-ROOT structure at address of Master Table. */ CPYNV THE-TABLE, 0; NEXT-WCB-TABLE: /* If searched maximum table entries, then job not found */ CMPNV(B) THE-TABLE, 30/EQ(.BP00003); ADDN(S) THE-TABLE, 1; /* If pointer null (end of index reached), then skip to */ /* "No job found" handling. */ CMPPTRT(B) .WCB-TABLES(THE-TABLE), * /EQ(.BP00003); /* Find the size of the table from table header */ SETSPPFP .WCBSPC, .WCB-TABLES(THE-TABLE); /* Search table entries for matching job */ PREPARE-TO-SEARCH-WCB-TABLE: /* Init pointer to start of table */ SETSPPFP .WCB-ENTRY, .WCBSPC; /* Add the offset to start of job entries then skip two statements */ CPYNV(B) THE-OFFSET, H'0300'/POS(=+2); /* first entry */ NEXT-WCTBL-ENTRY: ADDN(S) THE-OFFSET, H'0400'; /* size of entry */ CMPNV(B) THE-OFFSET, WCBTBL-SIZE/NLO(NEXT-WCB-TABLE); SETSPPO .WCB-ENTRY, THE-OFFSET; CHECK-WCBTBL-ENTRY: /* Now test for a job match */ CMPBLA(B) #JOBNAME, WCB-JOBNAM/NEQ(NEXT-WCTBL-ENTRY); CMPBLA(B) #JOBUSER, WCB-JOBUSR/NEQ(NEXT-WCTBL-ENTRY); CMPBLA(B) #JOBNBR , WCB-JOBNBR/NEQ(NEXT-WCTBL-ENTRY); /* everything matches - WE HAVE THE JOB!! */ B .GOTJOB; .GOTJOB: BRK 'BREAK002'; CMPBLA(B) #JOBARA,C'*LDA'/NEQ(.NOTLDA0); /* Make sure we have an LDA. Should be a system pointer. */ CMPPTRT(B) .JOBLDA,X'01'/NEQ(.BP00004); /* Set to LDA space... */ SETSPPFP .ARAPTR, .JOBLDA; BRK 'BREAK008'; ADDSPP .ARAPTR, .ARAPTR, 96; /* H'60' */ /* Pass it back. */ CPYBLAP #RETSPC,ARASPACE(1:1024),C' '; CPYNV #RETCDE,0; B .BP00002; .NOTLDA0: /* If job is no longer active... */ CMPPTRT(B) .JOBPCS,X'01'/NEQ(.BP00005); SETSPPFP .PCSPTR, .JOBPCS; BRK 'BREAK003'; CMPBLA(B) #JOBARA,C'*GDA'/NEQ(.NOTGDA0); /* Make sure we have an GDA. Should be a system pointer. */ CMPPTRT(B) .JOBGDA,X'01'/NEQ(.BP00004); /* Set to GDA space... */ SETSPPFP .ARAPTR, .JOBGDA; BRK 'BREAK004'; /* Pass it back. */ ADDSPP .ARAPTR, .ARAPTR, ARAOFF; ADDSPP .ARAPTR, .ARAPTR, 3; BRK 'BREAK005'; CPYBLAP #RETSPC,ARASPACE(1:512),C' '; B .NOTGDA1; .NOTGDA0:; CMPPTRT(B) .JOBPDA,X'01'/NEQ(.BP00004); /* Set to PDA space... */ SETSPPFP .ARAPTR, .JOBPDA; BRK 'BREAK006'; ADDSPP .ARAPTR, .ARAPTR, ARAOFF; ADDSPP .ARAPTR, .ARAPTR, 3; BRK 'BREAK007'; CPYBLAP #RETSPC, ARASPACE(1:2000),C' '; .NOTGDA1:; CPYNV #RETCDE,0; .BP00002:; DEACTPG * ; RTX *; /* Branch here if job not found */ .BP00003:; CPYNV #RETCDE,9; B .BP00002; /* Branch here if no LDA */ .BP00004:; CPYNV #RETCDE,8; B .BP00002; /* Branch here if job not active */ .BP00005:; CPYNV #RETCDE,7; B .BP00002; PEND;
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.