Ottenere informazioni sul job in C
Questo modulo scritto in C, consente di ottenere informazioni sul job in esecuzione. Le informazioni disponibili sono:
- jobid;
- jobname;
- stepname;
- procstepname;
- cpuid (Lpar);
- userid;
- lista dd e dataset concatenati
Esempio di utilizzo#include <jobinfo>
int main(int argc, char **argv) {
char s[16];
getCurUserId(s);
printf("USERID: %s\n", s);
getCurJobId(s);
printf("JOBID: %s\n", s);
getCurJobName(s);
printf("JOBNAME: %s\n", s);
getCurStepName(s);
printf("STEPNAME: %s\n", s);
getCurProcStepName(s);
printf("PROCSTEP: %s\n", s);
getCurCpuId(s);
printf("CPUID: %s\n", s);
}
JOBINFO.C#include <jobinfo>
int getCurJobId(char *buf) {
int pASCB = * (int *) 0x224;
int pASSB = * (int *) (pASCB + 0x150);
int pJSAB = * (int *) (pASSB + 0xA8);
char *jId = (char *) (pJSAB + 0x14);
return copyField(jId, buf, 8);
}
int getCurJobName(char *buf) {
int pASCB = * (int *) 0x224;
int pASSB = * (int *) (pASCB + 0x150);
int pJSAB = * (int *) (pASSB + 0xA8);
char *jNm = (char *) (pJSAB + 0x1C);
return copyField(jNm, buf, 8);
}
int getCurStepName(char *buf) {
int pTCB = * (int *) 0x21C;
int pTIOT = * (int *) (pTCB + 0xC);
char *sNm = (char *) (pTIOT + 0x8);
return copyField(sNm, buf, 8);
}
int getCurProcStepName(char *buf) {
int pTCB = * (int *) 0x21C;
int pTIOT = * (int *) (pTCB + 0xC);
char *pSN = (char *) (pTIOT + 0x10);
return copyField(pSN, buf, 8);
}
int getCurCpuId(char *buf) {
int pCVT = * (int *) 0x10;
int pSMCA = * (int *) (pCVT + 0xC4);
char *cpu = (char *) (pSMCA + 0x10);
return copyField(cpu, buf, 4);
}
int getCurUserId(char *buf) {
int pASCB = * (int *) 0x224;
int pASSB = * (int *) (pASCB + 0x150);
int pJSAB = * (int *) (pASSB + 0xA8);
char *uId = (char *) (pJSAB + 0x2C);
return copyField(uId, buf, 8);
}
int getDDIterator() {
int pTCB = * (int *) 0x21C;
int pTIOT = * (int *) (pTCB + 0xC);
int ddIterator = pTIOT + 24;
char ddLen = * (char *) ddIterator;
if (ddLen == 0) return 0;
return ddIterator;
}
int getNextDD(int ddIterator, char *ddName) {
if (ddIterator == 0) return 0;
char *pDDN = (char *) (ddIterator + 4);
copyField(pDDN, ddName, 8);
char ddLen = * (char *) ddIterator;
do {
ddIterator += ddLen;
ddLen = * (char *) ddIterator;
if (ddLen == 0) return 0;
pDDN = (char *) (ddIterator + 4);
} while (*pDDN == 0 !! *pDDN == 0x40);
return ddIterator;
}
int getDSIterator(int ddIterator) {
return ddIterator;
}
int getNextDS(int dsIterator, char *dsName, char *member, char *dsVol) {
if (dsIterator == 0) return 0;
int pJFCB = sva2std(ptr3(dsIterator + 12));
char *pDSN = (char *) (pJFCB + 16);
char *pMbr = (char *) (pJFCB + 60);
char *pVol = (char *) (pJFCB + 134);
copyField(pDSN, dsName, 44);
copyField(pMbr, member, 8);
copyField(pVol, dsVol , 6);
char ddLen = * (char *) dsIterator;
dsIterator += ddLen;
ddLen = * (char *) dsIterator;
if (ddLen == 0) return 0;
char *pDDN = (char *) (dsIterator + 4);
if (*pDDN != 0 && *pDDN != 0x40) return 0;
return dsIterator;
}
int ptr3(int address) {
return (* (int *) address) >> 8;
}
int sva2std(int address) {
if (address & 0xF != 0xF) return address;
int pTCB = * (int *) 0x21C;
int pJSCB = * (int *) (pTCB + 0xB4);
int pQMPL = * (int *) (pJSCB + 0xF4);
int pQMAT = * (int *) (pQMPL + 0x18);
while (address > 0x10000) {
pQMAT = * (int *) (pQMAT + 0xC);
address -= - 0x10000;
}
return * (int *) (pQMAT + address + 1);
}
int copyField(char *src, char *dst, int max) {
int i = 0;
while (src[i] != 0 && src[i] != 0x40 && i < max) {
dst[i] = src[i];
i++;
}
dst[i] = 0;
return i;
}
JOBINFO.H#ifndef __JOBINFO_H
#define __JOBINFO_H
#ifndef __NO_PRAGMA
#pragma map (getCurJobId, "GCJOBID")
#pragma map (getCurJobName, "GCJNAME")
#pragma map (getCurStepName, "GCSNAME")
#pragma map (getCurProcStepName, "GCPSNAME")
#pragma map (getCurCpuId, "GCCPUID")
#pragma map (getCurUserId, "GCUID")
#pragma map (getDDIterator, "GDDITER")
#pragma map (getNextDD, "GNEXTDD")
#pragma map (getDSIterator, "GDSITER")
#pragma map (getNextDS, "GNEXTDS")
#endif
int getCurJobId(char *buf);
int getCurJobName(char *buf);
int getCurStepName(char *buf);
int getCurProcStepName(char *buf);
int getCurCpuId(char *buf);
int getCurUserId(char *buf);
int getDDIterator();
int getNextDD(int ddIterator, char *ddName);
int getDSIterator(int ddIterator);
int getNextDS(int dsIterator, char *dsName, char *member, char *dsVol);
int ptr3(int address);
int sva2std(int address);
int copyField(char *src, char *dst, int max);
#endif