Sample LE C user exit
This topic illustrates a sample user exit written in LE C.
/*--------------------------------------------------------------------*/
/* D I S C L A I M E R */
/*--------------------------------------------------------------------*/
/* */
/* THIS IS A SAMPLE LOADPLUS USER EXIT. THIS EXIT WOULD BE USED */
/* IN ORDER TO DEFINE USER VARIABLES FOR BUILDING DATASET NAMES FOR */
/* DYNAMIC WORKFILE ALLOCATION WITH THE DSNPAT KEYWORD AND FOR */
/* SHRLEVEL CHANGE WITH THE SPILLDSNPAT KEYWORD. */
/* */
/* THIS EXIT WILL ONLY BE INVOKED WHEN IT IS SPECIFICALLY NAMED */
/* IN THE AMU$OPTS DSNUEXIT PARAMETER OR IN THE DSNUEXIT PARAMETER OF */
/* THE LOAD COMMAND. THE SPECIFICATION IN THE LOAD COMMAND WILL */
/* OVERRIDE THE SPECIFICATION IN THE AMU$OPTS MACRO. IF THE NAME */
/* SPECIFIED IS 'NONE' WITHOUT THE SINGLE QUOTE MARKS, THE EXIT WILL */
/* NOT BE INVOKED. */
/* */
/* NOTE: PLEASE REVIEW THE DOCUMENTATION IN THE REFERENCE MANUAL, */
/* AND THE FOLLOWING USAGE NOTES PRIOR TO IMPLEMENTING THIS EXIT. */
/* */
/* PLEASE CALL BMC SOFTWARE PRODUCT SUPPORT WITH ANY QUESTIONS YOU */
/* MAY HAVE IN THIS AREA. */
/* */
/* PHONE: 1-800-537-1813 */
/* */
/*--------------------------------------------------------------------*/
/* N O T E S */
/*--------------------------------------------------------------------*/
/* */
/* AMUEDSL IS CALLED ONCE AT THE BEGINNING OF EITHER THE PRELOAD */
/* PHASE OR THE COMBINED PHASE. */
/* */
/* WHEN INVOKED IT IS PASSED THE ADDRESS OF A USER EXIT BLOCK */
/* DESCRIBED BY THE AMUDSNXP STRUCT. */
/* THIS CALL IS FROM ASEMBLER MODULE DYNWDSNX */
/* */
/* UPON EXIT RETRUN CODE FROM THIS EXIT */
/* */
/* 0 GOOD RETURN */
/* */
/* OTHER ERROR RETURN, TERMINATE UTILITY */
/* */
/* AMUDSNXP STRUCT THIS STRUCT CONTAINS BOTH INPUT */
/* AND OUTPUT FIELDS. INPUT FIELDS ARE PROVIDED TO */
/* PASS VITAL INFORMATION TO THIS EXIT. ANY MODIFI- */
/* CATIONS TO THESE FIELDS WILL BE DISREGARDED UPON */
/* RETURN TO THE CALLER. THE OUTPUT FIELDS ARE */
/* PROVIDED TO ALLOW THE EXIT TO PASS INFORMATION */
/* BACK TO THE CALLER. */
/* */
/*--------------------------------------------------------------------*/
/* */
/*--------------------------------------------------------------------*/
/* */
/* XPUVARS DEFINES THE OUTPUT AREA OF THE AMUDSNXP STRUCT AT TAG */
/* XPUVAREA. YOU MAY USE THIS STRUCT TO EASILY REFERENCE THE ARRAY */
/* DEFINED AT XPUVAREA. */
/* */
/* NOTE: */
/* */
/* THE NUMBER OF ENTRIES IN THE XPUVAREA ARRAY MUST NOT EXCEED 100 */
/* OR YOU WILL ADDRESS BEYOND THE END OF THE STRUCTURE STORAGE */
/* PROVIDED FOR THIS ROUTINE. */
/* */
/* VARIABLE NAME: */
/* */
/* 1. MUST BEGIN WITH AN UNDERSCORE CHARACTER C'_' X'6D' */
/* 2. MUST BEGIN IN THE LEFTMOST BYTE OF XPUVNAME FIELD */
/* 3. IF LESS THAN 9 BYTES, MUST BE PADDED ON THE RIGHT WITH BLANKS */
/* 4. MAY NOT CONTAIN EMBEDDED BLANKS */
/* 5. NON-BLANK CHARACTERS AFTER THE LEFTMOST BYTE MUST BE NATIONAL */
/* CHARACTERS WHICH ARE A THROUGH Z, 0 THROUGH 9, #, @, AND $ */
/* 6. MUST BE UPPER CASE. */
/* */
/* VARIABLE DATA: */
/* */
/* 1. MUST BEGIN IN THE LEFTMOST BYTE OF XPUVDATA FIELD */
/* 2. IF LESS THAN 8 BYTES, MUST BE PADDED ON THE RIGHT WITH BLANKS */
/* 3. MAY NOT CONTAIN EMBEDDED BLANKS */
/* 4. NON-BLANK CHARACTERS MUST BE 'NATIONAL' CHARACTERS WHICH ARE */
/* A THROUGH Z, 0 THROUGH 9, #, @, $, -, AND . */
/* */
/*--------------------------------------------------------------------*/
#pragma runopts(PLIST(HOST))
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define XPUVENT 100
static int monthtab[] = {
0, /* january */
31, /* february */
59, /* march */
90, /* april */
120, /* may */
151, /* june */
181, /* july */
212, /* august */
243, /* september */
273, /* october */
304, /* november */
334 /* december */
} ;
static int leaptab[] = {
0, /* january */
31, /* february */
60, /* march */
91, /* april */
121, /* may */
152, /* june */
182, /* july */
213, /* august */
244, /* september */
274, /* october */
305, /* november */
335 /* december */
} ;
struct amudsnxp {
char xpjobn[8]; /* jobname */
char xpstep[8]; /* stepname */
char xpdbname[8]; /* database name */
char xpspname[8]; /* space name */
char xpresume[1]; /* resume (Y or N) */
char xpreplace[1]; /* replace (Y or N) */
char xpresrv1[2]; /* reserved for loadplus */
char xpuser[8]; /* user id */
char xpssid[4]; /* db2 subsystem id */
char xpdate[6]; /* utility execution date mmddyy */
char xptime[6]; /* utility execution time hhmmss */
char xputilid[16]; /* utility id */
char xpdate8[8]; /* utility execution date mmddyyyy */
char xpgrpnm[4]; /* data sharing group name */
char xpvcat[8]; /* vcat name (from 1st part if partitnd)*/
char xpdatej[7]; /* utility execution date ccyyddd */
char xpresrv2[13]; /* reserved for load plus */
int xpusrwd1; /* user word 1*/
int xpusrwd2; /* user word 2*/
int xpusrwd3; /* user word 3*/
int xpusrwd4; /* user word 4*/
int xpusrwd5; /* user word 5*/
int xpusrwd6; /* user word 6*/
int xpusrwd7; /* user word 7*/
int xpusrwd8; /* user word 8*/
struct XPUVAREA {
char xpuvname[9];
char xpuvdata[8];
} xpuvars[XPUVENT] ;
} ;
int main (int argc, char *argv[])
{
char yr[5];
char day[4];
char month[4];
char wuid[17];
int i;
int x;
int l;
int wday;
int wyear;
int iyear;
int imonth;
int totdays;
int xdisable;
int pfxlen;
int sfxstrt;
int sfxlen;
struct XPUVAREA *tp;
struct amudsnxp *xparm;
xparm = (void *)argv[1];
tp = xparm->xpuvars;
x = l = wday = wyear = iyear = imonth = totdays = 0;
xdisable = i = pfxlen = sfxstrt = sfxlen = 0;
/*--------------------------------------------------------------------*/
/* */
/* to disable this exit set xdisable = 1 */
/* */
/*--------------------------------------------------------------------*/
if (xdisable)
return(0);
/*--------------------------------------------------------------------*/
/* */
/* CREATE USER-DEFINED VARIABLES */
/* */
/* THE FOLLOWING USER VARIABLES WILL BE CREATED: */
/* */
/* _JDATE - JULIAN DATE IN THE FORM OF DYYDDD BUILT FROM THE */
/* LOADPLUS SUPPLIED VARIABLE &DATE8 */
/* */
/* _JCDATE - JULIAN DATE IN THE FORM OF DYYYYDDD BUILT FROM THE */
/* LOADPLUS SUPPLIED VARIABLE &DATE8 */
/* */
/* _UTILPFX - UP TO 8 BYTES OF THE FIRST NODE OF THE UTILITY ID */
/* */
/* _UTILSFX - UP TO 8 BYTES OF THE REMAINING PORTION OF THE */
/* UTILITY ID */
/* */
/*--------------------------------------------------------------------*/
/*--------------------------------------------------------------------*/
/* */
/* BUILD _JDATE AND _JCDATE USER VARIABLES */
/* */
/*--------------------------------------------------------------------*/
memcpy(month,xparm->xpdate8,2);
memcpy(day,xparm->xpdate8+2,2);
memcpy(yr,xparm->xpdate8+4,4);
sscanf(yr,'%d',&wyear);
sscanf(day,'%d',&wday);
sscanf(month,'%d',&imonth);
imonth = imonth - 1;
if (wyear % 4 == 0 && wyear % 100 != 0 || wyear % 400 == 0)
totdays = wday + leaptab[imonth];
else
totdays = wday + monthtab[imonth];
sprintf(yr,'%d',wyear);
sprintf(day,'%03.03d',totdays);
/*--------------------------------------------------------------------*/
/* clear the user variable area to blanks */
/*--------------------------------------------------------------------*/
memset(tp->xpuvname,' ', sizeof(struct XPUVAREA));
/*--------------------------------------------------------------------*/
/* clear the user variable area to blanks */
/*--------------------------------------------------------------------*/
memcpy(tp->xpuvname,'_JDATE', 6);
memcpy(tp->xpuvdata,'D',1);
memcpy(tp->xpuvdata+1,xparm->xpdate8+6,2);
memcpy(tp->xpuvdata+3,day,3);
/*--------------------------------------------------------------------*/
/* sprintf(tp->xpuvdata,'D%-2.2s%3.3s',xparm->xpdate8+6,day); */
/* do not use this format as the '/0' used by sprintf will cause */
/* BMC51239I USER VARIABLE '_JDATE' HAS INVALID DATA */
/*--------------------------------------------------------------------*/
tp++;
/*--------------------------------------------------------------------*/
/* clear the user variable area to blanks */
/*--------------------------------------------------------------------*/
memset(tp->xpuvname,' ', sizeof(struct XPUVAREA));
memcpy(tp->xpuvname,'_JCDATE', 7);
memcpy(tp->xpuvdata,'D',1);
memcpy(tp->xpuvdata+1,yr,4);
memcpy(tp->xpuvdata+5,day,3);
/*--------------------------------------------------------------------*/
/* sprintf(tp->xpuvdata,'D%-4.4s%-3.3s',yr,day); */
/* do not use this format as the '/0' used by sprintf will cause */
/* BMC51239I USER VARIABLE '_JCDATE' HAS INVALID DATA */
/*--------------------------------------------------------------------*/
/* */
/* build _utilpfx and _utilsfx user variables */
/* */
/*--------------------------------------------------------------------*/
tp++;
sprintf(wuid,'%16.16s',xparm->xputilid);
/*--------------------------------------------------------------------*/
/* get the length of xputilid */
/* find the first deliminator character */
/* limit _UTILPFX and UTILSFX to 8 characters -DSN node limit */
/*--------------------------------------------------------------------*/
for (i=0;wuid[i] != '/0'; i++)
{
switch (wuid[i])
{
case ' ':
case '.':
case '+':
case '|':
case ';':
case '-':
case '/':
case '':
case ',':
case '_':
case ':':
case '=':
case '//':
if (pfxlen == 0)
{
pfxlen = i;
sfxstrt = i + 1;
}
break;
default:
break;
}
}
if (pfxlen == 0) /* no delimiter found */
{
pfxlen = 8;
sfxstrt = 8;
}
sfxlen = i - sfxstrt;
if (pfxlen > 8)
pfxlen = 8;
if (sfxlen > 8)
sfxlen = 8;
/*--------------------------------------------------------------------*/
/* clear the user variable area to blanks */
/*--------------------------------------------------------------------*/
memset(tp->xpuvname,' ', sizeof(struct XPUVAREA));
memcpy(tp->xpuvname, '_UTILPFX', 8);
memcpy(tp->xpuvdata, xparm->xputilid, pfxlen);
/*--------------------------------------------------------------------*/
/* sprintf(tp->xpuvdata,'%-8.8s',xparm->xputilid); */
/* do not use this format as the '/0' used by sprintf will cause */
/* BMC51239I USER VARIABLE '_UTILPFX' HAS INVALID DATA */
/*--------------------------------------------------------------------*/
tp++;
/*--------------------------------------------------------------------*/
/* clear the user variable area to blanks */
/*--------------------------------------------------------------------*/
memset(tp->xpuvname,' ', sizeof(struct XPUVAREA));
memcpy(tp->xpuvname, '_UTILSFX', 8);
memcpy(tp->xpuvdata, xparm->xputilid+sfxstrt, sfxlen);
/*--------------------------------------------------------------------*/
/* sprintf(tp->xpuvdata,'%-8.8s',xparm->xputilid+8); */
/* do not use this format as the '/0' used by sprintf will cause */
/* BMC51239I USER VARIABLE '_UTILSPX' HAS INVALID DATA */
/*--------------------------------------------------------------------*/
return (0);
}
/* D I S C L A I M E R */
/*--------------------------------------------------------------------*/
/* */
/* THIS IS A SAMPLE LOADPLUS USER EXIT. THIS EXIT WOULD BE USED */
/* IN ORDER TO DEFINE USER VARIABLES FOR BUILDING DATASET NAMES FOR */
/* DYNAMIC WORKFILE ALLOCATION WITH THE DSNPAT KEYWORD AND FOR */
/* SHRLEVEL CHANGE WITH THE SPILLDSNPAT KEYWORD. */
/* */
/* THIS EXIT WILL ONLY BE INVOKED WHEN IT IS SPECIFICALLY NAMED */
/* IN THE AMU$OPTS DSNUEXIT PARAMETER OR IN THE DSNUEXIT PARAMETER OF */
/* THE LOAD COMMAND. THE SPECIFICATION IN THE LOAD COMMAND WILL */
/* OVERRIDE THE SPECIFICATION IN THE AMU$OPTS MACRO. IF THE NAME */
/* SPECIFIED IS 'NONE' WITHOUT THE SINGLE QUOTE MARKS, THE EXIT WILL */
/* NOT BE INVOKED. */
/* */
/* NOTE: PLEASE REVIEW THE DOCUMENTATION IN THE REFERENCE MANUAL, */
/* AND THE FOLLOWING USAGE NOTES PRIOR TO IMPLEMENTING THIS EXIT. */
/* */
/* PLEASE CALL BMC SOFTWARE PRODUCT SUPPORT WITH ANY QUESTIONS YOU */
/* MAY HAVE IN THIS AREA. */
/* */
/* PHONE: 1-800-537-1813 */
/* */
/*--------------------------------------------------------------------*/
/* N O T E S */
/*--------------------------------------------------------------------*/
/* */
/* AMUEDSL IS CALLED ONCE AT THE BEGINNING OF EITHER THE PRELOAD */
/* PHASE OR THE COMBINED PHASE. */
/* */
/* WHEN INVOKED IT IS PASSED THE ADDRESS OF A USER EXIT BLOCK */
/* DESCRIBED BY THE AMUDSNXP STRUCT. */
/* THIS CALL IS FROM ASEMBLER MODULE DYNWDSNX */
/* */
/* UPON EXIT RETRUN CODE FROM THIS EXIT */
/* */
/* 0 GOOD RETURN */
/* */
/* OTHER ERROR RETURN, TERMINATE UTILITY */
/* */
/* AMUDSNXP STRUCT THIS STRUCT CONTAINS BOTH INPUT */
/* AND OUTPUT FIELDS. INPUT FIELDS ARE PROVIDED TO */
/* PASS VITAL INFORMATION TO THIS EXIT. ANY MODIFI- */
/* CATIONS TO THESE FIELDS WILL BE DISREGARDED UPON */
/* RETURN TO THE CALLER. THE OUTPUT FIELDS ARE */
/* PROVIDED TO ALLOW THE EXIT TO PASS INFORMATION */
/* BACK TO THE CALLER. */
/* */
/*--------------------------------------------------------------------*/
/* */
/*--------------------------------------------------------------------*/
/* */
/* XPUVARS DEFINES THE OUTPUT AREA OF THE AMUDSNXP STRUCT AT TAG */
/* XPUVAREA. YOU MAY USE THIS STRUCT TO EASILY REFERENCE THE ARRAY */
/* DEFINED AT XPUVAREA. */
/* */
/* NOTE: */
/* */
/* THE NUMBER OF ENTRIES IN THE XPUVAREA ARRAY MUST NOT EXCEED 100 */
/* OR YOU WILL ADDRESS BEYOND THE END OF THE STRUCTURE STORAGE */
/* PROVIDED FOR THIS ROUTINE. */
/* */
/* VARIABLE NAME: */
/* */
/* 1. MUST BEGIN WITH AN UNDERSCORE CHARACTER C'_' X'6D' */
/* 2. MUST BEGIN IN THE LEFTMOST BYTE OF XPUVNAME FIELD */
/* 3. IF LESS THAN 9 BYTES, MUST BE PADDED ON THE RIGHT WITH BLANKS */
/* 4. MAY NOT CONTAIN EMBEDDED BLANKS */
/* 5. NON-BLANK CHARACTERS AFTER THE LEFTMOST BYTE MUST BE NATIONAL */
/* CHARACTERS WHICH ARE A THROUGH Z, 0 THROUGH 9, #, @, AND $ */
/* 6. MUST BE UPPER CASE. */
/* */
/* VARIABLE DATA: */
/* */
/* 1. MUST BEGIN IN THE LEFTMOST BYTE OF XPUVDATA FIELD */
/* 2. IF LESS THAN 8 BYTES, MUST BE PADDED ON THE RIGHT WITH BLANKS */
/* 3. MAY NOT CONTAIN EMBEDDED BLANKS */
/* 4. NON-BLANK CHARACTERS MUST BE 'NATIONAL' CHARACTERS WHICH ARE */
/* A THROUGH Z, 0 THROUGH 9, #, @, $, -, AND . */
/* */
/*--------------------------------------------------------------------*/
#pragma runopts(PLIST(HOST))
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define XPUVENT 100
static int monthtab[] = {
0, /* january */
31, /* february */
59, /* march */
90, /* april */
120, /* may */
151, /* june */
181, /* july */
212, /* august */
243, /* september */
273, /* october */
304, /* november */
334 /* december */
} ;
static int leaptab[] = {
0, /* january */
31, /* february */
60, /* march */
91, /* april */
121, /* may */
152, /* june */
182, /* july */
213, /* august */
244, /* september */
274, /* october */
305, /* november */
335 /* december */
} ;
struct amudsnxp {
char xpjobn[8]; /* jobname */
char xpstep[8]; /* stepname */
char xpdbname[8]; /* database name */
char xpspname[8]; /* space name */
char xpresume[1]; /* resume (Y or N) */
char xpreplace[1]; /* replace (Y or N) */
char xpresrv1[2]; /* reserved for loadplus */
char xpuser[8]; /* user id */
char xpssid[4]; /* db2 subsystem id */
char xpdate[6]; /* utility execution date mmddyy */
char xptime[6]; /* utility execution time hhmmss */
char xputilid[16]; /* utility id */
char xpdate8[8]; /* utility execution date mmddyyyy */
char xpgrpnm[4]; /* data sharing group name */
char xpvcat[8]; /* vcat name (from 1st part if partitnd)*/
char xpdatej[7]; /* utility execution date ccyyddd */
char xpresrv2[13]; /* reserved for load plus */
int xpusrwd1; /* user word 1*/
int xpusrwd2; /* user word 2*/
int xpusrwd3; /* user word 3*/
int xpusrwd4; /* user word 4*/
int xpusrwd5; /* user word 5*/
int xpusrwd6; /* user word 6*/
int xpusrwd7; /* user word 7*/
int xpusrwd8; /* user word 8*/
struct XPUVAREA {
char xpuvname[9];
char xpuvdata[8];
} xpuvars[XPUVENT] ;
} ;
int main (int argc, char *argv[])
{
char yr[5];
char day[4];
char month[4];
char wuid[17];
int i;
int x;
int l;
int wday;
int wyear;
int iyear;
int imonth;
int totdays;
int xdisable;
int pfxlen;
int sfxstrt;
int sfxlen;
struct XPUVAREA *tp;
struct amudsnxp *xparm;
xparm = (void *)argv[1];
tp = xparm->xpuvars;
x = l = wday = wyear = iyear = imonth = totdays = 0;
xdisable = i = pfxlen = sfxstrt = sfxlen = 0;
/*--------------------------------------------------------------------*/
/* */
/* to disable this exit set xdisable = 1 */
/* */
/*--------------------------------------------------------------------*/
if (xdisable)
return(0);
/*--------------------------------------------------------------------*/
/* */
/* CREATE USER-DEFINED VARIABLES */
/* */
/* THE FOLLOWING USER VARIABLES WILL BE CREATED: */
/* */
/* _JDATE - JULIAN DATE IN THE FORM OF DYYDDD BUILT FROM THE */
/* LOADPLUS SUPPLIED VARIABLE &DATE8 */
/* */
/* _JCDATE - JULIAN DATE IN THE FORM OF DYYYYDDD BUILT FROM THE */
/* LOADPLUS SUPPLIED VARIABLE &DATE8 */
/* */
/* _UTILPFX - UP TO 8 BYTES OF THE FIRST NODE OF THE UTILITY ID */
/* */
/* _UTILSFX - UP TO 8 BYTES OF THE REMAINING PORTION OF THE */
/* UTILITY ID */
/* */
/*--------------------------------------------------------------------*/
/*--------------------------------------------------------------------*/
/* */
/* BUILD _JDATE AND _JCDATE USER VARIABLES */
/* */
/*--------------------------------------------------------------------*/
memcpy(month,xparm->xpdate8,2);
memcpy(day,xparm->xpdate8+2,2);
memcpy(yr,xparm->xpdate8+4,4);
sscanf(yr,'%d',&wyear);
sscanf(day,'%d',&wday);
sscanf(month,'%d',&imonth);
imonth = imonth - 1;
if (wyear % 4 == 0 && wyear % 100 != 0 || wyear % 400 == 0)
totdays = wday + leaptab[imonth];
else
totdays = wday + monthtab[imonth];
sprintf(yr,'%d',wyear);
sprintf(day,'%03.03d',totdays);
/*--------------------------------------------------------------------*/
/* clear the user variable area to blanks */
/*--------------------------------------------------------------------*/
memset(tp->xpuvname,' ', sizeof(struct XPUVAREA));
/*--------------------------------------------------------------------*/
/* clear the user variable area to blanks */
/*--------------------------------------------------------------------*/
memcpy(tp->xpuvname,'_JDATE', 6);
memcpy(tp->xpuvdata,'D',1);
memcpy(tp->xpuvdata+1,xparm->xpdate8+6,2);
memcpy(tp->xpuvdata+3,day,3);
/*--------------------------------------------------------------------*/
/* sprintf(tp->xpuvdata,'D%-2.2s%3.3s',xparm->xpdate8+6,day); */
/* do not use this format as the '/0' used by sprintf will cause */
/* BMC51239I USER VARIABLE '_JDATE' HAS INVALID DATA */
/*--------------------------------------------------------------------*/
tp++;
/*--------------------------------------------------------------------*/
/* clear the user variable area to blanks */
/*--------------------------------------------------------------------*/
memset(tp->xpuvname,' ', sizeof(struct XPUVAREA));
memcpy(tp->xpuvname,'_JCDATE', 7);
memcpy(tp->xpuvdata,'D',1);
memcpy(tp->xpuvdata+1,yr,4);
memcpy(tp->xpuvdata+5,day,3);
/*--------------------------------------------------------------------*/
/* sprintf(tp->xpuvdata,'D%-4.4s%-3.3s',yr,day); */
/* do not use this format as the '/0' used by sprintf will cause */
/* BMC51239I USER VARIABLE '_JCDATE' HAS INVALID DATA */
/*--------------------------------------------------------------------*/
/* */
/* build _utilpfx and _utilsfx user variables */
/* */
/*--------------------------------------------------------------------*/
tp++;
sprintf(wuid,'%16.16s',xparm->xputilid);
/*--------------------------------------------------------------------*/
/* get the length of xputilid */
/* find the first deliminator character */
/* limit _UTILPFX and UTILSFX to 8 characters -DSN node limit */
/*--------------------------------------------------------------------*/
for (i=0;wuid[i] != '/0'; i++)
{
switch (wuid[i])
{
case ' ':
case '.':
case '+':
case '|':
case ';':
case '-':
case '/':
case '':
case ',':
case '_':
case ':':
case '=':
case '//':
if (pfxlen == 0)
{
pfxlen = i;
sfxstrt = i + 1;
}
break;
default:
break;
}
}
if (pfxlen == 0) /* no delimiter found */
{
pfxlen = 8;
sfxstrt = 8;
}
sfxlen = i - sfxstrt;
if (pfxlen > 8)
pfxlen = 8;
if (sfxlen > 8)
sfxlen = 8;
/*--------------------------------------------------------------------*/
/* clear the user variable area to blanks */
/*--------------------------------------------------------------------*/
memset(tp->xpuvname,' ', sizeof(struct XPUVAREA));
memcpy(tp->xpuvname, '_UTILPFX', 8);
memcpy(tp->xpuvdata, xparm->xputilid, pfxlen);
/*--------------------------------------------------------------------*/
/* sprintf(tp->xpuvdata,'%-8.8s',xparm->xputilid); */
/* do not use this format as the '/0' used by sprintf will cause */
/* BMC51239I USER VARIABLE '_UTILPFX' HAS INVALID DATA */
/*--------------------------------------------------------------------*/
tp++;
/*--------------------------------------------------------------------*/
/* clear the user variable area to blanks */
/*--------------------------------------------------------------------*/
memset(tp->xpuvname,' ', sizeof(struct XPUVAREA));
memcpy(tp->xpuvname, '_UTILSFX', 8);
memcpy(tp->xpuvdata, xparm->xputilid+sfxstrt, sfxlen);
/*--------------------------------------------------------------------*/
/* sprintf(tp->xpuvdata,'%-8.8s',xparm->xputilid+8); */
/* do not use this format as the '/0' used by sprintf will cause */
/* BMC51239I USER VARIABLE '_UTILSPX' HAS INVALID DATA */
/*--------------------------------------------------------------------*/
return (0);
}
Related topic
Tip: For faster searching, add an asterisk to the end of your partial query. Example: cert*