Re: MI program unable to locate job - need assistance

Bruce Vining <[email protected]> Wed, 14 May 2008 10:03:46 -0700 (PDT)
Newsgroups gmane.comp.lang.as400.mi
Message-ID <[email protected]>
The API allows you to run a program in the target job.  That program could certainly access the LDA and then send the results back via a *DTAQ message, a socket connection, a database file, a *USRSPC,...
   
  Bruce

Rich Hart <[email protected]> wrote:
  Except that I looked up the API and it doesn't seem to have anything to do 
with retrieving the Local Data Area!

But yes: Unless you are wanting to retrieve the LDA (etc) of another job 
(other than the current job that the MI program runs in), an API would be a 
better choice, probably. Much easier! And guaranteed to work from release 
to release, which is probably the best argument. No more messing with 
System State programs!


----- Original Message ----- 
From: "Ted Slate" 
To: "MI Programming on the AS400 / iSeries" 
Sent: Wednesday, May 14, 2008 11:04 AM
Subject: Re: [MI400] MI program unable to locate job - need assistance


> Couple of things, code 9 returned doesn't prove that all 30 tables were 
> traversed. You can also exit on a null value with code 9 which just 
> presumes that there are no more tables left to search. Also the job 
> active check is after the LDA check which really makes no sense. The 
> other thing is that have you verified the inputs into the program, that 
> the job you're searching actually does exist? I know it seems trivial 
> but....
>
> Finally this code is dead after V5R4. You may want to abandon this code 
> and use the api as suggested.
>
>
>
>> Date: Mon, 12 May 2008 12:20:56 -0700> From: [email protected]> To: 
>> mi400-Zwy7GipZuJhWk0Htik3J/[email protected]> Subject: [MI400] MI program unable to locate job - 
>> need assistance> > Hello folks,> > I have an MI program that for some 
>> reason is unable to locate jobs on> a system and returns with code 9. 
>> This same program works fine on> other systems. Just wondering if there's 
>> anything I am missing in the> code itself. Has the maximum number of WCB 
>> tables increased beyond> 30?> > Thanks!> > All systems at V5R4 and sec 
>> level 40, program is System State:> > ENTRY RTVJOBLDA(ENTPARM) EXT;> /* 
>> Declare a pointer to the job name */> DCL SPCPTR .#JOBNAM PARM;> /* 
>> Declare a pointer to the job user */> DCL SPCPTR .#JOBUSR PARM;> /* 
>> Declare a pointer to the job number */> DCL SPCPTR .#JOBNBR PARM;> /* 
>> Declare a pointer to the job data area required (*LDA etc) */> DCL SPCPTR 
>> .#JOBARA PARM;> /* Declare a pointer to the passed LDA space. */> DCL 
>> SPCPTR .#RETSPC PARM;> /* Declare a pointer to the returned cod!
> e. */> DCL SPCPTR .#RETCDE PARM;> /* Parameter list. */> DCL OL 
> ENTPARM(.#JOBNAM, .#JOBUSR, .#JOBNBR, .#JOBARA,> .#RETSPC, .#RETCDE) EXT 
> PARM MIN(0);> /* Job name */> DCL DD #JOBNAME CHAR(10) BAS(.#JOBNAM);> /* 
> Job user name */> DCL DD #JOBUSER CHAR(10) BAS(.#JOBUSR);> /* Job number 
> */> DCL DD #JOBNBR CHAR(6) BAS(.#JOBNBR);> /* Job data area */> DCL DD 
> #JOBARA CHAR(4) BAS(.#JOBARA);> > /* Returned LDA value */> > DCL DD 
> #RETSPC CHAR(2000) BAS(.#RETSPC);> > /* Returned code */> > DCL DD #RETCDE 
> PKD(1) BAS(.#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-OFFS!
> ET 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;> 
> _______________________________________________> This is the MI 
> Programming on the AS400 / iSeries (MI400) mailing list> To post a message 
> email: MI400-Zwy7GipZuJhWk0Htik3J/[email protected]> To subscribe, unsubscribe, or change list 
> options,> visit: http://lists.midrange.com/mailman/listinfo/mi400> or 
> email: !
> MI400-request-Zwy7GipZuJhWk0Htik3J/[email protected]> Before posting, please take a moment to review 
> the archives> at http://archive.midrange.com/mi400.>
> _________________________________________________________________
> Windows Live SkyDrive lets you share files with faraway friends.
> http://www.windowslive.com/skydrive/overview.html?ocid=TXT_TAGLM_WL_Refresh_skydrive_052008
> _______________________________________________
> This is the MI Programming on the AS400 / iSeries (MI400) mailing list
> To post a message email: MI400-Zwy7GipZuJhWk0Htik3J/[email protected]
> To subscribe, unsubscribe, or change list options,
> visit: http://lists.midrange.com/mailman/listinfo/mi400
> or email: MI400-request-Zwy7GipZuJhWk0Htik3J/[email protected]
> Before posting, please take a moment to review the archives
> at http://archive.midrange.com/mi400.
>
> 

_______________________________________________
This is the MI Programming on the AS400 / iSeries (MI400) mailing list
To post a message email: MI400-Zwy7GipZuJhWk0Htik3J/[email protected]
To subscribe, unsubscribe, or change list options,
visit: http://lists.midrange.com/mailman/listinfo/mi400
or email: MI400-request-Zwy7GipZuJhWk0Htik3J/[email protected]
Before posting, please take a moment to review the archives
at http://archive.midrange.com/mi400.




Bruce
Bruce Vining Services
507-206-4178
_______________________________________________
This is the MI Programming on the AS400 / iSeries (MI400) mailing list
To post a message email: MI400-Zwy7GipZuJhWk0Htik3J/[email protected]
To subscribe, unsubscribe, or change list options,
visit: http://lists.midrange.com/mailman/listinfo/mi400
or email: MI400-request-Zwy7GipZuJhWk0Htik3J/[email protected]
Before posting, please take a moment to review the archives
at http://archive.midrange.com/mi400.