Browse code

(datetime) Improved example

Devine Lu Linvega authored on 16/07/2023 18:41:44
Showing 1 changed files
... ...
@@ -1,89 +1,84 @@
1
+( usage: uxncli datetime.rom )
2
+
3
+|10 @Console &vector $2 &read $1 &pad $4 &type $1 &write $1 &error $1
1 4
 |c0 @DateTime &year $2 &month $1 &day $1 &hour $1 &minute $1 &second $1 &dotw $1 &doty $2 &isdst $1
2 5
 
3 6
 |0100
4 7
 
5
-	( date )
6
-	;dict/date pstr
7
-	[ LIT2 00 -DateTime/dotw ] DEI #20 SFT ;week-txt ADD2 pstr
8
-	[ LIT2 20 ", ] #18 DEO #18 DEO
9
-	[ LIT2 00 -DateTime/month ] DEI #20 SFT ;month-txt ADD2 pstr
10
-	#2018 DEO
11
-	[ LIT2 00 -DateTime/day ] DEI pdec
12
-	[ LIT2 20 ", ] #18 DEO #18 DEO
13
-	.DateTime/year DEI2 pdec
8
+@on-reset ( -> )
9
+	<print-date>
14 10
 	#0a18 DEO
15
-
16
-	( time )
17
-	;dict/time pstr
18
-	[ LIT2 00 -DateTime/hour ] DEI pdec-pad
19
-	LIT ": #18 DEO
20
-	[ LIT2 00 -DateTime/minute ] DEI pdec-pad
21
-	LIT ": #18 DEO
22
-	[ LIT2 00 -DateTime/second ] DEI pdec-pad
11
+	<print-time>
12
+	#0a18 DEO
13
+	<print-doty>
23 14
 	#0a18 DEO
24
-
25
-	( doty )
26
-	;dict/doty pstr
27
-	.DateTime/doty DEI2 pdec
28
-	[ LIT2 0a ". ] #18 DEO #18 DEO
29 15
 	#800f DEO
30
-
31
-BRK
32
-
33
-@pstr ( str* -- )
34
-
35
-	LDAk ?&w POP2 JMP2r
36
-	&w
16
+	BRK
17
+
18
+@<print-date> ( -- )
19
+	;dict/date <print-str>
20
+	[ LIT2 00 -DateTime/dotw ] DEI #20 SFT ;week-txt ADD2 <print-str>
21
+	[ LIT2 20 ", ] #18 DEO
22
+	#18 DEO
23
+	[ LIT2 00 -DateTime/month ] DEI #20 SFT ;month-txt ADD2 <print-str>
24
+	#2018 DEO
25
+	[ LIT2 00 -DateTime/day ] DEI <print-dec>
26
+	[ LIT2 20 ", ] #18 DEO
27
+	#18 DEO
28
+	.DateTime/year DEI2 !<print-dec>
29
+
30
+@<print-time> ( -- )
31
+	;dict/time <print-str>
32
+	.DateTime/hour DEIk <print-dec-pad>
33
+	[ LIT2 ": 18 ] DEO
34
+	INC DEIk <print-dec-pad>
35
+	[ LIT2 ": 18 ] DEO
36
+	DEI !<print-dec-pad>
37
+
38
+@<print-str> ( str* -- )
39
+	&w ( -- )
37 40
 		LDAk #18 DEO
38 41
 		INC2 LDAk ?&w
39
-	POP2
40
-
41
-JMP2r
42
-
43
-@pdec-pad ( byte -- )
44
-
45
-	#0a DIVk emit
46
-	DIVk MUL SUB emit
47
-
48
-JMP2r
49
-
50
-@pdec ( short* -- )
51
-
52
-	#00 ,&z STR
53
-	#2710 pdec/parse
54
-	#03e8 pdec/parse
55
-	#0064 pdec/parse
56
-	#000a pdec/parse
57
-	NIP emit
58
-
59
-JMP2r
60
-
61
-&parse ( short* den* -- short* )
62
-
63
-	DIV2k DUPk [ LIT &z $1 ] EQU ?&skip
64
-	DUP emit #ff ,&z STR
65
-	&skip POP MUL2 SUB2
66
-
67
-JMP2r
68
-
69
-@emit ( num -- )
70
-
42
+	POP2 JMP2r
43
+
44
+@<print-doty> ( -- )
45
+	;dict/doty <print-str>
46
+	.DateTime/doty DEI2
47
+	( >> )
48
+
49
+@<print-dec> ( short* -- )
50
+	#2710 [ LIT2r 00fb ]
51
+	&w ( -- )
52
+		DIV2k #000a DIV2k MUL2 SUB2 SWPr EQUk OVR STHkr EQU AND ?&>skip
53
+			DUP <emit-dec>
54
+			INCr &>skip
55
+		POP2 #000a DIV2 SWPr INCr STHkr ?&w
56
+	POP2r POP2 POP2 JMP2r
57
+
58
+@<print-dec-pad> ( byte -- )
59
+	#0a DIVk <emit-dec>
60
+	DIVk MUL SUB
61
+	( >> )
62
+
63
+@<emit-dec> ( byte -- )
71 64
 	LIT "0 ADD #18 DEO
72
-
73
-JMP2r
65
+	JMP2r
74 66
 
75 67
 (
76 68
 @|assets )
77 69
 
78
-@week-txt [
79
-	"Sun $1 "Mon $1 "Tue $1 "Wed $1 "Thu $1 "Fri $1
80
-	"Sat $1 ]
70
+@week-txt
71
+	[
72
+	"Sun $1 "Mon $1 "Tue $1 "Wed $1
73
+	"Thu $1 "Fri $1 "Sat $1 ]
81 74
 
82
-@month-txt [
83
-	"Jan $1 "Feb $1 "Mar $1 "Apr $1 "May $1 "Jun $1
84
-	"Jul $1 "Aug $1 "Sep $1 "Oct $1 "Nov $1 "Dec $1 ]
75
+@month-txt
76
+	[
77
+	"Jan $1 "Feb $1 "Mar $1 "Apr $1
78
+	"May $1 "Jun $1 "Jul $1 "Aug $1
79
+	"Sep $1 "Oct $1 "Nov $1 "Dec $1 ]
85 80
 
86
-@dict
81
+@dict ( )
87 82
 	&date "The 20 "date 20 "is: 20 $1
88 83
 	&time "The 20 "time 20 "is: 20 $1
89 84
 	&doty "The 20 "day 20 "of 20 "the 20 "year 20 "is: 20 $1