aboutsummaryrefslogtreecommitdiff
path: root/amforth-6.5/common/words/accept.asm
blob: 68afdb1ae73064d5c1173c7ef63e1ccb8934f63d (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

.if cpu_msp430==1
    HEADER(XT_ACCEPT,6,"accept",DOCOLON)
.endif

.if cpu_avr8==1
VE_ACCEPT:
    .dw $ff06
    .db "accept"
    .dw VE_HEAD
    .set VE_HEAD = VE_ACCEPT
XT_ACCEPT:
    .dw DO_COLON
PFA_ACCEPT:

.endif
        .DW XT_OVER,XT_PLUS,XT_1MINUS,XT_OVER
ACC1:   .DW XT_KEY,XT_DUP,XT_CRLFQ,XT_ZEROEQUAL,XT_DOCONDBRANCH
        DEST(ACC5)
        .DW XT_DUP,XT_DOLITERAL,8,XT_EQUAL,XT_DOCONDBRANCH
        DEST(ACC3)
        .DW XT_DROP,XT_ROT,XT_2DUP,XT_GREATER,XT_TO_R,XT_ROT,XT_ROT,XT_R_FROM,XT_DOCONDBRANCH
	DEST(ACC6)
	.DW XT_BS,XT_1MINUS,XT_TO_R,XT_OVER,XT_R_FROM,XT_UMAX
ACC6:   .DW XT_DOBRANCH
        DEST(ACC4)
    

ACC3:    ; check for remaining control characters, replace them with blank
	.dw XT_DUP            ; ( -- addr k k )
        .dw XT_BL
        .dw XT_LESS
        .dw XT_DOCONDBRANCH
        DEST(PFA_ACCEPT6)
        .dw XT_DROP
        .dw XT_BL
PFA_ACCEPT6:
	.DW XT_DUP,XT_EMIT,XT_OVER,XT_CSTORE,XT_1PLUS,XT_OVER,XT_UMIN
ACC4:   .DW XT_DOBRANCH
        DEST(ACC1)
ACC5:   .DW XT_DROP,XT_NIP,XT_SWAP,XT_MINUS,XT_CR,XT_EXIT


; ( --  ) 
; System
; send a backspace character to overwrite the current char
.if cpu_msp430==1
    HEADLESS(XT_BS,DOCOLON)
.endif

.if cpu_avr8==1

;VE_BS:
;    .dw $ff02
;    .db "bs"
;    .dw VE_HEAD
;    .set VE_HEAD = VE_BS
XT_BS:
    .dw DO_COLON
.endif
    .dw XT_DOLITERAL
    .dw 8
    .dw XT_DUP
    .dw XT_EMIT
    .dw XT_SPACE
    .dw XT_EMIT
    .dw XT_EXIT


; ( c -- f ) 
; System
; is the character a line end character?
.if cpu_msp430==1
    HEADLESS(XT_CRLFQ,DOCOLON)
.endif

.if cpu_avr8==1
;VE_CRLFQ:
;    .dw $ff02
;    .db "crlf?"
;    .dw VE_HEAD
;    .set VE_HEAD = VE_CRLFQ
XT_CRLFQ:
    .dw DO_COLON
.endif
    .dw XT_DUP
    .dw XT_DOLITERAL
    .dw 13
    .dw XT_EQUAL
    .dw XT_SWAP
    .dw XT_DOLITERAL
    .dw 10
    .dw XT_EQUAL
    .dw XT_OR
    .dw XT_EXIT