//------------------------------------------------------------------------
//                             Library CBM I/O
//
// Author: Mattias Hansson
// Copyright (c) : 2005 Mattias Hansson
// License: GNU LGPL 2
// Language: 65CM v0.4+
// Dependencies: (all libs might be included, selectively)
// Target: CBM computers.
//
// Purpose: To shorten lib names to normal usage length
//------------------------------------------------------------------------

#IFNDEF __LIB_CBMIO
#DEFINE __LIB_CBMIO = 1


GOTO lib_cbmio_skip

WORD lib_cbmio_to_txtptr
FUNC lib_cbmio_print ( lib_cbmio_to_txtptr )
  //On c64 we "borrow" the undocumented "print zero-terminated string" routine
  #IFDEF MACHINE_C64
  ASM
    lda lib_cbmio_to_txtptr
    ldy lib_cbmio_to_txtptr+1
    jsr $ab1e ; strout kernal routine
  ENDASM
  #IFEND
  #IFNDEF MACHINE_C64
    BYTE lib_cbmio_to_char
    PEEK lib_cbmio_to_txtptr -> lib_cbmio_to_char
    WHILE lib_cbmio_to_char
      GOSUB $ffd2 PASSING lib_cbmio_to_char AS ACC
      INC lib_cbmio_to_txtptr
      PEEK lib_cbmio_to_txtptr -> lib_cbmio_to_char
    WEND
  #IFEND
FEND

WORD lib_cbmio_tl_txtptr
FUNC lib_cbmio_printlf ( lib_cbmio_tl_txtptr )

  CALL lib_cbmio_print ( lib_cbmio_tl_txtptr )
  CALL lib_cbmio_print ( @lib_cbmio_tl_linefeed )

FEND

FUNC lib_cbmio_lf

  CALL lib_cbmio_print ( @lib_cbmio_tl_linefeed )

FEND

FUNC lib_cbmio_home

  CALL lib_cbmio_print ( @lib_cbmio_tl_home )

FEND


FUNC lib_cbmio_cls

  CALL lib_cbmio_print ( @lib_cbmio_tl_cls )

FEND

ASM
lib_cbmio_tl_home
  !8 19, 0
lib_cbmio_tl_cls
  !8 147, 0
lib_cbmio_tl_linefeed
  !8 13, 0
lib_cbmio_text_nullstr
  !8 0
ENDASM


BYTE lib_cbmio_hb_value
FUNC lib_cbmio_hexoutb ( lib_cbmio_hb_value )
  ASM
    ;ldy #0
    ;lda (lib_cbmio_ho_varaddress),y
    lda lib_cbmio_hb_value
    and #$0f
    tax
    lda lib_cbmio_ho_hexdigits,x
    sta lib_cbmio_ho_hextxt+1
    ;lda (lib_cbmio_ho_varaddress),y
    lda lib_cbmio_hb_value
    lsr
    lsr
    lsr
    lsr
    tax
    lda lib_cbmio_ho_hexdigits,x
    sta lib_cbmio_ho_hextxt
  ENDASM
  CALL lib_cbmio_print ( @lib_cbmio_ho_hextxt )

FEND

WORD lib_cbmio_lib_cbmio_ho_value
FUNC lib_cbmio_hexoutw ( lib_cbmio_lib_cbmio_ho_value )
  ASM
    lda lib_cbmio_lib_cbmio_ho_value+1
    sta lib_cbmio_hb_value
    jsr lib_cbmio_hexoutb
    lda lib_cbmio_lib_cbmio_ho_value
    sta lib_cbmio_hb_value
    jsr lib_cbmio_hexoutb
  ENDASM
FEND

WORD lib_cbmio_i_ptr
FUNC lib_cbmio_input ( lib_cbmio_i_ptr )
  BYTE char

  LET char = 0
  WHILE char <> 13
    ASM
      jsr $ffcf
      sta |char|
    ENDASM
    POKE lib_cbmio_i_ptr WITH char
    INC lib_cbmio_i_ptr
  WEND
  DEC lib_cbmio_i_ptr //replace ending #13 with #0
  POKE lib_cbmio_i_ptr WITH 0
FEND

ASM

lib_cbmio_ho_hextxt
  !8 0,0,0

lib_cbmio_ho_hexdigits
  !pet "0123456789abcdef"
ENDASM


LABEL lib_cbmio_skip
#IFEND
