2023-05-25 14:14:21 -04:00
|
|
|
|10 @Console &vector $2 &read $1 &pad $4 &type $1 &write $1 &error $1
|
|
|
|
|c0 @DateTime &year $2 &month $1 &day $1 &hour $1 &minute $1 &second $1 &dotw $1 &doty $2 &isdst $1
|
|
|
|
|
2023-05-25 19:00:17 -04:00
|
|
|
|0000 @buf
|
2023-05-25 14:14:21 -04:00
|
|
|
|
|
|
|
|0100 ( -> )
|
|
|
|
.Console/type DEI ?on-params
|
|
|
|
( today )
|
2023-05-25 15:11:06 -04:00
|
|
|
.DateTime/doty DEI2 .DateTime/year DEI2 emit-arv #0a18 DEO
|
2023-05-25 14:14:21 -04:00
|
|
|
#800f DEO
|
|
|
|
BRK
|
|
|
|
|
2023-05-25 15:11:06 -04:00
|
|
|
(
|
|
|
|
@|vectors )
|
|
|
|
|
2023-05-25 14:14:21 -04:00
|
|
|
@on-params ( -> )
|
|
|
|
;on-console .Console/vector DEO2
|
|
|
|
BRK
|
|
|
|
|
|
|
|
@on-console ( -> )
|
|
|
|
.Console/read DEI
|
|
|
|
DUP #21 LTH ?&validate
|
|
|
|
.buf zput
|
|
|
|
BRK
|
|
|
|
|
|
|
|
&validate ( c -> )
|
|
|
|
POP
|
|
|
|
.buf parse
|
|
|
|
BRK
|
|
|
|
|
2023-05-25 15:11:06 -04:00
|
|
|
(
|
|
|
|
@|core )
|
|
|
|
|
2023-05-25 14:14:21 -04:00
|
|
|
@parse ( ztr -- )
|
|
|
|
DUP zlen #05 EQU ?&on-arvgre
|
2023-05-25 14:33:43 -04:00
|
|
|
DUP zlen #0a EQU ?&on-grearv
|
2023-05-25 19:00:17 -04:00
|
|
|
;&err &w LDAk #19 DEO INC2 LDAk ?&w POP2
|
2023-05-25 14:14:21 -04:00
|
|
|
#010f DEO
|
|
|
|
JMP2r
|
|
|
|
|
|
|
|
&on-arvgre ( ztr -- )
|
2023-05-25 19:00:17 -04:00
|
|
|
( m ) INCk INC LDZk LIT "A SUB #00 SWP #000e MUL2 STH2
|
|
|
|
( d ) INC bytedec STH2r ADD2 INC2
|
|
|
|
( y ) ROT bytedec #07d6 ADD2
|
2023-05-25 15:11:06 -04:00
|
|
|
emit-gre
|
2023-05-25 19:00:17 -04:00
|
|
|
#0a18 DEO
|
2023-05-25 15:54:37 -04:00
|
|
|
#800f DEO
|
2023-05-25 14:14:21 -04:00
|
|
|
JMP2r
|
|
|
|
|
2023-05-25 14:33:43 -04:00
|
|
|
&on-grearv ( ztr -- )
|
2023-05-25 19:00:17 -04:00
|
|
|
( y )
|
|
|
|
STHk bytedec #0064 MUL2 INCr INCr
|
|
|
|
STHkr bytedec ADD2 INCr INCr INCr
|
2023-05-25 15:01:32 -04:00
|
|
|
DUP2
|
2023-05-25 19:00:17 -04:00
|
|
|
( m ) STHkr bytedec INCr INCr INCr
|
|
|
|
( d ) STHr bytedec #0001 SUB2 doty SWP2
|
|
|
|
emit-arv
|
|
|
|
#0a18 DEO
|
2023-05-25 15:54:37 -04:00
|
|
|
#800f DEO
|
2023-05-25 14:14:21 -04:00
|
|
|
JMP2r
|
2023-05-25 19:00:17 -04:00
|
|
|
&err "usage: 20 "arvelie.rom 20 "YYYY-MM-DD 0a $1
|
2023-05-25 14:14:21 -04:00
|
|
|
|
2023-05-25 15:11:06 -04:00
|
|
|
@emit-gre ( doty* year* -- )
|
2023-05-25 15:54:37 -04:00
|
|
|
DUP2 pdec LIT "- #18 DEO
|
|
|
|
,&y STR2
|
|
|
|
STH2
|
|
|
|
#0c00
|
|
|
|
&l
|
|
|
|
DUP [ LIT2 &y $2 ] ROT diam #00 SWP
|
|
|
|
DUP2 STH2kr GTH2 ?&skip
|
|
|
|
STH2k SUB2r !&continue
|
|
|
|
&skip
|
|
|
|
POP2 !&end
|
|
|
|
&continue
|
|
|
|
POP2
|
|
|
|
INC GTHk ?&l
|
|
|
|
&end
|
2023-05-25 19:00:17 -04:00
|
|
|
NIP INC emit-dec LIT "- #18 DEO STH2r NIP emit-dec
|
2023-05-25 15:11:06 -04:00
|
|
|
JMP2r
|
|
|
|
|
|
|
|
@emit-arv ( doty* year* -- )
|
|
|
|
#07d6 SUB2 NIP
|
2023-05-25 19:00:17 -04:00
|
|
|
( year ) emit-dec
|
2023-05-25 15:11:06 -04:00
|
|
|
( month ) DUP2 #000e DIV2 NIP #11 ADD emit-num
|
2023-05-25 19:00:17 -04:00
|
|
|
( digit3 ) #000e [ DIV2k MUL2 SUB2 ] NIP emit-dec
|
2023-05-25 15:54:37 -04:00
|
|
|
JMP2r
|
|
|
|
|
|
|
|
@emit-dec ( byte -- )
|
|
|
|
DUP #0a DIV emit-num
|
2023-05-25 19:00:17 -04:00
|
|
|
#0a DIVk MUL SUB
|
|
|
|
@emit-num ( num -- )
|
|
|
|
LIT "0 ADD #18 DEO
|
2023-05-25 15:11:06 -04:00
|
|
|
JMP2r
|
|
|
|
|
|
|
|
(
|
|
|
|
@|utils )
|
|
|
|
|
2023-05-25 14:51:02 -04:00
|
|
|
@doty ( year* month* day* -- doty* )
|
2023-05-25 14:33:43 -04:00
|
|
|
|
2023-05-25 14:51:02 -04:00
|
|
|
ROT2 ,&y STR2
|
|
|
|
LIT2r 0000
|
|
|
|
SWP2 NIP #01 SUB #00
|
|
|
|
&l
|
|
|
|
#00 OVR [ LIT2 &y $2 ] ROT diam STH2 ADD2r
|
|
|
|
INC GTHk ?&l
|
|
|
|
POP2
|
|
|
|
STH2r ADD2
|
|
|
|
|
|
|
|
JMP2r
|
|
|
|
|
|
|
|
@diam ( year* month -- days )
|
|
|
|
|
|
|
|
#00 OVR ;&m ADD2 LDA
|
|
|
|
SWP #01 NEQ ?&no-feb
|
|
|
|
STH DUP2 is-leap-year STHr ADD
|
|
|
|
&no-feb
|
|
|
|
NIP NIP
|
2023-05-25 14:14:21 -04:00
|
|
|
|
2023-05-25 14:33:43 -04:00
|
|
|
JMP2r
|
2023-05-25 15:04:39 -04:00
|
|
|
&m [ 1f 1c 1f 1e 1f 1e 1f 1f 1e 1f 1e 1f ]
|
2023-05-25 14:51:02 -04:00
|
|
|
|
|
|
|
@is-leap-year ( year* -- bool )
|
|
|
|
( leap year if perfectly divisible by 400 )
|
|
|
|
DUP2 #0190 ( MOD2 ) DIV2k MUL2 SUB2 #0000 EQU2 ?&leap
|
2023-05-25 15:04:39 -04:00
|
|
|
( not a leap year if divisible by 100, but not divisible by 400 )
|
2023-05-25 14:51:02 -04:00
|
|
|
DUP2 #0064 ( MOD2 ) DIV2k MUL2 SUB2 #0000 EQU2 ?¬-leap
|
2023-05-25 15:04:39 -04:00
|
|
|
( leap year if not divisible by 100, but divisible by 4 )
|
|
|
|
#0003 AND2 #0000 EQU2
|
|
|
|
JMP2r
|
2023-05-25 14:51:02 -04:00
|
|
|
¬-leap
|
2023-05-25 15:04:39 -04:00
|
|
|
POP2 #00
|
|
|
|
JMP2r
|
|
|
|
&leap
|
|
|
|
POP2 #01
|
2023-05-25 14:51:02 -04:00
|
|
|
JMP2r
|
2023-05-25 14:33:43 -04:00
|
|
|
|
2023-05-25 19:00:17 -04:00
|
|
|
@shortdec ( zp -- dec* )
|
2023-05-25 14:51:02 -04:00
|
|
|
|
2023-05-25 19:00:17 -04:00
|
|
|
JMP2r
|
2023-05-25 14:51:02 -04:00
|
|
|
|
2023-05-25 19:00:17 -04:00
|
|
|
@bytedec ( zp -- dec* )
|
|
|
|
LDZ2
|
|
|
|
LIT "0 SUB
|
|
|
|
SWP LIT "0 SUB #0a MUL ADD
|
|
|
|
#00 SWP
|
2023-05-25 14:51:02 -04:00
|
|
|
JMP2r
|
|
|
|
|
2023-05-25 14:14:21 -04:00
|
|
|
(
|
|
|
|
@|stdlib )
|
|
|
|
|
|
|
|
@zlen ( ztr -- len ) DUP zcap SWP SUB JMP2r
|
|
|
|
@zcap ( ztr -- end ) LDZk ?&w JMP2r &w INC LDZk ?&w JMP2r
|
|
|
|
@zput ( c ztr -- ) zcap STZ JMP2r
|
|
|
|
|
|
|
|
@pdec ( v* -- )
|
|
|
|
|
|
|
|
#00 ,&z STR
|
|
|
|
#2710 ,&parse JSR
|
|
|
|
#03e8 ,&parse JSR
|
|
|
|
#0064 ,&parse JSR
|
|
|
|
#000a ,&parse JSR
|
|
|
|
NIP
|
|
|
|
&emit
|
|
|
|
DUP [ LIT &z $1 ] EQU ,&skip JCN
|
|
|
|
#ff ,&z STR DUP #30 ADD #18 DEO
|
|
|
|
&skip
|
|
|
|
POP
|
|
|
|
|
|
|
|
JMP2r
|
|
|
|
&parse
|
|
|
|
DIV2k DUP ,&emit JSR MUL2 SUB2
|
|
|
|
JMP2r
|
|
|
|
|
|
|
|
|