Overview
In late 2018, in the interest of interfacing with Wally’s Mclaughlin’s newly ISPF-like product, I wrote a simple application using different solution sets for educational and learning purposes to demonstrate the versatility of using diffent programming languages.
CALNDRs (Calendars) in MVS38J is a post that discusses that application using the compilers offered and supplied with MVS 3.8J in conjunction with ISPF 2.x!
The functional specifications are quite simple (maybe too simple), as this is not the emphasis:
1. Display 1993 year calendar in a dynamic area with depth of 7 (window of 7 weeks) on a ISPF panel
2. Scroll UP and DOWN to view next/previous section of yearly calendar
3. Scroll amount controlled by PAGE, HALF, or number (as processed by ISPF)
4. Display message when TOP or BOTTOM of calendar is reached
5. Provide some input fields on screen but have no functional value in this exercise
The software is comprised of one CLIST, two programs (Assembler and COBOL), Panel, and message file.
Due to the compiler product level and era of PL/I and FORTRAN, I elected not to exploit these languages. Also, FORTRAN utilizes a different ISPF API named ISPLNK which is not offered in Wally’s ISPF version.
All three solutions attempt to follow the same pseudo-logic to facilitate easy tracing across programming languages. The actual implementation will differ between CLIST and programming languages due to syntax and/or rules.
Calendar display pseudo-logic flow: +-------------------------------------------------------------------+ | | | 1) Declare local variables (i.e. 1993 year calendar) | | including language type for panel header | | | +-------------------------------------------------------------------+ | | | 2) Issue CONTROL service to set ISPF errors handling | | | +-------------------------------------------------------------------+ | | | 3) Issue VDEFINE service to declare shared variables | | | +-------------------------------------------------------------------+ | | | 4) Issue PQUERY service to determine dynamic area depth | | | +-------------------------------------------------------------------+ | | | 5) Initialize Calendar 'window' variables | | | +-------------------------------------------------------------------+ | | | 6) Do SCROLL-PROCESS loop until PF3/PF4 | | | +-------------------------------------------------------------------+ | | | 7) Issue VDELETE service to delete shared variables | | | +-------------------------------------------------------------------+ | | | 8) Return to caller | | | +-------------------------------------------------------------------+ Loop SCROLL-PROCESS: a) Calculate CALENDAR 'window' start and end positions b) If window is at TOP, set message CLNDR01 c) If window is at BOTTOM, set message CLND02 d) Issue DISPLAY service to display panel PCALNDR e) If PF7 IF MAX scroll position calendar window to TOP Else position calendar to PREV scroll window position based on scrolling amount testing for falling short of calendar start position Else If PF8 IF MAX scroll position calendar window to BOTTOM Else position calendar to NEXT scroll window position based on scrolling amount testing for exceeding calendar end position Loop END.
CALNDRs were tested with MVS 3.8J TK3, Hercules 3.13 on Windows 10 Pro, ISPF v2.1 and v2.2 from Wally Mclaughlin.
The below screen is shared by all application solutions. The underlying language type is displayed on the header.
------------------------ Calendar Sample using CLIST -------------------------- Command ===> Scroll ==> PAGE Dummy dates: Year: 1993 MM / DD S M T W T F S Starting ===> 01 / 01 ----------------------------- Ending ===> 12 / 31 ¦ JAN 1 2 ¦ ¦ 3 4 5 6 7 8 9 ¦ ¦ 10 11 12 13 14 15 16 ¦ ¦ 17 18 19 20 21 22 23 ¦ ¦ 24 25 26 27 28 29 30 ¦ ¦ 31 1 2 3 4 5 6 ¦ ¦ FEB 7 8 9 10 11 12 13 ¦ ----------------------------- Enter UP or DOWN command to scroll through calendar.
Prerequisites
Two user-mods, ZP60014 and ZP60038, are REQUIRED to process CLIST symbolic variables via the IKJCT441 API on MVS 3.8J or before using ISPF Services sharing CLIST variables.
More information on the above user-mods (ZP60014 and ZP60038) can be obtained from the following website:
http://www.prycroft6.com.au/vs2mods/
More information on ISPF 2.x user-mods can be obtained from the ISPF 2.x distribution tape (HET).
ISPF v2.1 (Wally Mclaughlin’s product) or greater must be installed on MVS38J.
Software Disclaimer
No guarantee; No warranty; Install / Use at your own risk.
This software is provided “AS IS” and without any expressed or implied warranties, including, without limitation, the implied warranties of merchantability and fitness for a particular purpose.
The author requests keeping authors name intact to any modified versions.
In addition, the author requests readers to submit any code modifications / enhancements and associated comments for consideration into a subsequent release (giving credit to contributors) thus, improving overall functionality benefiting the MVS 3.8J hobbyist public domain community.
Access CALNDR now for a demo!
Take CALNDR for a ‘test drive’ before downloading and installing onto your MVS38J system.
Point your TN3270 terminal emulator using SSL to
URL: mywhs.belmontes.net
PORT: 5000
TLS : Version 2
Once connected, log on using any of the TK4- default user ids and passcodes.
After successful logon, select option I (I for ISPF) from the TSO Applications Menu. Note, option I is not listed on the menu – this is intentional.
From the ISPF PRIMARY OPTION MENU, type L in the command field (OPTION ==>) and press ENTER to display the ShareABitOfIT Software Demo Menu.
Each of the CALNDR CPs can be accesses via the command line.
To access the CLIST version, type TSO CCALNDR in the command field (OPTION ==>) and press ENTER.
Use PF7/PF8 to scroll the calendar display panel.
Use PF3 to end.
To access the Assembler version, type TSO CALNDRA.
To access the COBOL version, type TSO CALNDRC.
Use PF3 to exit from ISPF and TSO Applications Menu returning to the TSO READY prompt.
Log off TSO.
Terminate 3270 session.
Installing CALNDR Software
After downloading the ZIP file, the approach for this installation procedure is to transfer the distribution content from the your personal computing device to MVS with minimal JCL and continue the installation procedure using supplied JCL from the MVS CNTL data set under TSO.
- Click here to download the CALNDR zip file to your PC local drive.
The below README file includes a ZIP file content list, pre-installation requirements and installation steps.
CALNDR for MVS3.8J / Hercules ============================= Date: 02/11/2019 Release V0R9M00 * Author: Larry Belmontes Jr. * https://ShareABitofIT.net/CALNDRs-in-MVS38J * Copyright (C) 2018 Larry Belmontes, Jr. ---------------------------------------------------------------------- | CALNDR I n s t a l l a t i o n R e f e r e n c e | ---------------------------------------------------------------------- The approach for this installation procedure is to transfer the distribution content from your personal computing device to MVS with minimal JCL and to continue the installation procedure using supplied JCL from the MVS CNTL data set under TSO. Below are descriptions of ZIP file content, pre-installation requirements (notes, credits) and installation steps. Good luck and enjoy this software as added value to MVS 3.8J! -Larry Belmontes ====================================================================== * I. C o n t e n t o f Z I P F i l e | ====================================================================== o $INST00.JCL Define Alias for HLQ CALNDR in Master Catalog o $INST01.JCL Load CNTL data set from distribution tape o $RECVXMI.JCL Receive XMI SEQ to MVS PDSs o CALNDR.V0R9M00.HET Hercules Emulated Tape (HET) multi-file volume with VOLSER of V0R9M00 containing software distribution. o CALNDR.V0R9M00.XMI XMIT file containing software distribution. o DSCLAIMR.TXT Disclaimer o PREREQS.TXT Required user-mods o README.TXT This File Note: ISPF v2.1 or higher must be installed under MVS3.8J TSO ----- including associated user-mods per ISPF Installation Pre-reqs. ====================================================================== * II. P r e - i n s t a l l a t i o n R e q u i r e m e n t s | ====================================================================== o The Master Catalog password may be required for some installation steps. o Tape files use device 480. o As default, DASD files will be loaded to VOLSER=MVSDLB, type 3350 device. Below is a DATASET List after tape distribution load for reference purposes: DATA-SET-NAME------------------------------- VOLUME ALTRK USTRK ORG FRMT % XT CALNDR.V0R9M00.ASM MVSDLB 50 8 PO FB 16 1 CALNDR.V0R9M00.CLIST MVSDLB 2 1 PO FB 50 1 CALNDR.V0R9M00.CNTL MVSDLB 20 7 PO FB 35 1 CALNDR.V0R9M00.HELP MVSDLB 2 1 PO FB 50 1 CALNDR.V0R9M00.ISPF MVSDLB 15 3 PO FB 20 1 CALNDR.V0R9M00.MACLIB MVSDLB 2 1 PO FB 50 1 **END** TOTALS: 91 TRKS ALLOC 21 TRKS USED 6 EXTENTS Confirm the TOTAL track allocation is available on MVSDLB. Note: A different DASD device type may be used to yield different usage results. o TSO user-id with sufficient access rights to update SYS2.CMDPROC, SYS2.CMDLIB, SYS2.HELP, SYS2.LINKLIB and/or ISPF libraries. o For installations with a security system (e.g. RAKF), you MAY need to insert additional JOB statement information. // USER=???????,PASSWORD=???????? o Names of ISPCLIB (Clist), ISPMLIB (Message), ISPLLIB (Load) and/or ISPPLIB (Panel) libraries. o Download ZIP file to your PC local drive. o Unzip the downloaded file into a temp directory on your PC device. ====================================================================== * III. I n s t a l l a t i o n S t e p s | ====================================================================== +--------------------------------------------------------------------+ | Step 1. Define Alias for HLQ CALNDR in MVS User Catalog | +--------------------------------------------------------------------+ | JCL Member: CALNDR.V0R9M00.CNTL($INST00) | +--------------------------------------------------------------------+ ______________________________________________________________________ //CALNDR00 JOB (SYS),'Def CALNDR Alias', <-- Review and Modify // CLASS=A,MSGCLASS=X, <-- Review and Modify // MSGLEVEL=(1,1),NOTIFY=&SYSUID <-- Review and Modify //* -------------------------------------------------------* //* * CALNDR in MVS3.8J TSO / Hercules * //* * JOB: $INST00 Define Alias for HLQ CALNDR * //* * Note: The master catalog password will be required * //* -------------------------------------------------------* //DEFALIAS EXEC PGM=IDCAMS //SYSPRINT DD SYSOUT=* //SYSIN DD * PARM GRAPHICS(CHAIN(SN)) LISTCAT ALIAS ENT(CALNDR) IF LASTCC NE 0 THEN - DEFINE ALIAS(NAME(CALNDR) RELATE(SYS1.UCAT.MVS)) /* // ______________________________________________________________________ Figure 1: $INST00 JCL a) Copy and paste the above JCL to a PDS member, update JOB statement to conform to your installation standard. b) Submit the job. c) Review job output for successful DEFINE ALIAS. Note: Job step DEFALIAS returns RC=0004 due to LISTCAT function completing with condition code of 4 and DEFINE ALIAS function completing with condition code of 0. +--------------------------------------------------------------------+ | Step 2. Determine software installation source | +--------------------------------------------------------------------+ | HET or XMI ? | +--------------------------------------------------------------------+ a) Software can be installed from two sources, HET or XMI. - For tape installation (HET), proceed to STEP 4. **** or - For XMIT installation (XMI), proceed to next STEP. +--------------------------------------------------------------------+ | Step 3. Load XMIPDS data set from XMI SEQ file | +--------------------------------------------------------------------+ | JCL Member: CALNDR.V0R9M00.CNTL($RECVXMI) | +--------------------------------------------------------------------+ ______________________________________________________________________ //RECV000A JOB (SYS),'Receive CALNDR XMI', <-- Review and Modify // CLASS=A,MSGCLASS=X,REGION=0M, <-- Review and Modify // MSGLEVEL=(1,1),NOTIFY=&SYSUID <-- Review and Modify //* -------------------------------------------------------* //* * JOB: $RECVXMI Receive Application XMI Files * //* -------------------------------------------------------* //RECV PROC HLQ=CALNDR,VRM=V0R9M00,TYP=XXXXXXXX, // DSPACE='(TRK,(10,05,40))',DDISP='(,CATLG,DELETE)', // DUNIT=3350,DVOLSER=MVSDLB <-- Review and Modify //* //RECV370 EXEC PGM=RECV370 //STEPLIB DD DSN=SYS2.LINKLIB,DISP=SHR <-- Review and Modify //RECVLOG DD SYSOUT=* //XMITIN DD DISP=SHR,DSN=&&XMIPDS(&TYP) //SYSPRINT DD SYSOUT=* //SYSUT1 DD DSN=&&SYSUT1, // UNIT=SYSALLDA,SPACE=(CYL,(10,05)),DISP=(,DELETE,DELETE) //SYSUT2 DD DSN=&HLQ..&VRM..&TYP,DISP=&DDISP, // UNIT=&DUNIT,SPACE=&DSPACE,VOL=SER=&DVOLSER //SYSIN DD DUMMY //SYSUDUMP DD SYSOUT=* // PEND //* RECEIVE XMIPDS TEMP //XMIPDS EXEC RECV,TYP=XMIPDS,DSPACE='(CYL,(10,05,10),RLSE)' //RECV370.XMITIN DD DISP=SHR,DSN=your.transfer.xmi <-- XMI File //RECV370.SYSUT2 DD DSN=&&XMIPDS,DISP=(,PASS), // UNIT=SYSDA,SPACE=&DSPACE //* RECEIVE CNTL, HELP, CLIST, ISPF, ASM, MACLIB //CNTL EXEC RECV,TYP=CNTL,DSPACE='(TRK,(20,10,10))' //HELP EXEC RECV,TYP=HELP,DSPACE='(TRK,(02,02,02))' //CLIST EXEC RECV,TYP=CLIST,DSPACE='(TRK,(02,02,02))' //ISPF EXEC RECV,TYP=ISPF,DSPACE='(TRK,(15,05,10))' //ASM EXEC RECV,TYP=ASM,DSPACE='(TRK,(50,10,10))' //MACLIB EXEC RECV,TYP=MACLIB,DSPACE='(TRK,(02,02,02))' // ______________________________________________________________________ Figure 2: $RECVXMI.JCL a) Transfer CALNDR.V0R9M00.XMI to MVS using your 3270 emulator. Make note of the DSN assigned on MVS transfer. Use transfer IND$FILE options: NEW BLKSIZE=3200 LRECL=80 RECFM=FB Ensure the DSN on MVS exists with the correct DCB information: ORG=PS BLKSIZE=3200 LRECL=80 RECFM=FB b) Copy and paste the above JCL to a PDS member, update JOB statement to conform to your installation standard. Review JCL and apply any modifications per your installation including the DSN assigned during the transfer above for the XMI file. d) Submit the job. e) Review job output for successful load of the following PDSs: CALNDR.V0R9M00.ASM CALNDR.V0R9M00.CLIST CALNDR.V0R9M00.CNTL CALNDR.V0R9M00.HELP CALNDR.V0R9M00.ISPF CALNDR.V0R9M00.MACLIB f) Subsequent installation steps will be submitted from members contained in the CNTL data set. g) Proceed to STEP 6. **** +--------------------------------------------------------------------+ | Step 4. Load CNTL data set from distribution tape | +--------------------------------------------------------------------+ | JCL Member: CALNDR.V0R9M00.CNTL($INST01) | +--------------------------------------------------------------------+ ______________________________________________________________________ //CALNDR01 JOB (SYS),'Install CNTL PDS', <-- Review and Modify // CLASS=A,MSGCLASS=X, <-- Review and Modify // MSGLEVEL=(1,1),NOTIFY=&SYSUID <-- Review and Modify //* -------------------------------------------------------* //* * CALNDR in MVS3.8J TSO / Hercules * //* * JOB: $INST01 Load CNTL PDS from distribution tape * //* * Note: Default TAPE=480, DASD=3350 on MVSDLB * //* -------------------------------------------------------* //LOADCNTL PROC HLQ=CALNDR,VRM=V0R9M00,TVOLSER=VS0900, // TUNIT=480,DVOLSER=MVSDLB,DUNIT=3350 <-- Review and Modify //LOAD001 EXEC PGM=IEBCOPY //SYSPRINT DD SYSOUT=* //INCNTL DD DSN=&HLQ..&VRM..CNTL.TAPE,UNIT=&TUNIT, // VOL=SER=&TVOLSER,DISP=OLD,LABEL=(1,SL) //CNTL DD DSN=&HLQ..&VRM..CNTL, // UNIT=&DUNIT,VOL=SER=&DVOLSER, // SPACE=(TRK,(20,10,10)),DISP=(,CATLG), // DCB=(RECFM=FB,LRECL=80,BLKSIZE=3600) // PEND //STEP001 EXEC LOADCNTL Load CNTL PDS //SYSIN DD * COPY INDD=INCNTL,OUTDD=CNTL // ______________________________________________________________________ Figure 3: $INST01 JCL a) Before submitting the above job, the distribution tape must be made available to MVS by issuing the following command from the Hercules console: DEVINIT 480 X:\dirname\CALNDR.V0R9M00.HET READONLY=1 where X:\dirname is the complete path to the location of the Hercules Emulated Tape file. b) Issue the following command from the MVS console to vary device 480 online: V 480,ONLINE c) Copy and paste the above JCL to a PDS member, update JOB statement to conform to your installation standard. Review JCL and apply any modifications per your installation. d) Submit the job. e) Review job output for successful load of the CNTL data set. f) Subsequent installation steps will be submitted from members contained in the CNTL data set. +--------------------------------------------------------------------+ | Step 5. Load Other data sets from distribution tape | +--------------------------------------------------------------------+ | JCL Member: CALNDR.V0R9M00.CNTL($INST02) | +--------------------------------------------------------------------+ ______________________________________________________________________ //CALNDR02 JOB (SYS),'Install Other PDSs', <-- Review and Modify // CLASS=A,MSGCLASS=X, <-- Review and Modify // MSGLEVEL=(1,1),NOTIFY=&SYSUID <-- Review and Modify //* -------------------------------------------------------* //* * CALNDR in MVS3.8J TSO / Hercules * //* * JOB: $INST02 Load other PDS from distribution tape * //* * Tape Volume: File 1 - CNTL * //* * File 2 - CLIST * //* * File 3 - HELP * //* * File 4 - ISPF * //* * File 5 - ASM * //* * File 6 - MACLIB * //* * Note: Default TAPE=480, DASD=3350 on MVSDLB * //* -------------------------------------------------------* //LOADOTHR PROC HLQ=CALNDR,VRM=V0R9M00,TVOLSER=VS0900, // TUNIT=480,DVOLSER=MVSDLB,DUNIT=3350 <-- Review and Modify //LOAD02 EXEC PGM=IEBCOPY //SYSPRINT DD SYSOUT=* //INCLIST DD DSN=&HLQ..&VRM..CLIST.TAPE,UNIT=&TUNIT, // VOL=SER=&TVOLSER,DISP=OLD,LABEL=(2,SL) //INHELP DD DSN=&HLQ..&VRM..HELP.TAPE,UNIT=&TUNIT, // VOL=SER=&TVOLSER,DISP=OLD,LABEL=(3,SL) //INISPF DD DSN=&HLQ..&VRM..ISPF.TAPE,UNIT=&TUNIT, // VOL=SER=&TVOLSER,DISP=OLD,LABEL=(4,SL) //INASM DD DSN=&HLQ..&VRM..ASM.TAPE,UNIT=&TUNIT, // VOL=SER=&TVOLSER,DISP=OLD,LABEL=(5,SL) //INMACLIB DD DSN=&HLQ..&VRM..MACLIB.TAPE,UNIT=&TUNIT, // VOL=SER=&TVOLSER,DISP=OLD,LABEL=(6,SL) //CLIST DD DSN=&HLQ..&VRM..CLIST,UNIT=&DUNIT,VOL=SER=&DVOLSER, // SPACE=(TRK,(02,02,02)),DISP=(,CATLG), // DCB=(RECFM=FB,LRECL=80,BLKSIZE=3600) //HELP DD DSN=&HLQ..&VRM..HELP,UNIT=&DUNIT,VOL=SER=&DVOLSER, // SPACE=(TRK,(02,02,02)),DISP=(,CATLG), // DCB=(RECFM=FB,LRECL=80,BLKSIZE=3600) //ISPF DD DSN=&HLQ..&VRM..ISPF,UNIT=&DUNIT,VOL=SER=&DVOLSER, // SPACE=(TRK,(15,05,10)),DISP=(,CATLG), // DCB=(RECFM=FB,LRECL=80,BLKSIZE=3600) //ASM DD DSN=&HLQ..&VRM..ASM,UNIT=&DUNIT,VOL=SER=&DVOLSER, // SPACE=(TRK,(50,10,10)),DISP=(,CATLG), // DCB=(RECFM=FB,LRECL=80,BLKSIZE=3600) //MACLIB DD DSN=&HLQ..&VRM..MACLIB,UNIT=&DUNIT,VOL=SER=&DVOLSER, // SPACE=(TRK,(02,02,02)),DISP=(,CATLG), // DCB=(RECFM=FB,LRECL=80,BLKSIZE=3600) // PEND //* //STEP001 EXEC LOADOTHR Load ALL other PDSs //SYSIN DD * COPY INDD=INCLIST,OUTDD=CLIST COPY INDD=INHELP,OUTDD=HELP COPY INDD=INISPF,OUTDD=ISPF COPY INDD=INASM,OUTDD=ASM COPY INDD=INMACLIB,OUTDD=MACLIB // ______________________________________________________________________ Figure 4: $INST02 JCL a) Member $INST02 installs remaining data sets from distribution tape. b) Review and update JOB statement and other JCL to conform to your installation standard. c) Before submitting the above job, the distribution tape must be made available to MVS by issuing the following command from the Hercules console: DEVINIT 480 X:\dirname\CALNDR.V0R9M00.HET READONLY=1 where X:\dirname is the complete path to the location of the Hercules Emulated Tape file. d) Issue the following command from the MVS console to vary device 480 online: V 480,ONLINE e) Submit the job. f) Review job output for successful loads. +--------------------------------------------------------------------+ | Step 6. Install TSO parts | +--------------------------------------------------------------------+ | JCL Member: CALNDR.V0R9M00.CNTL($INST03) | +--------------------------------------------------------------------+ ______________________________________________________________________ //CALNDR03 JOB (SYS),'Install TSO Parts', <-- Review and Modify // CLASS=A,MSGCLASS=X, <-- Review and Modify // MSGLEVEL=(1,1),NOTIFY=&SYSUID <-- Review and Modify //* -------------------------------------------------------* //* * CALNDR in MVS3.8J TSO / Hercules * //* * * //* * JOB: $INST03 Install TSO parts * //* * * //* * Note: Duplicate members are over-written. * //* -------------------------------------------------------* //STEP001 EXEC PGM=IEBCOPY //SYSPRINT DD SYSOUT=* //INCLIST DD DSN=CALNDR.V0R9M00.CLIST,DISP=SHR //INHELP DD DSN=CALNDR.V0R9M00.HELP,DISP=SHR //OUTCLIST DD DSN=SYS2.CMDPROC,DISP=SHR //OUTHELP DD DSN=SYS2.HELP,DISP=SHR //SYSIN DD * COPY INDD=((INCLIST,R)),OUTDD=OUTCLIST SELECT MEMBER=NO#MBR# /*dummy entry no mbrs! */ COPY INDD=((INHELP,R)),OUTDD=OUTHELP SELECT MEMBER=NO#MBR# /*dummy entry no mbrs! */ /* // ______________________________________________________________________ Figure 5: $INST03 JCL a) Member $INST03 installs TSO component(s). Note: If no TSO components are included for this distribution, ----- RC = 4 is returned by the corresponding IEBCOPY step. b) Review and update JOB statement and other JCL to conform to your installation standard. c) Submit the job. d) Review job output for successful load(s). +--------------------------------------------------------------------+ | Step 7. Install Programs - CALNDRx, COBPARM | +--------------------------------------------------------------------+ | JCL Member: CALNDR.V0R9M00.CNTL($INST04) | +--------------------------------------------------------------------+ ______________________________________________________________________ //CALNDR04 JOB (SYS),'Install CALNDR', <-- Review and Modify // CLASS=A,MSGCLASS=X, <-- Review and Modify // MSGLEVEL=(1,1),NOTIFY=&SYSUID <-- Review and Modify //* -------------------------------------------------------* //* * CALNDR for MVS3.8J TSO / Hercules * //* * * //* * JOB: $INST04 * //* * Install CALNDRx Programs, COBPARM program * //* * * //* * - Install libraries marked... * //* * - Search for '<--TARGET' * //* * - Update install libraries per your * //* * installation standard * //* * - SYSLIB libraries marked... * //* * - Search for '<-- ISP LLIB' * //* * - Update SYSLIB libraries per your * //* * installation standard * //* * * //* -------------------------------------------------------* //ASML PROC MBR=WHOWHAT //ASM EXEC PGM=IFOX00, // PARM='NODECK,LOAD,TERM,XREF' //SYSGO DD DSN=&&LOADSET,DISP=(MOD,PASS),SPACE=(CYL,(1,1)), // UNIT=VIO,DCB=(DSORG=PS,RECFM=FB,LRECL=80,BLKSIZE=800) //SYSLIB DD DSN=SYS1.MACLIB,DISP=SHR // DD DSN=SYS2.MACLIB,DISP=SHR ** YREG ** // DD DSN=SYS1.AMODGEN,DISP=SHR //SYSTERM DD SYSOUT=* //SYSPRINT DD SYSOUT=* //SYSPUNCH DD DSN=NULLFILE //SYSUT1 DD UNIT=VIO,SPACE=(CYL,(6,1)) //SYSUT2 DD UNIT=VIO,SPACE=(CYL,(6,1)) //SYSUT3 DD UNIT=VIO,SPACE=(CYL,(6,1)) //SYSIN DD DSN=CALNDR.V0R9M00.ASM(&MBR),DISP=SHR <--INPUT //* //LKED EXEC PGM=IEWL,PARM='MAP,LIST,LET,XREF', // COND=(0,NE,ASM) //SYSLIN DD DSN=&&LOADSET,DISP=(OLD,DELETE) // DD DDNAME=SYSIN //SYSLMOD DD DSN=XXXXXXXX.ISPLLIB(&MBR),DISP=SHR <--TARGET //SYSPRINT DD SYSOUT=* //SYSUT1 DD UNIT=VIO,SPACE=(CYL,(5,2)) //SYSIN DD DUMMY // PEND //* //* -------------------------------------------------------* //* * * //* * Assemble Link-edit CALNDRA * //* * * //* -------------------------------------------------------* //CALNDRA EXEC ASML,MBR=CALNDRA //LKED.SYSLIB DD DSNAME=ISP.V2R2M0.LLIB, <-- ISP LLIB // DISP=SHR //* //* -------------------------------------------------------* //* * * //* * Compile Link-edit CALNDRC * //* * * //* -------------------------------------------------------* //CALNDRC EXEC COBUCL,CPARM1='LIST,LOAD,NODECK,PMAP,DMAP' //COB.SYSPUNCH DD DUMMY //COB.SYSIN DD DSN=CALNDR.V0R9M00.ASM(CALNDRC),DISP=SHR //LKED.SYSLMOD DD DSN=XXXXXXXX.ISPLLIB(CALNDRC), <-- TARGET // DISP=SHR //LKED.SYSLIB DD // DD DSNAME=ISP.V2R2M0.LLIB, <-- ISP LLIB // DISP=SHR //* //* -------------------------------------------------------* //* * * //* * Compile Link-edit COBPARM * //* * * //* -------------------------------------------------------* //COBPARM EXEC COBUCL,CPARM1='LIST,LOAD,NODECK,PMAP,DMAP' //COB.SYSPUNCH DD DUMMY //COB.SYSIN DD DSN=CALNDR.V0R9M00.ASM(COBPARM),DISP=SHR //LKED.SYSLMOD DD DSN=XXXXXXXX.ISPLLIB(COBPARM), <-- TARGET // DISP=SHR // ______________________________________________________________________ Figure 6: $INST04 JCL a) Member $INST04 installs programs CALNDRx and COBPARM. b) Review and update JOB statement and other JCL to conform to your installation standard. c) Submit the job. d) Review job output for successful completion. +--------------------------------------------------------------------+ | Step 8. Install Programs - COBPARM program | +--------------------------------------------------------------------+ | JCL Member: CALNDR.V0R9M00.CNTL($INST40) | +--------------------------------------------------------------------+ ______________________________________________________________________ //CALNDR40 JOB (SYS),'Install xxxxxxx', <-- Review and Modify // CLASS=A, <-- Review and Modify // MSGCLASS=X, <-- Review and Modify // MSGLEVEL=(1,1),NOTIFY=&SYSUID <-- Review and Modify //* -------------------------------------------------------* //* * CALNDR for MVS3.8J TSO / Hercules * //* * * //* * JOB: $INST40 * //* * IEFBR14 * //* -------------------------------------------------------* //BR14 EXEC PGM=IEFBR14 //SYSTERM DD SYSOUT=* //SYSPRINT DD SYSOUT=* // ______________________________________________________________________ Figure 7: $INST40 JCL a) Member $INST40 installs program xxxxxxx. Note: If no $INST40 components are included for this distribution, ----- the only step in this job is an IEFBR14. b) Review and update JOB statement and other JCL to conform to your installation standard. c) Submit the job. d) Review job output for successful completion. +--------------------------------------------------------------------+ | Step 9. Install ISPF parts | +--------------------------------------------------------------------+ | JCL Member: CALNDR.V0R9M00.CNTL($INST05) | +--------------------------------------------------------------------+ ______________________________________________________________________ //CALNDR05 JOB (SYS),'Install ISPF Parts', <-- Review and Modify // CLASS=A,MSGCLASS=X, <-- Review and Modify // MSGLEVEL=(1,1),NOTIFY=&SYSUID <-- Review and Modify //* -------------------------------------------------------* //* * CALNDR in MVS3.8J TSO / Hercules * //* * * //* * JOB: $INST05 Install ISPF parts * //* * * //* * Note: Duplicate members are over-written. * //* * * //* * * //* * - Uses ISPF 2.1 product from Wally Mclaughlin * //* * - Install libraries marked... * //* * - Search for '<--TARGET' * //* * - Update install libraries per your * //* * installation standard * //* * * //* -------------------------------------------------------* /* //* -------------------------------------------------------* //* * * //* * Panel PDS Member Installation * //* * * //* * Suggested Location: * //* * DSN defined or concatenated to ISPPLIB DD * //* * for ISPF 2.x * //* * * //* * Note: If you use a new PDS, it must be defined * //* * before executing this install job AND the * //* * ISPF start-up procedure should include the * //* * new PDS in the ISPPLIB allocation step. * //* * * //* -------------------------------------------------------* //ADDPLIB EXEC PGM=IEBCOPY //SYSPRINT DD SYSOUT=* //PLIBIN DD DSN=CALNDR.V0R9M00.ISPF,DISP=SHR //PLIBOUT DD DSN=XXXXXXXX.ISPPLIB,DISP=SHR <--TARGET //SYSIN DD * COPY INDD=((PLIBIN,R)),OUTDD=PLIBOUT SELECT MEMBER=PCALNDR SELECT MEMBER=HCALNDR /* //* -------------------------------------------------------* //* * * //* * Message PDS Member Installation * //* * * //* * Suggested Location: * //* * DSN defined or concatenated to ISPMLIB DD * //* * for ISPF 2.x * //* * * //* * Note: If you use a new PDS, it must be defined * //* * before executing this install job AND the * //* * ISPF start-up procedure should include the * //* * new PDS in the ISPMLIB allocation step. * //* * * //* -------------------------------------------------------* //ADDMLIB EXEC PGM=IEBCOPY //SYSPRINT DD SYSOUT=* //MLIBIN DD DSN=CALNDR.V0R9M00.ISPF,DISP=SHR //MLIBOUT DD DSN=XXXXXXXX.ISPMLIB,DISP=SHR <--TARGET //SYSIN DD * COPY INDD=((MLIBIN,R)),OUTDD=MLIBOUT SELECT MEMBER=CLNDR0 /* //* -------------------------------------------------------* //* * * //* * CLIST PDS Member Installation * //* * * //* * Suggested Location: * //* * DSN defined or concatenated to ISPCLIB DD * //* * for ISPF 2.x * //* * * //* * Note: If you use a new PDS, it must be defined * //* * before executing this install job AND the * //* * ISPF start-up procedure should include the * //* * new PDS in the ISPCLIB allocation step. * //* * * //* -------------------------------------------------------* //ADDCLIB EXEC PGM=IEBCOPY //SYSPRINT DD SYSOUT=* //CLIBIN DD DSN=CALNDR.V0R9M00.ISPF,DISP=SHR //CLIBOUT DD DSN=XXXXXXXX.ISPCLIB,DISP=SHR <--TARGET //SYSIN DD * COPY INDD=((CLIBIN,R)),OUTDD=CLIBOUT SELECT MEMBER=CCALNDR /* // ______________________________________________________________________ Figure 8: $INST05 JCL a) Member $INST05 installs ISPF component(s). Note: If no ISPF components are included for this distribution, ----- RC = 4 is returned by the corresponding IEBCOPY step. b) Review and update JOB statement and other JCL to conform to your installation standard. c) Review and update DD statements for ISPCLIB (clist), ISPMLIB (messages), and/or ISPPLIB (panel) library names. The DD statements are tagged with '<--TARGET'. d) Submit the job. e) Review job output for successful load(s). +--------------------------------------------------------------------+ | Step 10. Configure and Sample CALNDR | +--------------------------------------------------------------------+ The purpose of this step is to execute different CALNDR components to display a yearly calendar. Each program and CLIST offer the same function, but the underlying source language is different. a) To execute the CLIST solution - From the ISPF Main Menu, enter the following command: TSO %CCALNDR To exit, use PF3. b) To execute the Assembler solution - From the ISPF Main Menu, enter the following command: TSO CALNDRA To exit, use PF3. c) To execute the COBOL solution - From the ISPF Main Menu, enter the following command: TSO CALNDRC To exit, use PF3. ________________________________________________________________________________ ------------------------ Calendar Sample using CLIST -------------------------- Command ===> Scroll ==> PAGE Dummy dates: Year: 1993 MM / DD S M T W T F S Starting ===> 01 / 01 ----------------------------- Ending ===> 12 / 31 ¦ JAN 1 2 ¦ ¦ 3 4 5 6 7 8 9 ¦ ¦ 10 11 12 13 14 15 16 ¦ ¦ 17 18 19 20 21 22 23 ¦ ¦ 24 25 26 27 28 29 30 ¦ ¦ 31 1 2 3 4 5 6 ¦ ¦ FEB 7 8 9 10 11 12 13 ¦ ----------------------------- Enter UP or DOWN command to scroll through calendar. ________________________________________________________________________________ Figure 9a: Sample PCALNDR Calendar Panel Note- solution language is display on header line +--------------------------------------------------------------------+ | Step 11. Done | +--------------------------------------------------------------------+ a) Congratulations! You completed the installation for CALNDR. +--------------------------------------------------------------------+ | Step 11. Incorporate CALNDR into ISPF UTILITY SELECTION Menu | +--------------------------------------------------------------------+ a) Not applicable. Enjoy CALNDR for ISPF 2.x on MVS 3.8J! ====================================================================== * IV. S o f t w a r e I n v e n t o r y L i s t | ====================================================================== - CALNDR.V0R9M00.ASM . CALNDRA TSO CP ASM pgm w ISPF services to display calendar . CALNDRC TSO CP COBOL pgm w ISPF services to display calendar . COBPARM TSO CP COBOL pgm to determine PARMtype - CALNDR.V0R9M00.CLIST . README Dummy member, this is intentional - CALNDR.V1R1M00.CNTL . $INST00 Define Alias for HLQ CALNDR . $INST01 Load CNTL data set from distribution tape (HET) . $INST02 Load other data sets from distribution tape (HET) . $INST03 Install TSO Parts . $INST04 Install CALNDRx CPs . $INST05 Install ISPF Parts . $INST40 Install xxxxxxx . $RECVXMI Receive XMI SEQ to MVS PDSs via RECV370 . DSCLAIMR Disclaimer . PREREQS Required User-mods . README Documentation and Installation instructions - CALNDR.V0R9M00.HELP . README Dummy member, this is intentional - CALNDR.V0R9M00.ISPF . CCALNDR TSO CLIST w ISPF services to display year calender . HCALNDR Calendar Help Panel . PCALNDR Calendar Panel . CALNR00 Messages - CALNDR.V0R9M00.MACLIB . README Dummy member, this is intentional
Closing
Use CALNDR to review and encourage use different of programming languages to conveniently develop ISPF Dialogues on your MVS3.8J / ISPF 2.x system.
Time permitting, I may tackle a C solution using GCC and/or JCC.
Please use the comment box below or the contact us link on the menu bar to communicate any suggestions, improvements, corrections or issues.
Thank You.
Version History
Date | Version | Description |
2019-02-11 | 0.9.00 | ♦ Initial version released to MVS 3.8J hobbyist public domain |