#BEGINBUCKET DSNALLOC
#/   {LANG}  lower case 2 byte language code from artifact instance XML.
#/   {LANG2BCODE}  upper case 2 byte language code from artifact instance XML.
#/   [MVS2BDSCODE] upper case 2 byte language code, key entry for dataset attributes in MVSDSDataTable.xml
#/   [DSLANGCODE]  upper case 2 byte language code variable which must be set within instance code to resolve
#/ NOTE: There is hard code for the space allocation for .LIBRARY for a hotfix.  The
#/     space resolves to 109 cyl which will account for if a customer decides to take ALL
#/     hotfixes at once.  This was based upon v9.3m2 hotfixes in TS.
#/  SPACE=(6000,(13000,13000,50),,,ROUND)    #/ less LIBRARY space for a hotfix needed
#/
#/ ------------------------------------------------------------------
#BEGINDEFS
#/ ------------------------------------------------------------------
#/EXCEPTIONFORMISSINGSYMBOL
#SYMBOLCALLS ENTRY;SYSOUT;CUSTPRODQUAL;TMPUNI;WORKSPC
#/ ------------------------------------------------------------------
#BEGINSTATICINSTANCES
#/ ------------------------------------------------------------------
#/ These are required because they are populated with content from the
#/ CNTL dataset produced by running SASEDTX and JavaEditX against the
#/ PREEDIT datasets. All other datasets are allocated only if there is
#/ product content being installed that requires them.
#/ ------------------------------------------------------------------
#STATICINSTANCE MVS2BDSCODE=BZ;LANG2BDSCODE=EN;ENCODE=NE;COPY2BDSCODE=;
#STATICINSTANCE MVS2BDSCODE=D4;LANG2BDSCODE=EN;ENCODE=NE;COPY2BDSCODE=;
#STATICINSTANCE MVS2BDSCODE=RC;LANG2BDSCODE=EN;ENCODE=NE;COPY2BDSCODE=;
#STATICINSTANCE MVS2BDSCODE=RX;LANG2BDSCODE=EN;ENCODE=NE;COPY2BDSCODE=;
#STATICINSTANCE MVS2BDSCODE=TE;LANG2BDSCODE=EN;ENCODE=NE;COPY2BDSCODE=;
#STATICINSTANCE MVS2BDSCODE=XC;LANG2BDSCODE=EN;ENCODE=NE;COPY2BDSCODE=;
#STATICINSTANCE MVS2BDSCODE=XF;LANG2BDSCODE=EN;ENCODE=NE;COPY2BDSCODE=;
#STATICINSTANCE MVS2BDSCODE=XP;LANG2BDSCODE=EN;ENCODE=NE;COPY2BDSCODE=;
#/ This piece is for when maintenance comes thru and needed for the clists to work in staged area
#/ This makes the assumption that LD/LB and ZE/ZB will always have updated content in maintenance
#IFEQ [HOTFIX] TRUE #THEN ALCMORE
#IFNOTEQ [UPDATEMODE] TRUE #THEN SKIPALC
#ALCMORE
#SET [DSLANGCODE] EN
#/ S1376518: A hotfix with only SASHELP content was failing to install
#/ because the staged LD was not being allocated in that case.
#IFEQ [HOST] z64 #THEN USEZE
#IFNOTEQ [HOTFIX] TRUE #THEN SKIPLD
#STATICINSTANCE MVS2BDSCODE=LD;LANG2BDSCODE=EN;ENCODE=NE;COPY2BDSCODE=; 
#SKIPLD
#STATICINSTANCE MVS2BDSCODE=LE;LANG2BDSCODE=EN;ENCODE=NE;COPY2BDSCODE=;
#THEN SKIPZE
#USEZE
#STATICINSTANCE MVS2BDSCODE=ZE;LANG2BDSCODE=EN;ENCODE=NE;COPY2BDSCODE=;
#SKIPZE
#STATICINSTANCE MVS2BDSCODE=AU;LANG2BDSCODE=EN;ENCODE=[ORDERENCODING];
#STATICINSTANCE MVS2BDSCODE=SP;LANG2BDSCODE=EN;ENCODE=[ORDERENCODING];
#STATICINSTANCE MVS2BDSCODE=XF;LANG2BDSCODE=EN;ENCODE=NE;COPY2BDSCODE=;
#STATICINSTANCE MVS2BDSCODE=TE;LANG2BDSCODE=EN;ENCODE=NE;COPY2BDSCODE=;
#IFEQ [HOST] z64 #THEN SKIPSM
#STATICINSTANCE MVS2BDSCODE=SM;LANG2BDSCODE=EN;ENCODE=NE;COPY2BDSCODE=;
#SKIPSM
#/ S1376518: A hotfix with only SASHELP content was failing to install
#/ because the wrong space allocation was used. These instances are not
#/ needed for a hotfix installation; they actually break the install.
#IFEQ [HOTFIX] TRUE #THEN SKIPALC
#/ If there are translations with the encoding allocate sasmsg and sashelp
#/ DE  W2, W3
#IFEQ [ORDERENCODING] W2 #THEN GOTENCODE
#IFNOTEQ [ORDERENCODING] W3 #THEN NEXTENCODE
#GOTENCODE
#SET [DSLANGCODE] DE
#STATICINSTANCE MVS2BDSCODE=TH;LANG2BDSCODE=DE;ENCODE=[ORDERENCODING];
#STATICINSTANCE MVS2BDSCODE=TM;LANG2BDSCODE=DE;ENCODE=[ORDERENCODING];
#NEXTENCODE
#/ ES  W0,W2, W8
#IFEQ [ORDERENCODING] W0 #THEN GOTENCODE
#IFEQ [ORDERENCODING] W2 #THEN GOTENCODE
#IFNOTEQ [ORDERENCODING] W8 #THEN NEXTENCODE
#GOTENCODE
#SET [DSLANGCODE] ES
#STATICINSTANCE MVS2BDSCODE=TH;LANG2BDSCODE=ES;ENCODE=[ORDERENCODING];
#STATICINSTANCE MVS2BDSCODE=TM;LANG2BDSCODE=ES;ENCODE=[ORDERENCODING];
#NEXTENCODE
#/ FR  W0,WA, WB
#IFEQ [ORDERENCODING] W0 #THEN GOTENCODE
#IFEQ [ORDERENCODING] WA #THEN GOTENCODE
#IFNOTEQ [ORDERENCODING] WB #THEN EXITENCODE
#GOTENCODE
#SET [DSLANGCODE] FR
#STATICINSTANCE MVS2BDSCODE=TH;LANG2BDSCODE=FR;ENCODE=[ORDERENCODING];
#STATICINSTANCE MVS2BDSCODE=TM;LANG2BDSCODE=FR;ENCODE=[ORDERENCODING];
#EXITENCODE
#SKIPALC
#IFEQ [HOTFIX] TRUE #THEN SKIPXZ
#STATICINSTANCE MVS2BDSCODE=XZ;LANG2BDSCODE=EN;ENCODE=NE;COPY2BDSCODE=;
#SKIPXZ
#/ ------------------------------------------------------------------
#/ We're always going to allocate XX (CNTL.PREEDIT) and we'll copy up the production one.
#/ This would have nasty promotion implications, except that we only use this dataset at
#/ install time, so we don't care. Same applies to XT (TKMVSENV.PRE).
#/ ------------------------------------------------------------------
#STATICINSTANCE MVS2BDSCODE=XX;LANG2BDSCODE=EN;ENCODE=NE;COPY2BDSCODE=;
#STATICINSTANCE MVS2BDSCODE=XT;LANG2BDSCODE=EN;ENCODE=NE;COPY2BDSCODE=;
#/ ------------------------------------------------------------------
#/ For anything other than a hotfix install, we always need SASHELP
#/ allocated because for any add-on install there will be a new
#/ setinit to apply. If a hotfix includes SASHELP content, the
#/ instance qualifiers will handle that.
#/ ------------------------------------------------------------------
#IFEQ [HOTFIX] TRUE #THEN NEXT
#STATICINSTANCE MVS2BDSCODE=SH;LANG2BDSCODE=EN;ENCODE=[ORDERENCODING];
#INSTANCEUNIQUEKEY [SH:LOQUAL]
#NEXT
#/ -------------------------------------------------
#BEGININSTANCEQUALIFIERS
#/ -------------------------------------------------
#/  Allocated datasets may be referenced *EITHER* as the target of a primary unload, *OR* as the target of
#/  secondary processing following the primary unload. The former is found once in <ENTRY><MVS2BDSCODE>,
#/  the latter none to many times within <ENTRY><MEMBER><COPY2BDSCODE>
#IFNOTEQ {PRODUCT} itmsmvadata #THEN NOTITRM
#STATICINSTANCE MVS2BDSCODE=FG;LANG2BDSCODE=EN;ENCODE=NE;COPY2BDSCODE=;
#STATICINSTANCE MVS2BDSCODE=MG;LANG2BDSCODE=EN;ENCODE=NE;COPY2BDSCODE=;
#NOTITRM
#IFNOTEQ {PRODUCT} raptor #THEN NOTRAPTOR
#IFNOTEQ {MVS2BDSCODE} XX #THEN NEXT
#INSTANCEUNIQUEKEY OCENNE #NOTUNIQUE NEXT
#STATICINSTANCE MVS2BDSCODE=OC;LANG2BDSCODE=EN;ENCODE=NE;COPY2BDSCODE=;
#NEXT
#INSTANCEUNIQUEKEY OHENNE #NOTUNIQUE #NOTRAPTOR
#STATICINSTANCE MVS2BDSCODE=OH;LANG2BDSCODE=EN;ENCODE=NE;COPY2BDSCODE=;
#NOTRAPTOR
#IFEQ {ENCODE} [ORDERENCODING] #THEN PASSESENCODE
#IF [INSTALLENCODEDONLY] #THEN DOESNOTQUALIFY
#IFNOTEQ {ENCODE} NE #THEN DOESNOTQUALIFY
#PASSESENCODE
#TABLEFIX {MVS2BDSCODE}
#IFEQ [NOAL] DoNotAllocate #THEN NEXT
#SET [TARGET2BDSCODE] {MVS2BDSCODE}
#INSTANCEUNIQUEKEY [TARGET2BDSCODE]{LANG2BCODE}{ENCODE} #NOTUNIQUE NEXT
#CREATEINSTANCEFROMENTRY
#NEXT
#FORALL <MEMBER>
#IFNOT {COPY2BDSCODE} #THEN NEXT
#TABLEFIX {COPY2BDSCODE}
#SET [TARGET2BDSCODE] {COPY2BDSCODE}
#IFEQ [NOAL] DoNotAllocate #THEN NEXT
#INSTANCEUNIQUEKEY [TARGET2BDSCODE]{LANG2BCODE}{ENCODE} #NOTUNIQUE NEXT
#CREATEINSTANCEFROMENTRY
#NEXT
#ENDFORALL
#DOESNOTQUALIFY
#ENDINSTANCEQUALIFIERS
#/ -------------------------------------------------------------------
#BEGINPREFIX
#/ -------------------------------------------------------------------
#/        Prefix invokes SAS from targeted SAS installation
#SET [DSLANGCODE] EN         #/ Set language symbol to EN for firing up SAS
[JOBCARD1]
[JOBCARD2]
[JOBCARD3]
[JOBCARD4]
[JOBCARD5]
//STGALLOC EXEC PGM=[ENTRY],
//  PARM=('SETINIT MSGCASE CAPSOUT ERRORABEND NOWORKTERM',
//        'MACRO ERRORCHECK=STRICT SASUSER=WORK')
#IFEQ [HOST] z64 #THEN USEZE
#TABLEFIX LD  #/ Load Library
#THEN STEPLIB
#USEZE
#TABLEFIX ZE  #/ 64-bit load library
#STEPLIB
//STEPLIB  DD DISP=SHR,
//  DSN=[CUSTPRODQUAL].[LOQUAL]
#TABLEFIX SH  #/ Sashelp
//[DFLTDDN]  DD DISP=SHR,
//  DSN=[CUSTPRODQUAL].[LOQUAL]
#TABLEFIX AU  #/ Autocalls
//[DFLTDDN] DD DISP=SHR,
//  DSN=[CUSTPRODQUAL].[LOQUAL]
#IFEQ [HOST] z64 #THEN SKIPSM
#TABLEFIX SM  #/ SAS messages
//[DFLTDDN] DD DISP=SHR,
//  DSN=[CUSTPRODQUAL].[LOQUAL]
#SKIPSM
//TKMVSENV DD DATA,DLM='!1'
#SNIPPETINSERT SASDefaultTkmvsenv.txt
!1
//WORK     DD UNIT=[TMPUNI],SPACE=(6144,([WORKSPC])),
//         DCB=(RECFM=FS,LRECL=6144,BLKSIZE=6144)
//SASLOG   DD SYSOUT=[SYSOUT]
//SASCLOG  DD SYSOUT=[SYSOUT]
//CONFIG   DD DATA,DLM='!1'
#SNIPPETINSERT SASDefaultConfig.txt
!1
//SASLIST  DD SYSOUT=[SYSOUT]
//SASPARM  DD UNIT=[TMPUNI],SPACE=(400,(100,300)),
//         DCB=(RECFM=FB,LRECL=80,BLKSIZE=400,BUFNO=1)
//SYSIN  DD DATA,DLM='!1'  #/ Begin source code stream for SAS session. Delimiter is !^ in column 1 of line
options filestat symbolgen mprint mlogic;
%macro dsnq;               #/ Invoke SAS macro compiler.

#/ --------------------------------------------------------------------
#BEGININSTANCE               #/ All instance code must resolve to valid SAS source code.
#/ -------------------------------------------------------------------
#IFEQ [UPDATEMODE] TRUE #THEN SKIPDSLANG   #/ dslangcode set in updatemode section
#SET [DSLANGCODE] EN         #/ Set language symbol to EN for empty/blank language argument.
#SKIPDSLANG
#IFNOT {LANG2BCODE} #THEN NEXT     #/ Is language symbol non-blank?
#SET [DSLANGCODE] {LANG2BCODE}     #/ If so set general use language symbol to instance argument value.
#NEXT
#SET [MVSDSCODE] {MVS2BDSCODE}
#TABLEFIX [MVSDSCODE] #/ Fix ds table row to OTP2 from the instance.
#IFNOT [ALIASTO] #THEN NOALIAS #/ See if it's marked alias in ds table, if not then skip
#SET [MVSDSCODE] [ALIASTO]     #/ Hold the aliased ds from the table row
#TABLEFIX [MVSDSCODE]  #/ Reset the table row to the aliased OTP2.
#NOALIAS
#SNIPPETINSERT AllocateDataset.txt
#/ ----------------------------------------------------------------------
#BEGINSUFFIX
#/ -------------------------------------------------------------------
%mend dsnq; %dsnq             #/ close SAS macro, invoke SAS macro once.
!1                           #/ Delimiter for SAS session SYSIN definition.
#/ ----------------------------------------------------------------------
#ENDBUCKET DSNALLOCSTG
