Google
 

Trailing-Edge - PDP-10 Archives - BB-H506D-SM_1983 - cobol/source/today.mac
There are 16 other files named today.mac in the archive. Click here to see a list.
; UPD ID= 2671 on 3/23/80 at 11:38 AM by NIXON                          
TITLE	TODAY. - DAY, DATE, AND TIME FOR COBOL
SUBTTL	D. M. NIXON/DMN	30-DEC-78



;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
;  OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
;
;COPYRIGHT (C) 1978, 1981 BY DIGITAL EQUIPMENT CORPORATION


SEARCH	INTERM,UUOSYM
IFN TOPS20,<SEARCH MONSYM>
SALL

TWOSEG
RELOC	400000


AC0=0				;YYMMDD
AC1=1				;HHMMSS
AC2=2
AC3=3
AC4=4				;TEMP
AC5=AC4+1			;TEMP
AC6=AC5+1			;TEMP
PP=17				;
SUBTTL	TODAY.

ENTRY	TODAY.,TODA1.,TODA2.

;CALLED BY PUSHJ PP,TODAY.
;EXIT WITH DATE IN AC0 YYMMDD
;	   TIME IN AC1 HHMMSS

IFN MCS,<
	ENTRY	MCSTIM		;CMCS (LCM) USES THIS ROUTINE
>
TODAY.:	CALLI	AC4,14		;DATE UUO ((Y-64)*12+(M-1))*31+D-1
TODA1.:	IDIVI	AC4,^D31	;PICK OFF THE DAY
	ADDI	AC5,1		;MAKE IT RIGHT
	PUSHJ	PP,TODA4.	;RETURNS TWO SIXBIT NUMBERS
	DPB	AC5,DAY		;XXXXDD
	IDIVI	AC4,^D12	;PICK OFF THE MONTH
	ADDI	AC5,1		;MAKE IT RIGHT
	PUSHJ	PP,TODA4.	;RETURNS TWO SIXBIT NUMBERS
	DPB	AC5,MONTH	;XXMMDD
	MOVEI	AC5,^D64	;GET THE BASE YEAR
	ADD	AC5,AC4		;PLUS YEARS SINCE THEN
	CAIL	AC5,^D100	;CK FOR YEAR 2000+
	SUBI	AC5,^D100	;IF SO, CONVERT TO 00+
	PUSHJ	PP,TODA4.	;SIXBIT
	DPB	AC5,YEAR	;YYMMDD-DATE FINISHED

	CALLI	AC4,23		;TIME UUO GETS TIME IN MILLISECONDS
	IDIVI	AC4,^D1000	;CONVERT TO SECONDS
MCSTIM:	PUSHJ	PP,TODA3.	;PICK OFF SECONDS IN SIXBIT
	DPB	AC5,SECOND	;XXXXSS
TODA2.:	PUSHJ	PP,TODA3.	;PICK OFF MINUTES IN SIXBIT
	DPB	AC5,MINUTE	;XXMMSS
	MOVE	AC5,AC4		;WHAT'S LEFT IS HOURS
	PUSHJ	PP,TODA4.	;TO SIXBIT
	DPB	AC5,HOUR	;HHMMSS-TIME FINISHED
	POPJ	PP,		;RETURN

TODA3.:	IDIVI	AC4,^D60	;DIVIDE BY 60 FOR TIME
TODA4.:	IDIVI	AC5,^D10	;DIVIDE OUT A DECIMAL NUMBER
	LSH	AC5,6		;MAKE ROOM FOR THE REMIANDER
	ADDI	AC5,2020(AC6)	;CONVERT TO SIXBIT
	POPJ	PP,		;RETURN
SUBTTL	DATE., TIME.

ENTRY	DATE., TIME.,TIME1.

;CALLED BY PUSHJ PP,DATE.
;EXIT WITH DATE IN AC0 YYMMDD

DATE.:	CALLI	AC4,14		;DATE UUO ((Y-64)*12+(M-1))*31+D-1
	IDIVI	AC4,^D31	;PICK OFF THE DAY
	ADDI	AC5,1		;MAKE IT RIGHT
	PUSHJ	PP,TODA4.	;RETURNS TWO SIXBIT NUMBERS
	DPB	AC5,DAY		;XXXXDD
	IDIVI	AC4,^D12	;PICK OFF THE MONTH
	ADDI	AC5,1		;MAKE IT RIGHT
	PUSHJ	PP,TODA4.	;RETURNS TWO SIXBIT NUMBERS
	DPB	AC5,MONTH	;XXMMDD
	MOVEI	AC5,^D64	;GET THE BASE YEAR
	ADD	AC5,AC4		;PLUS YEARS SINCE THEN
	CAIL	AC5,^D100	;CK FOR YEAR 2000+
	SUBI	AC5,^D100	;IF SO, CONVERT TO 00+
	PUSHJ	PP,TODA4.	;SIXBIT
	DPB	AC5,YEAR	;YYMMDD-DATE FINISHED
	POPJ	PP,


;CALLED BY PUSHJ PP,TIME.
;EXIT WITH TIME IN AC0 HHMMSS
;		   AC1 CC


TIME.:	CALLI	AC4,23		;TIME UUO GETS TIME IN MILLISECONDS
TIME1.:	IDIVI	AC4,^D10	;CONVERT TO HUNDREDTHS OF SECONDS
	IDIVI	AC4,^D100	;GET HUNDREDTHS
	PUSHJ	PP,TODA4.	;RETURN TWO SIXBIT NUMBERS
	DPB	AC5,HSECS	;CCXXXX
	PUSHJ	PP,TODA3.	;PICK OFF SECONDS IN SIXBIT
	DPB	AC5,SECS	;XXXXSS
	PUSHJ	PP,TODA3.	;PICK OFF MINUTES IN SIXBIT
	DPB	AC5,MINS	;XXMMSS
	MOVE	AC5,AC4		;WHAT'S LEFT IS HOURS
	PUSHJ	PP,TODA4.	;TO SIXBIT
	DPB	AC5,HOURS	;HHMMSS-TIME FINISHED
	POPJ	PP,		;RETURN
SUBTTL	DAY.

ENTRY	DAY.

;CALLED BY PUSHJ PP,DAY.
;RETURNS WITH DATE IN AC0
;AS SIXBIT   YYDDD

IFN EBCLBL,<
	ENTRY	DAY.SK
DAY.SK:	AOS	(PP)		;TAKE A SKIP EXIT
>
IFE TOPS20,<

DAY.:	SETZ	AC0,		;
	CALLI	AC4,14		;GET DATE
	IDIVI	AC4,^D31	;PICK OFF DAY-1
	ADDI	AC5,1		;DAY OF THE MONTH
	MOVE	AC1,AC5		;SAVE THE DAY
	IDIVI	AC4,^D12	;PICK OFF MONTH - 1
	ADDI	AC4,^D64	;GET YEAR IN AC4
	PUSH	PP,AC4		;SAVE YEAR INCASE LEAP
	EXCH	AC4,AC5		;SWAP WITH MONTH INDEX
	PUSHJ	PP,TODA4.	;STORE THE SIXBIT YEAR
	DPB	AC5,YEAR	;  IN AC0
	ADD	AC1,DAYTAB(AC4)	;ADD PREVIOUS DAYS TO DAY OF MONTH
	POP	PP,AC5		;RECOVER YEAR
	CAIGE	AC4,2		;PAST FEBRUARY?
	JRST	DAY.A		;NO
	MOVE	AC4,AC5		;YES
	IDIVI	AC4,4		;CHECK FOR LEAP YEAR
	CAIG	AC5,0		;LEAP YEAR?
	ADDI	AC1,1		;YES
DAY.A:	MOVE	AC4,AC1		;
	IDIVI	AC4,^D10	;DIVIDE OUT THE
	MOVE	AC1,AC5		;  UNITS AND
	IDIVI	AC4,^D10	;  THE TENS
	LSH	AC4,6		;SHIFT OVER THE HUNDREDS
	ADD	AC5,AC4		;ADD IN THE TENS
	LSH	AC5,6		;MAKE ROOM FOR THE UNITS
	ADDI	AC5,'000'(AC1)	;ADDEM IN AND SIXBITIZE
	LSH	AC5,6		;GET THEM NEXT TO THE YEAR POSITION
	ADD	AC0,AC5		;   YYDDD
	POPJ	PP,

DAYTAB:	EXP	^D0	;JAN
	EXP	^D31	;FEB
	EXP	^D59	;MAR
	EXP	^D90	;APR
	EXP	^D120	;MAY
	EXP	^D151	;JUN
	EXP	^D181	;JUL
	EXP	^D212	;AUG
	EXP	^D243	;SEP
	EXP	^D273	;OCT
	EXP	^D304	;NOV
	EXP	^D334	;DEC
>
IFN TOPS20,<
DAY.:	SETO	AC2,		;GET CURRENT TIME
	MOVSI	AC4,(IC%JUD)	;IN JULIAN FORMAT
	ODCNV%			;TIME
	HLRZ	AC3,AC2		;GET YEAR
	IDIVI	AC3,^D100	;GET RID OF 1900
	IDIVI	AC4,^D10	;INTO TENS AND UNITS
	LSH	AC4,6		;MAKE SPACE
	ADDI	AC4,' 00'(AC5)	;SIXBITIZE YEAR
	HRLZ	AC0,AC4		;PUT YEAR IN LHS OF AC0
	HRRZ	AC2,AC2		;DAY ONLY
	IDIVI	AC2,^D100	;HUNDREDS, REMAINDER IN AC3
	IDIVI	AC3,^D10	;TENS AND UNITS
	LSH	AC2,^D12	;MAKE SPACE
	LSH	AC3,6		;...
	ADD	AC3,AC4		;TENS AND UNITS
	ADDI	AC2,'000'(AC3)	;SIXBITIZE DAY
	HRR	AC0,AC2		;DAY IN RHS
	LSH	AC0,6		;LEFT JUSTIFY
	POPJ	PP,
>
SUBTTL	CONSTANTS AND POINTERS


YEAR:	POINT	12,AC0,11
MONTH:	POINT	12,AC0,23
DAY:	POINT	12,AC0,35
HOUR:	POINT	12,AC1,11
MINUTE:	POINT	12,AC1,23
SECOND:	POINT	12,AC1,35

HOURS==YEAR
MINS==MONTH
SECS==DAY
HSECS==HOUR

END