]> git.sur5r.net Git - cc65/blob - libsrc/telestrat/write.s
Resolved conflict and removed adaptation for strpbrk for time being.
[cc65] / libsrc / telestrat / write.s
1 ;
2 ; jede jede@oric.org 2017-01-22
3
4         .export         _write
5         .import         popax, popptr1
6         .importzp       ptr1, ptr2, ptr3, tmp1
7
8         .include        "telestrat.inc"
9
10 ; int write (int fd, const void* buf, int count);
11 .proc   _write
12
13         sta     ptr3
14         stx     ptr3+1          ; save count as result
15
16         eor     #$FF
17         sta     ptr2
18         txa
19         eor     #$FF
20         sta     ptr2+1          ; Remember -count-1
21
22         jsr     popptr1         ; get buf
23         jsr     popax           ; get fd and discard
24
25         ; if fd=0001 then it stdout
26         cpx     #0
27         beq     next
28         jmp     L1
29 next:           
30         cmp     #1
31         beq     L1              
32                 
33         ; Here it's a file opened
34         lda     ptr1
35         sta     PTR_READ_DEST
36         lda     ptr1+1
37         sta     PTR_READ_DEST+1
38         lda     ptr3
39         ldy     ptr3+1
40         BRK_TELEMON  XFWRITE
41         rts
42                 
43                 
44 L1:     inc     ptr2
45         bne     L2
46         inc     ptr2+1
47         beq     L9
48 L2:     ldy     #0
49         lda     (ptr1),y
50         tax
51         cpx     #$0A            ; Check for \n
52         bne     L3
53         BRK_TELEMON  XWR0  ; Macro send char to screen (channel 0 in telemon terms)
54         lda     #$0D ; return to the beggining of the line
55         BRK_TELEMON  XWR0  ; Macro ; 
56         
57
58         ldx     #$0D
59 L3:     
60         BRK_TELEMON  XWR0  ; Macro
61
62         inc     ptr1
63         bne     L1
64         inc     ptr1+1
65         jmp     L1
66
67 ; No error, return count
68
69 L9:     lda     ptr3
70         ldx     ptr3+1
71         rts
72
73 .endproc
74
75