;
; char cgetc (void);
;

        .export         _cgetc
        .import         cursor
        .import         _kbhit

        .include        "osic1p.inc"
        .include        "extzp.inc"
        .include        "zeropage.inc"

; Input routine, show cursor if enabled
        .code
_cgetc:
        ldx     CHARBUF         ; character in buffer available?
        bne     done
        lda     cursor          ; show cursor?
        beq     nocursor
        ldy     CURS_X
        lda     (SCREEN_PTR),y  ; fetch current character
        sta     tmp1            ; save it
        lda     #$A1            ; full white square
        sta     (SCREEN_PTR),y  ; store at cursor position

nocursor:
        jsr     _kbhit          ; get input character in A
        tax                     ; save A in X, set flags
        beq     nocursor        ; until a key is actually pressed
        lda     cursor
        beq     done            ; was cursor on?
        lda     tmp1            ; fetch saved character
        ldy     CURS_X
        sta     (SCREEN_PTR),y  ; store at cursor position

done:
        lda     #$00
        sta     CHARBUF         ; empty buffer
        txa                     ; restore saved character from X
        ldx     #$00            ; high byte of int return value
        rts