If it helps, this thing updates a PDS directory using STOW. It will need
some tweaking to update the USERDATA (check the PDS directory map).
Cheers, CP
MEMBER NAME ALIAS
*
* THIS PROGRAM ALIASES ENTRIES IN A PARTITIONED DATASET.
* MEMBERS MAY HAVE FIXED OR VARIABLE LOGICAL RECORD LENGTH (FB OR VB).
* MEMBER NAME AND ALIAS MUST BE SUPPLIED VIA SYSIN CARD.
*
*
* FORMAT OF SYSIN CARD IS
* 'MEMBER=@@...@,ALIAS=@@...@ '
* WHERE '@@...@' REPRESENTS A 1 TO 8 CHAR VALID MEMBER/ALIAS NAME
* AND WHERE ANYTHING (INCLUDING COMMENTS) (EXCEPT MEMBER= // /*) MAY
* PRECEDE THE 'MEMBER=' START OF CARD DATA
* AND WHERE THE END OF CARD DATA (AFTER ALIAS NAME) MUST BE A BLANK.
* NOTE THAT THE COMMA, AFTER THE MEMBER NAME, IS MANDATORY,
* EACH SEPARATE ALIAS REQUEST MUST BE ON A SEPARATE CARD
* AND THE CARDS ARE FIXED RECL=80 WITH DATA IN COLS 1 TO 72 INCLUSIVE,
* DECLARED VIA DDNAME SYSIN.
*
* MEMBER NAMES MUST BE IN ASCENDING ALPHABETICAL ORDER.
*
* INVALID SYSIN CARDS ARE IGNORED.
*
* ALIASES SUCCESSFULLY ADDED ARE LISTED UNDER DDNAME=REPORTS OUTPUT.
*
* CREATED: CHRIS PONCELET 12/10/88
*
***********************************************************************
*
PRINT NOGEN
ALIASPDS CSECT START CONTROL SECTION
*
* PASSING THE 'NEXT' LABEL AS A PARAMETER TO THE 'READREC' MACRO
*
R0 EQU 0 REDEFINE REGISTERS
R1 EQU 1
R2 EQU 2
R3 EQU 3
R4 EQU 4
R5 EQU 5
R6 EQU 6
R7 EQU 7
R8 EQU 8
R9 EQU 9
R10 EQU 10
R11 EQU 11
R12 EQU 12
R13 EQU 13
R14 EQU 14
R15 EQU 15
*
***********************************************************************
********************** MACROS *****************************************
*
MACRO
&L READREC &FILE
&L GET &FILE READREC MACRO
MVC INPUT(80),0(R1) MOVE FROM BUFFER TO INPUT AREA
MEND
*
MACRO
&L WRITEREC
&L PUT REPORTS,OUTPUT WRITEREC MACRO
MEND
*
*********************** END OF MACROS *********************************
***********************************************************************
*
**********************************************************************
******* INITIAL PROCESSING *******************************************
**********************************************************************
*
* NOTE: SAVE ALL REGISTERS ON ENTRY, AT 18 FULLWORDS STARTING AT
* ADDRESS GIVEN IN R13 - USING STORE MULTIPLE.
* THEN USE R14 (SAVED, THAT IS) TO RETURN CONTROL AFTER EXECUTION
* OF THIS PROGRAM (AFTER RELOADING USING LOAD MULTIPLE.)
*
BEGIN STM R14,R12,12(R13) SAVE REGISTERS 14->12 TO OFFSET 12
BALR R11,R0 LOAD CURRENT LOCATION INTO R11
USING *,R11,R3 DEFINE R11 + R3 AS BASE REGISTERS
NAMEOFT EQU NAME-*
TTROFT EQU TTR-*
ALIASOFT EQU ALIAS-*
KOFT EQU K-*
COFT EQU C-*
INPUTOFT EQU INPUT-*
LA R3,*-4+4096
ST R13,SAVER13 FREE REGISTER 13 BY SAVING
LA R13,SAVEBLK LOAD MY SAVEAREA'S ADDRESS INTO R13
*
***********************************************************************
******** START OF PROGRAM CODE PROPER *********************************
***********************************************************************
*
OPEN (SYSIN,(INPUT))
L R4,=F'64' FOR COUNTING ¬> 64 CARDS
LR R9,R11 FOR INDEXING MEMBER NAMES + BASE
LA R9,0(,R9) CLEAR TOP 8 BITS
S R9,=F'14'
LR R10,R11 FOR INDEXING ALIAS NAMES + BASE
LA R10,0(,R10) CLEAR TOP 8 BITS
S R10,=F'8'
*
* DO UNTIL THERE ARE NO MORE SYSIN RECORDS
*
NEXT READREC SYSIN
LR R5,R11 USE R5 AS PSEUDO BASE REG
LA R5,0(,R5) CLEAR TOP 8 BITS
SR R6,R6 USE R6 AS INDEX INCREMENT
LA R6,1(,R6)
LR R7,R11 USE R7 AS INDEX UPPER LIMIT
*
* 'MEMBER=' = 7
* ',' = 1
* 'ALIAS=' = 6
* <MEMBERNAME> = 1 MIN
* <ALIASNAME> = 1 MIN
* OFFSET = POSITION - 1
* 72-7-1-6-1-1-1=55
*
LA R7,55(,R7) SYSIN CARD UP TO COL 72 MAX.
*
* FIND 'MEMBER=' STRING IN CURRENT SYSIN CARD.
*
FINDM CLI INPUTOFT(R5),C'M' LOOK FOR CHAR 'M' AT CURRENT POS.
BE CHK1A
BXLE R5,R6,FINDM IF NOT FOUND TRY NEXT POSITION UP
B NOTFND
CHK1A CLC INPUTOFT(7,R5),=C'MEMBER=' IS IT 'MEMBER='?
BE OK1
BXLE R5,R6,FINDM NO: START AGAIN FROM NEXT POS. UP
B NOTFND
OK1 LA R5,7(,R5) YES: SHIFT UP TO READ NAME
ST R5,STRTMEM SAVE START POSITION OF NAME
LR R8,R5 AND IN REG8 FOR EX R12,MOVEMEM
FINDC CLI INPUTOFT(R5),C',' LOOK FOR COMMA
BE CHK1B
BXLE R5,R6,FINDC NOT FOUND? SHIFT UP & TRY AGAIN
B NOTFND
CHK1B ST R5,ENDMEM FOUND: NOW CHECK MEMBER NAME
LR R12,R5
S R12,STRTMEM ENDMEM - STRTMEM = MEMNAME LENGTH
BE NOTFND 0 LENGTH NOT ALLOWED
C R12,=F'9'
BNL NOTFND LENGTH > 8 NOT ALLOWED
STH R12,LENMEM MEMNAME LENGTH IS OK: SAVE IT
MVC MEMNAME(8),BLANKS
BCTR R12,0
EX R12,MOVEMEM STORE MEMBER NAME FROM SYSIN CARD
LA R5,1(,R5) POINT TO CHAR AFTER COMMA
FINDA CLC INPUTOFT(6,R5),=C'ALIAS=' IS THIS 'ALIAS='?
BE OK2
B NOTFND
OK2 LA R5,6(,R5) YES: POINT TO ALIAS NAME
ST R5,STRTALS SAVE START OF ALIAS NAME OFFSET
LR R8,R5 AND IN REG8 FOR EX R12,MOVEALS
FINDB CLI INPUTOFT(R5),C' ' LOOK FOR BLANK CHAR AFTER ALIAS=
BE CHK2
BXLE R5,R6,FINDB NOT FOUND? SHIFT UP & TRY AGAIN
B NOTFND
CHK2 ST R5,ENDALS FOUND: NOW CHECK ALIASNAME LENGTH
LR R12,R5
S R12,STRTALS ENDALS - STRTALS = ALSNAME LENGTH
BE NOTFND 0 LENGTH NOT ALLOWED
C R12,=F'9'
BNL NOTFND LENGTH > 8 NOT ALLOWED
STH R12,LENALS OK: SAVE ALIAS NAME LENGTH
MVC ALSNAME(8),BLANKS
BCTR R12,0
EX R12,MOVEALS STORE ALIAS NAME FROM SYSIN CARD
*
LA R9,14(,R9) UPDATE OFFSET
MVC NAMEOFT(8,R9),MEMNAME
LA R10,8(,R10) UPDATE OFFSET
MVC ALIASOFT(8,R10),ALSNAME
DONEXT BCT R4,NEXT ALL OK: READ NEXT CARD
NOTFND B NEXT ¬OK: SCRAP THIS CARD: READ NEXT CARD
*
EOJ1 CLOSE (SYSIN,)
*
* UPDATE COUNT OF MEMBERS TO BE FETCHED, FOR BLDL MACRO
*
S R4,=F'64' HOW MANY VALID SYSN CARDS WERE READ?
LPR R4,R4
BE FINISH
STH R4,FF -> NO OF MEMBER ENTRIES FOR BLDL
*
* PREPARE TO READ PDS DIRECTORY
*
OPEN (PDS,(INPUT))
*
START NOP *
BLDL PDS,LISTMEM
CLOSE (PDS,)
*
* BLDL SHOULD NOW HAVE PULLED OUT THE TTR & OTHER INFO FOR EACH MEMBER.
* NOW ADD THE ALIASES.
*
* PREPARE TO ADD ALIASES TO PDS (PDSUPDAT) DIRECTORY
*
OPEN (PDSUPDAT,(OUTPUT),REPORTS,(OUTPUT))
SR R5,R5 USE R5 AS COUNTER
LA R5,1(,R5)
SR R6,R6 USE R6 AS INCREMENT TO R7
LA R6,1(,R6)
LR R7,R4 USE R7 AS BXLE UPPER LIMIT
LR R9,R11 FOR INDEXING MEMBER NAMES + BASE
LA R9,0(,R9) CLEAR TOP 8 BITS
S R9,=F'14'
LR R10,R11 FOR INDEXING ALIAS NAMES + BASE
LA R10,0(,R10) CLEAR TOP 8 BITS
S R10,=F'8'
*
* ADD ALIAS ENTRIES FROM ACCEPTED SYSIN CARDS
*
ADDALIAS NOP * DO UNTIL ALL ALIASES HAVE BEEN ADDED
LA R9,14(,R9) UPDATE INDEX
LA R10,8(,R10) UPDATE INDEX
CLI TTROFT+2(R9),X'00' WAS THE MEMBER FOUND?
BE SKIP NO: SKIP TO PROCESS NEXT ALIAS
MVC MEMNAMOK(8),NAMEOFT(R9) YES: SET UP REPORT LINE
MVC ALSNAMOK(8),ALIASOFT(R10)
MVC NAMEOFT(8,R9),ALIASOFT(R10) SET UP FIELDS FOR STOW MACRO
OI COFT(R9),B'10000000' FLAG AS ALIAS
NI COFT(R9),B'11100000' NO USERDATA BECAUSE ONLY 12 BYTES
MVC KOFT(1,R9),COFT(R9) UPDATE STOW 'C' FIELD
STOW PDSUPDAT,NAMEOFT(,R9),A
LTR R15,R15 ALIAS ADDED OK?
BNE SKIP NO: SKIP TO PROCESS NEXT ALIAS
WRITEREC YES: OUTPUT LINE OF REPORT
SKIP BXLE R5,R6,ADDALIAS PROCESS NEXT ALIAS
*
EOJ CLOSE (PDSUPDAT,,REPORTS)
*
FINISH L R13,SAVER13 RESTORE R13 FROM SAVE ADDRESS AREA
LM R14,R12,12(R13) RESTORE REGISTERS
SR R15,R15 CLEAR RETURN CODE
BR R14 RETURN CONTROL TO OPERATING SYSTEM
*
**********************************************************************
******** END OF PROGRAM CODE PROPER **********************************
**********************************************************************
*
**********************************************************************
******** FILES *******************************************************
**********************************************************************
*
* DEFINE PDS (BPAM)
* N.B. SEE 'DATA ADMINISTRATION : MACRO REF' FOR DETAILS
*
SYSIN DCB BLKSIZE=80, *
DDNAME=SYSIN, *
DSORG=PS, *
EODAD=EOJ1, ADDRESS FOR BRANCHING, AT EOF *
RECFM=FB, *
MACRF=(GL) USING 'GET' AND 'LOCATE' MODE
*
REPORTS DCB BLKSIZE=132, *
DDNAME=REPORTS, *
DSORG=PS, *
MACRF=(PM) USING 'PUT' AND 'MOVE TRANSMITTAL'
*
PDS DCB BLKSIZE=256, *
DDNAME=PDS, *
DSORG=PO, *
EODAD=EOJ, ADDRESS FOR BRANCHING, AT EOF *
RECFM=VB, DIRECTORY ENTRIES ARE VARIABLE *
MACRF=(R) READ
*
PDSUPDAT DCB DDNAME=PDS, *
DSORG=PO, *
EODAD=EOJ, ADDRESS FOR BRANCHING, AT EOF *
MACRF=(R,W) READ + WRITE
*
**********************************************************************
******** DEFINE STORAGE **********************************************
**********************************************************************
*
* INPUT RECORDS
*
INPUT DS CL80
*
LISTMEM DS 0D
FF DC H'64' UP TO 64 SYSIN CARDS MAX
LL DC H'14' 14 BYTES PER FOLLOWING ENTRY
NAME DS CL8
TTR DS CL3
K DS CL1
Z DS CL1
C DS CL1
DS CL882
ALIAS DS CL8
DS CL504
OUTPUT DS 0C
DC CL5' '
ALSMSG DC C'ALIAS='
ALSNAMOK DS CL8
DC C' : '
REPMSG DC C'SUCCESSFULLY PROCESSED FOR MEMBER = '
MEMNAMOK DS CL8
DC CL(132+OUTPUT-*)' '
LENMEM DS H
STRTMEM DS F
ENDMEM DS F
LENALS DS H
STRTALS DS F
ENDALS DS F
MEMNAME DS CL8
ALSNAME DS CL8
*
**********************************************************************
******** DEFINE CONSTANTS FOR THIS PROGRAM ***************************
**********************************************************************
*
LTORG
*
BLANKS DC CL8' '
*
**********************************************************************
******** 'EXECUTE' INSTRUCTIONS **************************************
**********************************************************************
*
MOVEMEM MVC MEMNAME(0),INPUTOFT(R8)
MOVEALS MVC ALSNAME(0),INPUTOFT(R8)
*
**********************************************************************
******** DEFINE SAVE AREA FOR THIS PROGRAM ***************************
**********************************************************************
*
SAVEBLK DC 18F'0' 18 FULLWORDS INITIALISED TO 0
SAVER13 DC F'0' 1 FULLWORD FOR SAVING REG 13 CONTS
*
**********************************************************************
******** LOOK-UP TABLES **********************************************
**********************************************************************
*
SRCH1ST DS 0D
S0 DC XL16'000102030405060708090A0B0C0D0E0F'
S1 DC XL16'101112131415161718191A1B1C1D1E1F'
S2 DC XL16'202122232425262728292A2B2C2D2E2F'
S3 DC XL16'303132333435363738393A3B3C3D3E3F'
S4 DC XL16'404142434445464748494A4B4C4D4E4F'
S5 DC XL16'505152535455565758595A005C5D5E5F'
S6 DC XL16'606162636465666768696A6B6C6D6E6F'
S7 DC XL16'707172737475767778797A00007D7E7F'
S8 DC XL16'808182838485868788898A8B8C8D8E8F'
S9 DC XL16'909192939495969798999A9B9C9D9E9F'
SA DC XL16'A0A1A2A3A4A5A6A7A8A9AAABACADAEAF'
SB DC XL16'B0B1B2B3B4B5B6B7B8B9BABBBCBDBEBF'
SC DC XL16'C0000000000000000000CACBCCCDCECF'
SD DC XL16'D0000000000000000000DADBDCDDDEDF'
SE DC XL16'E0E10000000000000000EAEBECEDEEEF'
SF DC XL16'F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF'
*
**********************************************************************
******** THAT'S IT ***************************************************
**********************************************************************
*
END BEGIN START EXECUTION FROM BEGIN ONWARDS
On 07/07/2017 18:31, Walt Farrell wrote:
> On Fri, 7 Jul 2017 16:56:09 +0200, R.S. <[email protected]>
> wrote:
>
>> W dniu 2017-07-07 o 15:29, Lizette Koehler pisze:
>>> As far as I know, the statistics have always worked that way. That as long
>>> as you had the ability to edit (change/alter/del/create) the PDS you could
>>> use 3.5 to change the ID field to anything you like.
>> ...except the dates.
>> Sometimes I want to change the date (just to prepare "installation
>> package", no cheating).
>> Is there any method to change the dates?
>> I mean set the date to something like 1999-09-09, not just reset.
> That may require a program of your own that uses STOW.
>
----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to [email protected] with the message: INFO IBM-MAIN