MVS History
MVS History
MVS History
A history of IBMs most powerful and reliable operating system (pictures of 360 and 370 reference cards ) ........ MVS: Then and now Today, MVS is IBMs most powerful and reliable computer operating system. Over the years, MVS has been refined and honed, incorporating customer requirements, remaining attuned to new hardware and software developments, and expanding its capabilities to keep pace with changing directions in technology. The MVS of today is not the MVS of old. In fact, much of MVS has been rewritten, using state-of-the-art techniques which reflect new concepts and functions to ensure high levels of quality and availability. MVS/ESA(tm) has a long and rich heritage. Its roots lie in OS/360, an IBM operating system developed in the 1960s. Whether you are a newcomer to MVS, or have been in data processing for 40 years, we hope you enjoy retrospective. (Picture of AUTOCHART CODING SHEET) OS/360 In April 1964, IBM announced OS/360, an operating system developed to support the new generation and architecture OS System/360(tm) hardware capable of both commercial and scientific applications. Prior to System/360, these applications ran on separate lines of hardware. OS/360 included three control programs options, delivered in stages beginning in March 1966. The first stage was the simplest - a sequential scheduler called the primary control program (PCP). PCP, performed only one task at a time, and ran in 32KB of memory. Thats right! Kilobytes, not megabytes. With PCP, a processor could spend considerable time
Hi All, Please find the attached tool developed for splitting up the records. Its a combination of JCL and REXX. Overview of the process: 1.Provide the input file name, how many records you prefer to have in each file, and the output space quantity. 2. Using sort we will get the record count which will be used as one of the input in Rexx program. 3. Rexx program will divide (total record count) with (preferred record count) and based on that information will generate dynamic JCL for splitting purpose and submit the same. 4. Prior to running the job change the userid / REXX pds name / job card details. Input: Tested with the file which have 18 records and prefers to split each of 3.
Output:
//STEP1 EXEC PGM=SORT //SYSOUT DD SYSOUT=* //SORTIN DD DSN=ISDNOSA.TEST.FILE2, // DISP=SHR //SORTOF1 DD DSN=ISDNOSA.REXXSPL.OUT1, // DISP=(NEW,CATLG,DELETE), // SPACE=(CYL,(10,10),RLSE),UNIT=(,10) //SORTOF2 DD DSN=ISDNOSA.REXXSPL.OUT2, // DISP=(NEW,CATLG,DELETE), // SPACE=(CYL,(10,10),RLSE),UNIT=(,10) //SORTOF3 DD DSN=ISDNOSA.REXXSPL.OUT3, // DISP=(NEW,CATLG,DELETE), // SPACE=(CYL,(10,10),RLSE),UNIT=(,10) //SORTOF4 DD DSN=ISDNOSA.REXXSPL.OUT4, // DISP=(NEW,CATLG,DELETE), // SPACE=(CYL,(10,10),RLSE),UNIT=(,10) //SORTOF5 DD DSN=ISDNOSA.REXXSPL.OUT5,
// DISP=(NEW,CATLG,DELETE), // SPACE=(CYL,(10,10),RLSE),UNIT=(,10) //SORTOF6 DD DSN=ISDNOSA.REXXSPL.OUT6, // DISP=(NEW,CATLG,DELETE), // SPACE=(CYL,(10,10),RLSE),UNIT=(,10) //SYSIN DD * SORT FIELDS=COPY OUTFIL FILES=1,STARTREC=1,ENDREC=3 OUTFIL FILES=2,STARTREC=4,ENDREC=6 OUTFIL FILES=3,STARTREC=7,ENDREC=9 OUTFIL FILES=4,STARTREC=10,ENDREC=12 OUTFIL FILES=5,STARTREC=13,ENDREC=15 OUTFIL FILES=6,STARTREC=16,ENDREC=18
Regards, Saravanan
++++++++++ Rexx JCL: +++++++++ //ISDNOSAS JOB ($014001T),'SARAVANAN,S', // CLASS=M,MSGCLASS=X,NOTIFY=ISDNOSA //PROC1 JCLLIB ORDER=ISDNOSA.SARA.PROC // SET DIVCNT=1000000 // SET INPUT1=ISDNOSA.TEST.VSAM1 // SET SPACE1='CYL,(10,10)' //* //STEPD EXEC PGM=IEFBR14 //SYSOUT DD SYSOUT=* //DEL1 DD DSN=ISDNOSA.REXXSPL.SORTOUT,DISP=(MOD,DELETE,DELETE) //DEL2 DD DSN=ISDNOSA.REXXSPL.SYSIN,DISP=(MOD,DELETE,DELETE) //DEL3 DD DSN=ISDNOSA.REXXSPL.COUNT,DISP=(MOD,DELETE,DELETE) //* //STEPC EXEC PGM=IEFBR14,COND=(0,NE) //SYSOUT DD SYSOUT=* //CRE1 DD DSN=ISDNOSA.REXXSPL.SORTOUT,DISP=(NEW,CATLG,DELETE), // SPACE=(TRK,(30,30),RLSE),DCB=(LRECL=80,RECFM=FB,BLKSIZE=0) //CRE2 DD DSN=ISDNOSA.REXXSPL.SYSIN,DISP=(NEW,CATLG,DELETE), // SPACE=(TRK,(30,30),RLSE),DCB=(LRECL=80,RECFM=FB,BLKSIZE=0) //CRE3 DD DSN=ISDNOSA.REXXSPL.COUNT,DISP=(NEW,CATLG,DELETE), // SPACE=(TRK,(30,30),RLSE),DCB=(LRECL=80,RECFM=FB,BLKSIZE=0) //* //STEP1 EXEC PGM=SORT,COND=(0,NE) //SYSOUT DD SYSOUT=* //SORTIN DD DSN=&INPUT1,DISP=SHR //SORTOUT DD DSN=ISDNOSA.REXXSPL.COUNT,DISP=SHR //SYSIN DD * SORT FIELDS=COPY
OUTFIL REMOVECC,NODETAIL, TRAILER1=(1:COUNT=(EDIT=(TTTTTTTTTT))) /* //STEP2 EXEC PGM=IKJEFT1B,COND=(0,NE), // PARM='%SORTJC &INPUT1 &DIVCNT &SPACE1' //SYSPROC DD DISP=SHR,DSN=ISDNOSA.SARA.REXX //SYSTSPRT DD SYSOUT=* //SYSOUT DD SYSOUT=* //SYSTSIN DD DUMMY //* //STEP3 EXEC PGM=SORT,COND=(0,NE) //SYSOUT DD SYSOUT=* //SYSIN DD * SORT FIELDS=COPY /* //SORTOUT DD SYSOUT=(*,INTRDR) //SORTIN DD DATA,DLM=$$ //ISDNOSAS JOB ($014001T),'SARAVANAN,S', // CLASS=M,MSGCLASS=X,NOTIFY=&SYSUID //* //STEP1 EXEC PGM=SORT //SYSOUT DD SYSOUT=* $$ // DD DSN=ISDNOSA.REXXSPL.SORTOUT,DISP=SHR // DD DSN=ISDNOSA.REXXSPL.SYSIN,DISP=SHR +++++++++ REXX SORT ++++++++++ /*REXX*/ ARG INPUT1 DIVCNT SPACE1 "ALLOC F(IND0) DA(REXXSPL.COUNT) SHR"; "EXECIO 1 DISKR IND0 (STEM LAYREC. FINIS" "FREE F(IND0)" RECCNT = LAYREC.1 SAY "INPUT " INPUT1 SAY "RECCNT " RECCNT SAY "DIVCNT " DIVCNT DIV1 = (RECCNT/DIVCNT) DIVR = FORMAT(DIV1,,0) SAY "DIVR = " DIVR CNT1=0 CNT2=1 DO I=1 TO DIVR BY 1 JCL1.I = '//SORTOF'I' DD DSN='USERID()'.REXXSPL.OUT'I',' JCL2.I = '// DISP=(NEW,CATLG,DELETE),' JCL3.I = '// SPACE=('SPACE1',RLSE),UNIT=(,10)'
IF I=1 THEN DO INP1.1= '//SORTIN DD DSN='INPUT1',' INP1.2= '// DISP=SHR' QUEUE INP1.1 QUEUE INP1.2 RECS=QUEUED() END QUEUE JCL1.I QUEUE JCL2.I QUEUE JCL3.I RECS=QUEUED() END "ALLOC F(OUTDD) DA(REXXSPL.SORTOUT) SHR" "EXECIO" RECS "DISKW OUTDD (FINIS" DO I=01 TO DIVR BY 1 CNT1=CNT1 + DIVCNT SYS1.I = ' OUTFIL FILES='I',''STARTREC='CNT2',ENDREC='CNT1 IF CNT2 = 1 THEN DO ONETME1='//SYSIN DD *' ONETME2=' SORT FIELDS=COPY' QUEUE ONETME1 QUEUE ONETME2 END QUEUE SYS1.I RECS=QUEUED() CNT2=CNT1 + 1 END "ALLOC F(SYSDD) DA(REXXSPL.SYSIN) SHR" "EXECIO" RECS "DISKW SYSDD (FINIS" EXIT;
Hi All, As a follow up to the above posts I am just adding one more tip on sending messages in MVS. Send a message to a TSO user. In this cmd, the message is cancelled if the user is not logged on.
Code: SEND USER (USERID) ?message?
If you give * in place of USERID, you?ll get the message. Wait until the user is able to receive the message.
Code: SEND USER (USERID) ?message? WAIT
Send a message to another user, so that if the user is not logged on currently, the message will be delivered when the user logs on.
Code: SEND USER (USERID) ?message? LOGON
Hi All, Got one VB file which contains record of various sizes. Now our requirement is to retrieve a set of records of particular length. e.g My VB file has got records with LRECL 4, 6, 8 ... Since it is a VB file we need to add the control information 4 bytes to it. So now LRECL will be 8, 10, 12. Now i need to retrieve the record with LRECL=10 here goes the JCL for it
//STEP1 EXEC PGM=SORT //SYSOUT DD SYSOUT=* //SORTIN DD DISP=SHR,DSN=ISDNOSA.TEST.FILE6 //SORTOUT DD SYSOUT=* //SYSIN DD * SORT FIELDS=COPY INCLUDE COND=(1,2,BI,EQ,+10) /* Input is : ----+----1----+----2----+----3----+----4----+ ***************************** Top of Data *** 1234 123456 12345678
12345678 Output is (keep 4 bytes control information in mind) ----+----1----+----2----+----3-******************************** 123456 *******************************
Now another Requirement is to retrieve what are the possible record length available in that file and the count of the same?
//Step0100 EXEC PGM=ICETOOL //TOOLMSG DD SYSOUT=* //DFSMSG DD SYSOUT=* //IN DD DSN=... input file (VB) //RPT DD SYSOUT=* //TOOLIN DD * * List minimum, maximum, total and average record length in TOOLMSG. STATS FROM(IN) ON(VLEN) * Show the number of records with each length in RPT. OCCUR FROM(IN) LIST(RPT) BLANK HEADER('Length') ON(VLEN) HEADER('Count') ON(VALCNT) /*
TOOLIN Output :
MINIMUM: AVERAGE: +000000000000008, MAXIMUM: +000000000000011, TOTAL : +000000000000012 +000000000001318
RPT Output: ******************************** Top of LENGTH COUNT -------------------8 12 10 1 12 101 ******************************* Bottom
So from the above result we have 12 records of LRECL 8, 1 record of LRECL 10 and 101 records of LRECL 12
In batch file aid to avoid RC 8 for empty file copy, we used to give PARM value as shown below...
//STEPNAME EXEC PGM=FILEAID, // PARM='OPT=0250100606611121025000005579100' //DD01 DD DSN=INPUT.FILE,DISP=SHR //DD01O DD DUMMY //SYSIN DD * $$DD01 COPY /*
closest thing I can find is a table built during installation. There is a field called BTOPT18 that tells FileAid what return code to use when a file is empty. Unfortunately, I can't find and references to how to override this option. The manuals don't have an overall index that I can find, and Compuware didn't create a 'bookshelf' PDF file, just individual books with 8 character names. -------------------------------------------------------------------------------There is a parm you can pass to FileAid that will override the first 35 installation defaults, including the 18th one that controls what you need. The bad part is that it overalys all characters starting from the left, so you have to provide the values for the first 17 options as well. So the execute line needs to look like: Code: PGM=FILEAID,PARM='OPT=0250100606611121025000005882104' Those last two bytes are the return code for an empty file. I tried it and it works. You can put anything from 00 to 99 in there. The other values are the defaults from the manual. In the installation guide, do a find on 'opt=' and you go to the bottom of the list of options. -------------------------------------------------------------------------------Well, I have Good News and Bad News. The Good news is that this CAN be overridden. The Bad news is that it is less than straight forward in FileAID. According to the "File-AID/MVS Installation Guide R8.9" you can modify the Batch FileAID installation options with the following PARM syntax: Code: // EXEC PGM=FILEAID,PARM='OPT=????????' The downside is in the format of those question marks. The following is a summarization of the example in the manual. The first 5 FileAID Batch options are as follows: BTOPT01, BTOPT02, BTOPT03, BTOPT04, BTOPT05, Displacement Displacement Displacement Displacement Displacement 00, 04, 05, 06, 08, Default Default Default Default Default value value value value value 0250, Record Print Default 1, Form Print Default 0, Key Print 06, Batch Buffer Space 06, TSO Buffer Space
In order to override the Batch Buffer Space for example, from it's default value of 06 to 12 the Override would look like this: Code: // EXEC PGM=FILEAID,PARM='OPT=02501012'In other words, you have to specifiy ALL the values to the left of the one you are trying to override! Eww Yuk! And to make matters worse, Ed Goodman is correct that the option you want is BTOPT18. So here are the next 13 installation values from the book: BTOPT06, BTOPT07, BTOPT08, BTOPT09, BTOPT10, BTOPT11, BTOPT12, BTOPT13, BTOPT14, BTOPT15, BTOPT16, BTOPT17, BTOPT18, Displacement Displacement Displacement Displacement Displacement Displacement Displacement Displacement Displacement Displacement Displacement Displacement Displacement 0A, Default Value 6, PRINTER SPACING. 0B, Default Value 1, CHARACTER SET 0C, Default Value 1, TSO PROMPTING. 0D, Default Value 1, ABEND CONTROL. 0E, Default Value 2, DATE FORMATTING. 0F, Default Value 1, MONTH FORMATTING. 10, Default Value 025, I/O ERROR. 13, Default Value 0, UPDATE OPTION. 14, Default Value 0000, UPDATE ACCESS CODE. 18, Default Value 58, PRINT LINES AT 8LPI. 1A, Default Value 82, PRINT LINES AT 12LPI. 1C, Default Value 1, USER FUNCTION. 1D, Default Value 08, NO RECORDS COPIED RETURN CODE.
1 3 14 11
2 10
5 7 6
12
16 16 15 17
13
25
8 8
18 19 20
26
23 22
27
24
21
17
Across 1. A CICS transaction used to display individual message information similar to that provided in the CICS Messages & Codes manual. 3. Option used in changeman to Browse any package, component and relationships. 4. It establishes a a linkage between the application program and the DB2 data it accesses. 6. This version of mainframe OS introduced the concept of expanded memory. 8. This utility is used to improve access performance of a table space. 11.It indicates absence of a column value in a row. 13.Its one of the category of keys in CICS. 15. Most used type of VSAM file. 17. A data set utility used to create a PDS from a sequential data set. 19. a working storage variable with appropriate size to hold the range of an array 21. One of the parameter which can be coded both in job as well as exec statement. 26. Commonly used measure of CPU power. 27. The Name of the collection of access method modules which process sequential datasets. Down 2. It contains the circuits necessary for performing arthemetic operations 5. Old name for Connect:Direct 7. This clause is used to tell the compiler what formats to use for specific fields 9. This command lets you proceed backward through a data set. 10. CECI is used to check this 12. A convenient and interactive way of testing sql statements before embedding them into the application program. 14. command used with map keyword in CICS 16. CICS command to pass control from one program to another.
18.This command is used to relinquish control and allow tasks higher on the active chain to proceed. 20.Used to end an instream procedure. 22.DB2 uses this type of index 23. Pre requisite for search all 24. Cobol verb used to combine two or more data sets. 25.Pre compiler's output in DB2
M Q
A L U
C E R S Y N T A X S U S P E N D
N D M
D V U S A G E 8 S O R T G X
S E N D
L I N K M E R G E
L 16 D
D B R M B
R E A D P R E V
S P U F I G
I S
P C
17 A
B T R E E
\\157.227.90.8\cbg\CBG\17 CBG\40 Working\Saravanan Desingh\Latest Docs Topic Abend-AID_Resolving a S0C7 with Basic Language Support COBOL examples Dialog Manager - Part I Dialog Manager - Part II Dialog Manager - Part III File-AID_TSO(Option 3_5) for VSAM ISPF - A Reference ISPF Edit Macro (Using REXX) REXX_MVS Programming REXXTOOLS_MVS TSO_E Programming Vendor Supplied JCLs Vendor Tools & Technology VSAM AIX Parameter Definitions VSAM Parameter Definitions zOS DFSORT V1R5 Programming Author Sharmath Deeniya Saravanan Desingh Saravanan Desingh Saravanan Desingh Saravanan Desingh Saravanan Desingh Saravanan Desingh Saravanan Desingh Saravanan Desingh Saravanan Desingh Saravanan Desingh Saravanan Desingh Saravanan Desingh Saravanan Selvavinayagam Saravanan Selvavinayagam Saravanan Desingh
Hi All, Using IBM ILBOWAT0 utility we can set delay in COBOL program. Code:
IDENTIFICATION DIVISION. PROGRAM-ID. TEST4. ENVIRONMENT DIVISION. CONFIGURATION SECTION. DATA DIVISION. WORKING-STORAGE SECTION. 01 DELAY-AMT PIC S9(9) COMP VALUE 60. 01 ILBOWAT0 PIC X(8) VALUE 'ILBOWAT0'. 01 CURRENT-TIME PIC 9(8). PROCEDURE DIVISION. ACCEPT CURRENT-TIME FROM TIME. DISPLAY 'TIME OF DAY BEFORE ILBOWAT0: ', CURRENT-TIME CALL ILBOWAT0 USING DELAY-AMT. ACCEPT CURRENT-TIME FROM TIME. DISPLAY 'TIME OF DAY AFTER ILBOWAT0: ', CURRENT-TIME STOP RUN. Output: ******************************** Top of Data *********************************** TIME OF DAY BEFORE ILBOWAT0: 06400628 TIME OF DAY AFTER ILBOWAT0: 06410635 ******************************* Bottom of Data ********************************