*
*``````````````````````````````*
* THLINE ::    TEXT HORIZ LINE *
*-                            -*
* CREATES A HORIZONTAL LINE OF *
* TEXT COMPOSED OF THE FILL    *
* CHARACTER SPECIFIED AT Y.    *
*-                            -*
* CLOBBERS:                    *
*                              *
* FLAGS:  ????----  REG: AXYM  *
*-                            -*
* CYCLES: ???                  *
* SIZE:                        *
*-                            -*
* USAGE:                       *
*        LDA (X-START)         *
*        PHA                   *
*        LDA (X-END)           *
*        PHA                   *
*        LDA (Y-POS)           *
*        PHA                   *
*        LDA (FILL CHAR)       *
*        PHA                   *
*        JSR THLINE            *
*-                            -*
* ENTRY                        *
*                              *
* TOP OF STACK                 *
*                              *
* LOW BYTE OF RETURN ADDRESS   *
* HI BYTE OF RETURN ADDRESS    *
* XPOS START OF LINE (:X1)     *
* XPOS END OF LINE (:X2)       *
* YPOS OF LINE (:Y)            *
* FILL CHARACTER (:F)          *
*-                            -*
* EXIT                         *
*                              *
* TOP OF STACK                 *
*                              *
* LOW BYTE OF RETURN ADDRESS   *
* HI BYTE OF RETURN ADDRESS    *
*                              *
*  Y = START,END OF LINE       *
*  X = ???                     *
*  A = LOW BYTE OF RET ADDR    *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
THLINE
*
** SAVE RETURN ADDRESS
*
         PLA
         STA   RETADR
         PLA
         STA   RETADR+1
*
** GET PARAMETERS
*
         PLA
         STA   :F
         PLA
         STA   :Y
         PLA
         STA   :X2
         PLA
         STA   :X1
*
********************************
*
** ERROR CONTROL
*
********************************
*
         LDA   ERRCTRL
         CMP   #1
         BEQ   :CHKERR
         JMP   :ERREND
:CHKERR
         LDA   :X1
         CMP   :X2
         BCS   :ERRTOOHI  ; X1 => X2
         LDA   :X1
         CMP   #39
         BCS   :ERRXOVF   ; X VALUE OVERFLOW
         LDA   :X2
         CMP   #40        ; MAX COLS + 1
         BCS   :ERRXOVF
         LDA   :Y
         CMP   #24        ; MAX ROWS + 1
         BCS   :ERRYOVF
         JMP   :ERREND
:ERRTOOHI
         _ERR  #:E_SID;#:E_XHI;#:E_DMP1;#:X1;#4
         JMP   :ERREND
:ERRXOVF
         _ERR  #:E_SID;#:E_XOF;#:E_DMP1;#:X1;#4
         JMP   :ERREND
:ERRYOVF
         _ERR  #:E_SID;#:E_YOF;#:E_DMP1;#:X1;#4
         JMP   :ERREND
*
********************************
*
:ERREND
*
********************************
*
         LDA   :Y         ; LOAD ROW
         LDY   :X1        ; LOAD X START POS
:LOOP
         JSR   $F847      ; GBASCALC ROUTINE
         LDA   :F
         STA   ($26),Y    ; PUSH TO SCREEN MEMORY
         LDA   :Y
         INY              ; INCREASE X POS
         CPY   :X2        ; IF LESS THAN X END POS
         BNE   :LOOP      ; REPEAT UNTIL DONE
:EXIT
*
** RESTORE RETURN ADDRESS
*
         LDA   RETADR+1
         PHA
         LDA   RETADR
         PHA
         RTS
*
** DATA
*
:X1      DS    1
:X2      DS    1
:Y       DS    1
:F       DS    1          ; FILL CHAR
*
:E_SID   ASC   "THLINE (THLIN MACRO)",00
:E_DMP1  ASC   "DUMPING X1(1) X1(1) Y(1) F(1)",00
:E_XHI   ASC   "X1 MUST BE LOWER THAN X2.",00
:E_XOF   ASC   "X > # OF AVAILABLE COLUMNS.",00
:E_YOF   ASC   "Y > # OF AVAILABLE ROWS",00
*
