2 ; Ullrich von Bassewitz, 16.11.2002
4 ; int write (int fd, const void* buf, unsigned count);
8 .constructor initstdout
10 .import SETLFS, OPEN, CKOUT, BSOUT, READST, CLRCH
12 .importzp sp, ptr1, ptr2, ptr3
17 .include "filedes.inc"
20 ;--------------------------------------------------------------------------
21 ; initstdout: Open the stdout and stderr file descriptors for the screen.
27 lda #STDOUT_FILENO + LFN_OFFS
29 lda #STDERR_FILENO + LFN_OFFS
30 @L1: ldx #CBMDEV_SCREEN
33 jmp OPEN ; Will always succeed
37 ;--------------------------------------------------------------------------
44 jsr rwcommon ; Pop params, check handle
45 bcs invalidfd ; Invalid handle
47 ; Check if the LFN is valid and the file is open for writing
49 adc #LFN_OFFS ; Carry is already clear
51 lda fdtab-LFN_OFFS,x; Get flags for this handle
52 and #LFN_WRITE ; File open for writing?
55 ; Valid lfn. Make it the output file
59 @error: jmp __mappederrno ; Store into __oserror, map to errno, return -1
61 ; Output the next character from the buffer
67 inc ptr2+1 ; A = *buf++;
74 lsr a ; Bit zero is write timeout
79 ; Count characters written
92 ; Wrote all chars or disk full. Close the output channel
96 ; Clear _oserror and return the number of chars written
104 ; Error entry: Device not present
110 jmp __directerrno ; Sets _errno, clears _oserror, returns -1
112 ; Error entry: The given file descriptor is not valid or not open
116 jmp __directerrno ; Sets _errno, clears _oserror, returns -1