summaryrefslogtreecommitdiff
path: root/ConvertDate.S
blob: bd0353a65aa0095fefdb864db5521477f1f33042 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
**************************************************************************
**                                                                      **
**   ConvertDate  -  DateStamp in Klartext umwandeln (wie CLI's DATE)   **
**                   Beispiel: "Wednesday 24-Dec-1986 06:15:42"         **
**                                                                      **
**   Created: 14-Mar-89 CHW                    Last update: 25-Jun-89   **
**                                                                      **
**************************************************************************
**                                                                      **
**   Parameter :  A0.L :  Zeiger auf struct DateStamp                   **
**                A1.L :  Zeiger auf Ausgabepuffer (min. 32 Bytes)      **
**   Resultat  :  -                                                     **
**                                                                      **
**************************************************************************

		IDNT	ConvertDate
		SECTION	text,CODE

		INCLUDE	"dos/dos.i"


		XREF	_sprintf

		XDEF	@ConvertDate


@ConvertDate:	movem.l	d1-d4/a0-a2,-(SP)

	; Tag berechnen

		move.l	(a0),d2			; D2 :  Tag
		move.l	d2,d0			; Tag
		addq.l	#1,d2			; ist halt so ...
		moveq.l	#0,d3			; D3 :  Monat
		move.l	#1978,d4		; D4 :  Jahr

		divu	#7,d0
		swap	d0			; Tag MOD 7
		mulu	#10,d0			; Index in Tabelle
		lea	DayName(PC),a2
		adda.w	d0,a2
1$:		move.b	(a2)+,(a1)+		; Wochentag ausgeben
		bne.b	1$
		move.b	#' ',-1(a1)

2$:		lea	MonthTab(PC),a2
3$:		moveq.l	#0,d1
		move.b	(a2)+,d1		; Anzahl Tage im nächsten Monat
		bne.s	4$
		addq.l	#1,d4			; INC Jahr
		moveq.l	#0,d3			; Monat resetten
		bra.s	2$			; ---> nochmal
4$:
		cmpi.b	#28,d1			; Februar ?
		bne.s	5$			; nein --->
		moveq.l	#3,d0
		and.l	d4,d0			; Schaltjahr ?
		bne.s	5$			; nein --->
		addq.l	#1,d1			; sonst INC Monatstage
5$:
		cmp.l	d1,d2			; Mehr Tage als dieser Mt ?
		ble.s	6$			; nein --->
		sub.l	d1,d2
		addq.l	#1,d3			; INC Monat
		bra.s	3$			; ---> loop
6$:
		move.l	d2,d0			; Tag
		bsr	out2			; %02d ausgeben
		move.b	#'-',(a1)+

		lsl.w	#2,d3			; *4 für Index
		lea	MonthName(PC,d3.w),a2
7$:		move.b	(a2)+,(a1)+		; Monatsname ausgeben
		bne.b	7$
		move.b	#'-',-1(a1)

		move.l	d4,d0			; Jahr
		divu	#100,d0
		swap.w	d0			; modulo 100
		bsr	out2			; %02d ausgeben
		move.b	#' ',(a1)+

	; Uhrzeit berechnen

		move.l	ds_Minute(a0),d0	; D0 :  Stunden
		divu	#60,d0
		move.l	d0,d1
		swap	d1			; D1 :  Minuten

		bsr	out2			; Stunden ausgeben
		move.b	#':',(a1)+
		move.w	d1,d0
		bsr	out2			; Minuten ausgeben
		move.b	#':',(a1)+

		move.l	ds_Tick(a0),d0
		divu	#50,d0
		bsr	out2			; Sekunden ausgebemn
		clr.b	(a1)+			; String abschliessen

end:		movem.l	(SP)+,d1-d4/a0-a2
		rts

	; D0 als 2-stellige Zahl ausgeben (00-59)

out2:		ext.l	d0
		divu	#10,d0
		add.w	#'0',d0
		move.b	d0,(a1)+		; Zehner
		swap	d0
		add.w	#'0',d0
		move.b	d0,(a1)+		; Einer
		rts


MonthName:	dc.b	"Jan",0,"Feb",0,"Mar",0,"Apr",0
		dc.b	"May",0,"Jun",0,"Jul",0,"Aug",0
		dc.b	"Sep",0,"Oct",0,"Nov",0,"Dec",0

DayName:	dc.b	"Sunday",0,0,0,0
		dc.b	"Monday",0,0,0,0
		dc.b	"Tuesday",0,0,0
		dc.b	"Wednesday",0
		dc.b	"Thursday",0,0
		dc.b	"Friday",0,0,0,0
		dc.b	"Saturday",0,0

MonthTab:	dc.b	31,28,31,30,31,30,31,31,30,31,30,31,0

		END