; ; Colin Leroy-Mira, 2024 ; ; char* __fastcall__ fgets (char* s, unsigned size, register FILE* f) ; .export _fgets .import _fgetc, popptr1, pushptr1, popax, pushax, return0, ___errno .importzp ptr1, ptr4 .include "errno.inc" .include "stdio.inc" .include "_file.inc" .macpack cpu terminate_ptr: lda #$00 tax .if (.cpu .bitand ::CPU_ISET_65SC02) sta (ptr4) .else tay sta (ptr4),y .endif rts _fgets: sta ptr1 stx ptr1+1 jsr popax sta size stx size+1 jsr popax sta ptr4 stx ptr4+1 sta buf stx buf+1 .if (.cpu .bitand ::CPU_ISET_65SC02) stz didread .else lda #$00 ; We have read nothing yet sta didread .endif ; Check size lda size ora size+1 bne read_loop lda #EINVAL sta ___errno jmp return0 read_loop: lda size ; Dec size bne :+ dec size+1 : dec size bne :+ ; Check bound ldx size+1 beq done : jsr pushptr1 ; Push ptr1 for backup and load it to AX for fgetc jsr _fgetc ; Read a char pha jsr popptr1 ; Get ptr1 back pla cpx #buf lda #