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



Commenti

Aggiungi commento
Commento non disponibile per questa notizia.