]> git.sur5r.net Git - cc65/blob - libsrc/telestrat/write.s
Bug corrected : Fwrite did not return number of byte written.
[cc65] / libsrc / telestrat / write.s
1 ;
2 ; jede jede@oric.org 2017-01-22
3
4         .export         _write
5         .import         popax
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     popax           ; get buf
23         sta     ptr1
24         stx     ptr1+1
25         jsr     popax           ; get fd and discard
26
27         ; if fd=0001 then it stdout
28         cpx     #0
29         beq     next
30         jmp     L1
31 next:           
32         cmp     #1
33         beq     L1              
34                 
35         ; here it's a file opened
36         lda     ptr1
37         sta     PTR_READ_DEST
38         lda     ptr1+1
39         sta     PTR_READ_DEST+1
40         lda     ptr3
41         ldy     ptr3+1
42         BRK_TELEMON  XFWRITE
43         ;  compute nb of bytes written
44        
45
46         lda     PTR_READ_DEST+1
47         sec
48         sbc     ptr1+1
49         tax                     
50         lda     PTR_READ_DEST
51         sec
52         sbc     ptr1
53         rts
54                 
55                 
56 L1:     inc     ptr2
57         bne     L2
58         inc     ptr2+1
59         beq     L9
60 L2:     ldy     #0
61         lda     (ptr1),y
62         tax
63         cpx     #$0A            ; check for \n
64         bne     L3
65         BRK_TELEMON  XWR0       ; macro send char to screen (channel 0 in telemon terms)
66         lda     #$0D            ; return to the beggining of the line
67         BRK_TELEMON  XWR0       ; macro
68         
69
70         ldx     #$0D
71 L3:     
72         BRK_TELEMON  XWR0       ; macro
73
74         inc     ptr1
75         bne     L1
76         inc     ptr1+1
77         jmp     L1
78
79         ; No error, return count
80
81 L9:     lda     ptr3
82         ldx     ptr3+1
83         rts
84
85 .endproc
86
87