Article View: comp.lang.asm370
Article #657Re: Time conversion
From: Sidney Bytheway
Date: Tue, 09 Apr 1991 22:20
Date: Tue, 09 Apr 1991 22:20
178 lines
8185 bytes
8185 bytes
In article <9104091932.AA01859@ucbvax.Berkeley.EDU> IBM 370 Assembly
Programming Discussion List <ASM370@OHSTVMA.BITNET> writes:
>Does anyone know how to convert the SNNTTIME field in dsect
>DFHSNNT to a HHMMSS format that is easily usable for display
>purposes? I think its in STCK format?
>
>
> Paul Myers (zprm@aacc)
> Anne Arundel Community College
> 301-541-2414
The following is a routine we use at the University of Utah to convert
STCK time to a more managable format. From here you can use CVD and UNPK
to get it into printable form.
-------- example use of dptodcnv ---------
*
MMDDYY DS 0CL6
MONTH DS CL2
DAY DS CL2
YEAR DS CL2
PWORK DS D
SYSDATE DS D
STORCLK DS 0CL32
CLKYY DS F
CLKMM DS F
CLKDD DS F
DS 5F
*
STCK SYSDATE
LINK EP=DPTODCNV,PARAM=(SYSDATE,STORCLK),VL=1
L R3,CLKMM
CVD R3,PWORK
UNPK MONTH,PWORK
OI MONTH+1,X'F0'
*
-------- example use of dptodcnv ---------
DPTODCNV TITLE 'DPTODCNV - CONVERT TOD CLOCK VALUE'
*
* DPTODCNV - CONVERT TOD CLOCK VALUE. THIS PROGRAM IS CALLED USING
* STANDART LINKAGE CONVENTIONS TO CONVERT AN 8-BYTE TIME OF
* DAY CLOCK VALUE TO YEAR, MONTH, DAY, HOUR, MINUTE, AND
* MICROSECONDS.
*
* ON ENTRY, REGISTER 1 HAS THE ADDRESS OF A PARAMETER LIST.
* THE FIRST WORD OF THE PARAMETER LIST IS THE ADDRESS OF THE
* 8-BYTE TIME OF DAY CLOCK VALUE; THE SECOND WORD HAS THE
* ADDRESS OF THE 8-WORD RETURN AREA. THIS PROGRAM WILL SET
* THE RETURN AREA TO THE VALUES:
*
* 4-BYTE BINARY YEAR (0 = THE YEAR 1900)
* 4-BYTE BINARY MONTH (1 TO 12)
* 4-BYTE BINARY DAY OF MONTH (1 TO 31)
* 4-BYTE BINARY HOUR OF DAY (00 TO 23)
* 4-BYTE BINARY MINUTE OF HOUR (00 TO 59)
* 4-BYTE BINARY MICROSECOND OF MINUTE (00 TO 59999999)
* 4-BYTE BINARY DAY OF WEEK (0 TO 6; 0=SUNDAY)
* 4-BYTE BINARY DAY OF YEAR (1 TO 366)
*
* ON RETURN, THIS PROGRAM SETS REGISTER 15 TO 0 (TO AVOID
* SOME PROBLEMS WITH THE COBOL RETURN-CODE REGISTER).
*
* BY M. QUINLAN - UNIVERSITY OF UTAH
*
*
EJECT
DPTODCNV PGMSTART SA=SA,PGMBASE=REG12,PARMREG=REG11
EJECT
*
* CNVRTTOD - CONVERT THE TOD VALUE.
*
* THIS CODE IS DERIVED FROM THE "TODEBCD" ROUTINE IN THE
* DFHXMOLS PROGRAM DISTRIBUTED WITH CICS RELEASE 1.5.
*
CNVRTTOD EQU *
L REG14,0(REG11) GET ADDRESS OF TOD VALUE
SPACE 1
* CONVERT TOD VALUE TO DAYS SINCE DAY 0, HOURS IN DAY, MINUTES IN HOUR,
* AND MICROSECONDS IN MINUTE. DAY 0 IS JAN 1, 1900.
LM REG0,REG1,0(REG14) GET TOD VALUE
SRDL REG0,12 CONVERT VALUE TO MICROSECONDS
D REG0,=F'60000000' DIVIDE BY # MICROSEC IN 1 MINUTE
LR REG10,REG0 R10=ODD MICROSEC LESS THAN A MINUTE
SLR REG0,REG0 CLEAR FOR DIVIDE
D REG0,=F'60' DIVIDE MINUTES BY 60 TO GET HOURS
LR REG9,REG0 R9=ODD MINUTES LESS THAN 1 HOUR
SLR REG0,REG0 CLEAR FOR DIVIDE
D REG0,=F'24' DIV HRS BY 24 TO GET DYS & ODD HRS
LR REG8,REG0 R8=ODD HOURS LESS THAN 1 DAY
SPACE 1
* REG1 HAS THE NUMBER OF DAYS SINCE DAY 0.
SPACE 1
* COMPUTE THE DAY OF THE WEEK
LA REG3,1(,REG1) R3=DAY COUNT SINCE SUNDAY LONG PAST
SLR REG2,REG2 CLEAR FOR DIVIDE
D REG2,=F'7' R2=DAY OF WEEK (0=SUNDAY -> 6=SAT.)
ST REG2,DAYOFWK# SAVE DAY OF WEEK
SPACE 1
* NOW COMPUTE THE YEAR NUMBER; REG1 HAS NUMBER OF DAYS SINCE DAY 0.
SLR REG7,REG7 ASSUME NOT A LEAP YEAR FOR NOW
S REG1,=F'365' SUBTRACT # OF DAYS IN YR 1900
BNM CVTOD010 BRANCH IF YEAR NOT = 1900
* TREAT THE YEAR 1900 AS A SPECIAL CASE
LA REG2,365(,REG1) SET DAY OF YEAR (RELATIVE TO 0)
SLR REG5,REG5 SET YEAR = 1900
B CVTOD030 GO CALC DAY OF YEAR
* NOT THE YEAR 1900
CVTOD010 EQU * NOT THE YEAR 1900
SLR REG0,REG0 CLEAR FOR DIVIDE
D REG0,=F'1461' DIV DYS BY DYS IN 4 YRS ((4*365)+1)
SLL REG1,2 MULT BY 4 TO GET YEAR NUMBER
LA REG5,1(,REG1) R5=YRS LESS ODD YRS SINCE 1900
LR REG3,REG0 R3=REMAINING DAYS IN 4-YR PERIOD
SLR REG2,REG2 CLEAR FOR DIVIDE
D REG2,=F'365' GET # ODD YRS AND # ODD DAYS
CL REG3,=F'3' CHECK FOR LEAP YEAR
BL CVTOD020 BRANCH IF NOT A LEAP YEAR
LA REG7,1 ADJUST EXTRA DAY REGISTER FOR LEAPYR
BE CVTOD020 BRANCH IF NOT LAST DAY OF LEAP YEAR
BCTR REG3,0 DECR YEAR TO FORCE IT = 3
LA REG2,365 SET FOR LAST DAY OF YR (REL. TO 0)
CVTOD020 EQU *
ALR REG5,REG3 R5 HAS YEARS SINCE 1900
EJECT
CVTOD030 EQU *
* R2=DAY OF YEAR (RELATIVE TO ZERO); R7=1 IF LEAP YEAR, 0 OTHERWISE
* COMPUTE THE MONTH AND DAY OF MONTH. THIS CODE USES SOME MAGIC
* NUMBERS TO FIGURE OUT WHAT THE MONTH AND DAY OF MONTH ARE; IT IS
* COPIES FROM THE DFHXMOLS PROGRAM.
LA REG2,1(,REG2) MAKE DAY OF YR RELATIVE TO 1
ST REG2,DAYOFYR SAVE THE DAY OF THE YEAR
LA REG1,59(,REG7) R1=60 IF LEAPYR; 59 OTHERWISE
CLR REG2,REG1 IS THE DATE PAST FEBRUARY?
BNH CVTOD040 NO: LET DATE STAND AS IS
LA REG2,2(,REG2) SET FOR NON-LEAPYEAR INITIALLY
SLR REG2,REG7 SUBTRACT 1 IF A LEAP YEAR
CVTOD040 EQU *
LA REG3,91(,REG2) R3=DAY OF YEAR + 91
LR REG7,REG3 COPY FOR LATER
M REG2,=F'2145' MAGIC NUMBER
SRL REG3,16 DIV BY 65536 TO GET MONTH NUMBER+2
LR REG6,REG3 R6=MONTH NUMBER + 2
S REG6,=F'2' R6=MONTH NUMBER
M REG2,=F'1955' ANOTHER MAGIC NUMBER
SRL REG3,6 DIV BY 64 GET TOT DYS IN PAST MON+91
SLR REG7,REG3 R7 = DAY OF MONTH
EJECT
*
* REG5 = YEAR NUMBER (0 = 1900)
* REG6 = MONTH NUMBER (1 TO 12)
* REG7 = DAY OF MONTH (1 TO 31)
* REG8 = HOUR OF DAY (0 TO 23)
* REG9 = MINUTE OF HOUR (0 TO 59)
* REG10 = MICROSECONDS OF MINUTE (0 TO 59999999)
* DAYOFWK# = DAY OF WEEK (0 TO 6; 0=SUNDAY)
* DAYOFYR = DAY OF YEAR (1 TO 366)
*
SPACE 1
* RETURN THE TIME VALUES TO THE CALLER
L REG1,4(,REG11) GET RETURN AREA ADDRESS
STM REG5,REG10,0(REG1) SET RETURN AREA VALUES
MVC 24(4,REG1),DAYOFWK# RETURN DAY OF WEEK VALUE
MVC 28(4,REG1),DAYOFYR RETURN DAY OF YEAR VALUE
SPACE 1
* RETURN TO THE CALLER
L REG13,4(,REG13) RESTORE OLD SAVE AREA
RETURN (14,12),RC=0 RETURN TO THE CALLER
EJECT
*
* DATA AREAS
*
LTORG
SA DC 9D'0'
DAYOFWK# DC F'-1'
DAYOFYR DC F'-1'
END
Technical Details
Message-ID:
<9104092259.AA09362@ucbvax.Berkeley.EDU>Path:
arc1-ca.pugleaf.net!utzoo!utgpu!news-server.csri.toronto.edu!rpi!zaphod.mps.ohio-state.edu!mips!pacbell.com!ucsd!ucbvax!CS.UTAH.EDU!bythewayShow Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!utzoo!utgpu!news-server.csri.toronto.edu!rpi!zaphod.mps.ohio-state.edu!mips!pacbell.com!ucsd!ucbvax!CS.UTAH.EDU!bytheway
From: bytheway@CS.UTAH.EDU (Sidney Bytheway)
Newsgroups: comp.lang.asm370
Subject: Re: Time conversion
Message-ID: <9104092259.AA09362@ucbvax.Berkeley.EDU>
Date: 9 Apr 91 22:20:16 GMT
Sender: daemon@ucbvax.BERKELEY.EDU
Reply-To: IBM 370 Assembly Programming Discussion List
<ASM370@OHSTVMA.BITNET>
Distribution: inet
Organization: The Internet
Lines: 178