; AUTHOR:- STEPHEN MENDES                                  FILE  "DATEF.ASM"
;
;    void rdate (char *, char *)
;
;    PARAMETERS:- DATE, TIME.
;
;  RECEIVES CHARACTER POINTERS FROM C AND WRITES CURRENT DATE AND TIME INTO
;  C ARRAYS.
;
		.MODEL SMALL
		.CODE
		PUBLIC	_rdate
_rdate		PROC
		PUSH	BP
		MOV	BP,SP
		MOV	AH,2AH		;GET DATE FUNCTION
		INT	21H
		PUSH	DX		;MONTH IN DH DAY IN DL
		MOV	AX,CX		;YEAR IN CX
		MOV	BX,[BP+4]	;ADDRESS OF DATE STRING ON THE STACK
		ADD	BX,8		;LSD OF DAY + 1

		MOV	BYTE PTR [BX],0	;NULL FOR TERMINATING C STRING
		DEC	BX

		CALL	BXASCN
		POP	AX		;RESTORE DX (MONTH & DAY) TO AX
		PUSH	AX
		XOR	AH,AH		;DAY IN AX

		MOV	BYTE PTR [BX],'-'	;INSERT SEPARATOR IN DATE STRING
		DEC	BX

		CALL	BXASCN		;CONVERT & STORE DAY
		POP	AX
		MOV	AL,AH
		XOR	AH,AH		;MONTH IN AX

		MOV	BYTE PTR [BX],'-'
		DEC	BX

		CALL	BXASCN		;CONVERT & STORE MONTH

		MOV	AH,2CH		;GET TIME FUNCTION
		INT	21H
		PUSH	CX		;HOURS IN CH MINUTES IN CL
		MOV	AL,DH		;SECONDS IN AX
		XOR	AH,AH
		MOV	BX,[BP+6]	;ADDRESS TIME STRING ON THE STACK
		ADD	BX,8		;LSD OF SECONDS + 1

		MOV	BYTE PTR [BX],0	;NULL FOR TERMINATING C STRING
		DEC	BX

		CALL	BXASCN
		POP	AX
		PUSH	AX
		XOR	AH,AH		;MINUTES IN AX

		MOV	BYTE PTR [BX],':'	;TIME SEPARATOR TO TIME STRING
		DEC	BX

		CALL	BXASCN
		POP	AX
		MOV	AL,AH
		XOR	AH,AH		;HOURS IN AX

		MOV	BYTE PTR [BX],':'
		DEC	BX

		CALL	BXASCN
		POP	BP
		RET
_rdate		ENDP
BXASCN		PROC	NEAR

;THIS ROUTINE EXTRACTS THE TWO LEAST SIGNIFICANT DIGITS (TO BASE TEN) OF THE
;NUMBER IN THE AX AND CONVERTS THEM TO ASCII CHARACTERS, STORING THEM IN
;THE AREA POINTED TO BY BX

;DIVIDE BY 10 (GIVES LS DIGIT AS REMAINDER)

		MOV	DL,10		
		MOV	CX,2		;ONLY GETTING 2 DIGITS
	NXTDIG:	DIV	DL
		ADD	AH,30H		;REMAIDER IN AH, CONVERT TO CHARACTER
		MOV	[BX],AH		;STORE AS LS DIGIT
		DEC	BX		;MOVE TO NEXT HIGHER ORDER DIGIT
		XOR	AH,AH		;AH BECOMES MSB FOR DIVIDEND
		LOOP	NXTDIG
		RET
BXASCN		ENDP
		END
