gno/bin/date/date.asm

275 lines
3.0 KiB
NASM

* asm version of date utility
* Phillip Vandry, May 1993
mcopy date.mac
keep date
copy 13/asmdefs/gno/e16.ioctl
cline gequ 0
main start
phk
plb
sty cline
stx cline+2
stz uflag
ldy #8
lpp15 lda [cline],y
and #$ff
beq ok
iny
cmp #$20
bne lpp15
lpp20 lda [cline],y
and #$ff
beq ok
iny
cmp #$20
beq lpp20
cmp #$22
beq lpp20
cmp #'-'
bne showusg
lda [cline],y
and #$ff
cmp #'V'
beq showvers
cmp #'c'
beq updateflag
showusg ~ErrWriteCString #usage
bra getoutPASS
showvers ~WriteCString #versstr
getoutPASS brl getout
updateflag inc uflag
ok anop
lda #2 ; SIGINT
jsr handle
lda #15 ; SIGTERM
jsr handle
pha
pea 2 ; stdout
pea TIOCGETP|-16
pea TIOCGETP
pea sgttyb|-16
pea sgttyb
pea errno|-16
pea errno
ldx #$2603
jsl $e10008
pla
lda sgttyb+4
sta oldflags
and #$ffef
sta sgttyb+4
jsr csetp
lda oldflags
sta sgttyb+4
refresh anop
pha
pha
pha
pha
~ReadTimeHex
lda #year+3
sta cline
lda 4,s
and #$ff
clc
adc #1900
ldx #4
jsr insert
lda 1,s
and #$ff
ldx #2
jsr insert
jsr unpad
pla
xba
and #$ff
ldx #2
jsr insert
jsr unpad
pla
and #$ff
ldx #2
jsr insert
jsr unpad
lda 1,s
and #$ff
inc a
ldx #2
jsr insert
phk
plb
pla
jsr lookup
lda months,x
sta month
lda months+1,x
sta month+1
pla
jsr lookup
lda weekdays-3,x
sta weekday
lda weekdays-2,x
sta weekday+1
WriteGS ramit
lda uflag
beq exitall
pea 1
case on
jsl sleep
case off
brl refresh
exitall WriteGS justnewl
jsr csetp
getout QuitGS qtrec
csetp anop
pha
pea 2
pea TIOCSETP|-16
pea TIOCSETP
pea sgttyb|-16
pea sgttyb
pea errno|-16
pea errno
ldx #$2603
jsl $e10008
pla
rts
uflag ds 2
handler anop
phb
plx
ply
pla
pla
phy
phx
plb
lda #1
case on
sta >ringring
case off
lda #0
sta >uflag
rtl
handle anop
pha
pha
pha
pea handler|-16
pea handler
pea errno|-16
pea errno
ldx #$1603
jsl $e10008
pla
pla
rts
lookup xba
and #$ff
pha
asl a
asl a
sec
sbc 1,s
tax
pla
rts
unpad ldx cline
phk
plb
short m
lda |0,x
cmp #$20
bne allok
lda #'0'
sta |0,x
allok long m
rts
insert pha ; thenum
pea 0
plb
phk
lda cline
dec a
dec a
dec a
sta cline
pha
phx
pea 0
~Int2Dec *,*,*,*
rts
string anop
qtrec dc i'2'
dc a4'0'
dc i'$4000'
ramit dc i'4'
dc i'2'
dc a4'strbeg'
dc i4'strend-strbeg'
ds 4
sgttyb ds 6
oldflags ds 2
strbeg anop
weekday dc c'xxx '
month dc c'xxx '
day dc c'xx '
hour dc c'xx:'
minute dc c'xx:'
second dc c'xx '
year dc c'xxxx'
dc h'0d'
strend anop
justnewl dc i'4'
dc i'2'
dc a4'justnewl1'
dc i4'1'
ds 4
justnewl1 dc h'0a'
weekdays dc c'SunMonTueWedThuFriSat'
months dc c'JanFebMarAprMayJunJulAugSepOctNovDec'
versstr dc c'date utility, asm version 1.1'
dc h'0d 0a'
usage dc c'usage: date [-cV]',h'0d 0a'
dc h'0'
end
errno data
ds 2
end
copy modsleep.asm
dpstk data ~Direct
kind $12
ds 512
end