;PROGRAM TO CONVERT RSX DATE TO DAY OF WEEK ; ;CALLING PROCEEDURE: ; ;DAY MM/DD/YY (TO GET DAY OF ANY DATE) ;OR ;DAY (TO GET CURRENT DAY) ; ; ;PROGRAM RETURNS DAY OF WEEK (0=SUNDAY) IN STATUS RETURNED AFTER SPAWN ; ;A CLUDGE FOR USE WITH BASIC, ETC ; .MCALL GMCR$,GTIM$,EXST$,DIR$ .PAGE DAYOFW:: DIR$ #GETMCR ;GET MCR COMMAND LINE CMP @#0,#12. ;FULL DATE SPECIFIED BEQ DATE ;YES, CALC HIM NODATE: DIR$ #GETTIM ;NO FILL IN TODAY IN TIME BUFFER BR CALC ;AND CALCULATE DAY OF WEEK DATE: MOV #GETMCR+6,R0 ;POINT TO MM/DD/YY STRING IN COMMAND LINE JSR PC,$CDTB ;CONVERT MONTH CMP R2,#'/ ;TERMINATED ON "/" BNE NODATE ;IF NOT, GIVE TODAYS DATE MOV R1,TIMBUF+2 ;PUT MONTH IN BUFFER JSR PC,$CDTB ;CONVERT DAY CMP R2,#'/ ;TERMINATED ON "/" ? BNE NODATE ;IF NOT, GIVE TODAY'S DATE MOV R1,TIMBUF+4 ;PUT DAY IN BUFFER JSR PC,$CDTB ;CONVERT YEAR MOV R1,TIMBUF ;ASSUME YEAR OK CALC: MOV #TIMBUF,R1 ;POINT TO TIME BUFFER BIT #3,(R1) ;IS YEAR DIVISIBLE BY 4? BNE NOTLPY ;NO ITS NOT LEAPYEAR INCB DAYSMO+2 ;INCREMENT # OF DAYS IN FEB TO 29 NOTLPY: CLR R5 ;CLEAR FOR DAY OF YEAR ADDITION MOV 2(R1),R2 ;# OF CURRENT MONTH IN R2 MOV #DAYSMO,R3 ;USE R3 AS POINTER ADDAMO: MOVB (R3)+,R4 ;GET # OF DAYS IN R4 ADD R4,R5 ;ADD TO DATE SOB R2,ADDAMO ;IF NOT DONE, DO ANOTHER ADD 4(R1),R5 ;NOW ADD DAY TO R5 MOVB #28.,DAYSMO+2 ;SET FEB BACK TO 28 FOR NEXT TIME ;NOW HAVE JULIAN DAY OF YEAR IN R5 MOV (R1),R3 ;YEAR IN R3 MUL #365.,R3 ;COMPUTE 365.25 * YEAR MOV R3,R4 ;HAVE 365. MOV (R1),R3 ASH #-2,R3 ;.25 TIMES YEAR ADD R3,R4 ;HAVE 365.25 * YEAR IN R4 ADD R4,R5 ;NOW HAVE 365.25*YEAR + DAY IN R5 CLR R4 ;FOR DIVIDE BIT #3,(R1) ;LEAP YEAR ? BNE 1$ ;BR IF NOT DEC R5 ;PATCH FOR LEAP YEAR 1$: DIV #7,R4 ;DIVIDE MODULO 7 ;HAVE DAY OF WEEK IN R5 MOV R5,EXIT+E.XSTS ;RETURN DAY OF WEEK AS STATUS DIR$ #EXIT ;AND EXIT .PAGE ;TABLE (BYTE OF # OF DAYS TO ADD FOR EACH (COMPLETED) MONTH ; DAYSMO: .BYTE 0.,31.,28.,31.,30.,31.,30.,31.,31.,30.,31.,30. ; ;DIRECTIVE PARAMETER BLOCKS EXIT: EXST$ EX$SUC GETMCR: GMCR$ ; GETTIM: GTIM$ TIMBUF ; TIMBUF: .BLKW 8. .END DAYOFW