.TITLE DATE .SBTTL DETERMINE CREATION DATE AND TIME ;************************************************************************ ; ; DETERMINE CREATION DATE AND TIME FROM THE 1ST RECORD OF CIL ; INPUT R1 = ADDRESS OF DATE/TIME STRING ; ;************************************************************************ DATE:: PUSH R2 ;SAVE REGS PUSH R3 ; ; NOW CALCULATE TIME ADD #11.,R1 ;SKIP UP TO TIME SECTION MOV (R4)+,R3 ;GET DOUBLE WORD TIME CALL DCHK ;CHECK FOR END OF BUFFER MOV (R4)+,R2 ; CALL DCHK ;CHECK FOR END OF BUFFER PUSH R4 ;SAVE DIV #60.,R2 ;MAKE TICKS SECONDS MOV R2,R3 ;GET TOTAL SECONDS CLR R2 ;INIT DIV #60.,R2 ;SEPARATE SECONDS AND MINUTES MOV R2,R4 ;SAVE MINUTES MOV R3,R2 ;GET SECONDS DECASC R2,R3 ;CONVERT TO ASCII MOVB R2,6(R1) ;STORE SECONDS MOVB R3,7(R1) ; MOV R4,R3 ;GET MINUTES BACK CLR R2 ; DIV #60.,R2 ;SEPARATE MINUTES AND HOURS MOV R2,R4 ;SAVE HOURS MOV R3,R2 ;GET MINUTES DECASC R2,R3 ;CONVERT TO ASCII MOVB R2,3(R1) ;STORE MINUTES MOVB R3,4(R1) ; MOV R4,R2 ;GET HOURS DECASC R2,R3 ;CONVERT TO ASCII MOVB R2,(R1) ;STORE HOURS MOVB R3,1(R1) ; .PAGE ; NOW CALCULATE DATE SUB #11.,R1 ;GO TO DATE POP R4 ; MOV (R4)+,R3 ;GET DATE WORD CALL DCHK ;CHECK FOR END OF BUFFER PUSH R4 ;SAVE AGAIN MOV YEAR,R2 ;INIT DIV #1000.,R2 ;SEPARATE DAYS AND YEARS MOV #28.,MONTH+4 ;ASSUME NORMAL YEAR MOV R2,R4 ;GET YEAR BIC #177774,R4 ;ONLY 2 BITS CMP #3,R4 ;LEAP YEAR? BNE .+6 ;NO INC MONTH+4 ;YES, 29 DAYS IN FEB ADD #70.,R2 ;YEAR BASED ON 1970 MOV R3,R4 ;SAVE DAYS TEMP DECASC R2,R3 ;CONVERT YEAR TO ASCII MOVB R2,7(R1) ;STORE YEAR MOVB R3,10(R1) ; MOV R4,R3 ;RECOVER DAYS MOV #MONTH,R4 ;PTR TO MONTH TABLE 1$: SUB (R4)+,R3 ;COUNT OFF DAYS IN MONTHS CMP R3,(R4) ;DOWN TO A PARTIAL MONTH? BGT 1$ ;NO, SO LOOP SUB #MONTH,R4 ;CALC MONTH NUMBER ASR R4 ; DEC R4 ; MOV R3,R2 ;GET DAYS IN THIS MONTH DECASC R2,R3 ;CONVERT DAYS TO ASCII MOVB R2,(R1) ;STORE DAYS MOVB R3,1(R1) ; MOV R4,R3 ;GET MONTH NUMBER MUL #3,R3 ;GET OFFSET INTO MONTH STRING TABLE ADD #MONSTR,R3 ; MOVB (R3)+,3(R1) ;SAVE MONTH STRING MOVB (R3)+,4(R1) ; MOVB (R3),5(R1) ; POP R4 ;RETRIEVE REGS POP R3 ; POP R2 ; RETURN .PAGE ;*************************************************************************** ; ; GET A DATE WORD AND TIME DOUBLE WORD FROM CURRENT DATE AND TIME ; R4 = PTR TO TIME & DATE STORAGE ; ;*************************************************************************** GDATE:: GTIM$C ARG ;GET DATE AND TIME IN ARG BLOCK DSWERR ;HOPEFULLY NO ERRORS ; CALCULATE THE TIME DOUBLE WORD MOV ARG4,R3 ;GET THE HOURS CLR R2 ;INIT DMUL #60. ;MULTIPLY BY 60. ADD ARG5,R3 ;GET TOTAL MINUTES DMUL #60. ;MULTIPLY BY 60. ADD ARG6,R3 ;GET TOTAL SECONDS DMUL ARG8 ;MAKE TICKS ADD ARG7,R3 ;GET TOTAL TICKS MOV R3,(R4)+ ;SAVE TIME MOV R2,(R4)+ ; ; CALCULATE THE DATE WORD MOV #28.,MONTH+4 ;ASSUME NOT A LEAP YEAR MOV ARG2,R3 ;GET MONTH CLR R2 ;INIT MOV #MONTH,R0 ;PTR 1$: ADD (R0)+,R2 ;TOTAL DAYS OF THE PREVIOUS MONTHS SOB R3,1$ ;LOOP ADD ARG3,R2 ;GET TOTAL DAYS MOV ARG,R3 ;CHECK YEAR FOR LEAP YEAR BIC #177774,R3 ; CMP #3,R3 ;LEAP YEAR? BNE 2$ ;BR, IF NO CMP ARG2,#2 ;ARE WE PAST FEB.? BLE 2$ ;NO, SO NO DIFFERENCE INC R0 ;ADD IN EXTRA DAY IN LEAP YEAR 2$: MOV ARG,R3 ;GET YEAR SUB #70.,R3 ;BASED ON 1970 MUL #1000.,R3 ;SHIFT OVER ADD R3,R2 ;FORM DATE WORD MOV R2,(R4)+ ;STORE IT RETURN ;*************************************************************************** ; ; MONTH DATA TABLES ; ;*************************************************************************** MONTH: .WORD 0,31.,28.,31.,30.,31.,30.,31.,31.,30.,31.,30.,31. MONSTR: .ASCII /JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC/ .EVEN .END