; FNInput.      L{ser text fr}n tangentbordet.
; (c) Copyright 85-07-17 Jan-]ke Larsson.
;
                       ORG 0
                       LD C,0         ; kolumn.
                       LD B,C         ; Save start pos. (kolumn)
                       LD H,D         ; Save start address.
                       LD L,E         ;
;
LOOP:                  XOR A
                       LD (65506),A   ; Nollst{ll KEYFLAG
                       LD (65507),A   ; Nollst{ll KEYBUFF
                       LD A,C
                       LD (65362),A   ; pos.
                       CALL 2         ; GETCH.
;
; Kolla om styrkommando.
;
                       CP 8           ; <-
                       JR Z,BACK
                       CP 9           ; ->
                       JR Z,FRAM
                       CP 13          ; RETURN
                       RET Z
                       CP 24          ; CTRL-X
                       JR Z,CTRLX
                       CP 12          ; CTRL-L
                       JR Z,CTRLL
                       CP 192         ; Pf1
                       JR Z,PF1
                       CP 193         ; Pf2
                       JR Z,PF2
;
; Ignorera paranteser vid inmatning.
;
                       CP 40          ; '('
                       JR Z,LOOP
                       CP 41          ; ')'
                       JR Z,LOOP
;
; Kolla om ascii v{rden <32 eller >127, is}fall ignore.
;
                       CP 32
                       JR C,LOOP
                       CP 128
                       JR NC,LOOP
;
; Eka skrivbara tkn.
;
                       EX DE,HL
                       LD (HL),A
                       EX DE,HL
                       INC DE        ; Next pos.
                       INC C         ;
                       JR KOLL
;
; St{ll mark|r i f|rsta pos. (radera ej)
;
CTRLX:                 LD D,H
                       LD E,L
                       LD C,B
                       JR FIX
;
; St{ll mark|r i f|rsta pos. (radera inmatad text)
;
CTRLL:                 LD D,H
                       LD E,L
ERASE:                 LD (HL),32            ; L{gg in space.
                       INC HL
                       LD A,(HL)             ; Kolla om h|gerparantes.
                       CP 41                 ;
                       JR NZ,ERASE           ; Is}fall, klart.
                       EX DE,HL
                       JR CTRLX
;
;
BACK:                  DEC C
                       LD A,C
                       LD (65362),A          ; pos.
                       DEC DE
                       EX DE,HL
                       LD A,(HL)
                       EX DE,HL
                       CP 40
                       JR NZ,LOOP
                       INC DE
                       INC C
                       JR FIX
;
FRAM:                  INC C
                       LD A,C
                       LD (65362),A           ; POS.
                       INC DE
KOLL:                  EX DE,HL
                       LD A,(HL)
                       EX DE,HL
                       CP 41
                       JR NZ,LOOP
                       DEC DE
                       DEC C
;
FIX:                   LD A,C
                       LD (65362),A
                       JR LOOP
;
; Pf1, drarihop text efter mark|ren, raderar tkn. vid mark|r.
;
PF1:                   EX DE,HL
                       PUSH DE
                       LD D,H
                       LD E,L
                       PUSH HL
FLYT:                  INC HL
                       LD A,(HL)
                       CP 41
                       JR Z,FLYTS
                       LD (DE),A
                       INC DE
                       JR FLYT
FLYTS:                 DEC HL
                       LD (HL),32
                       POP HL
                       POP DE
                       EX DE,HL
                       JR FIX
;
; Pf2, skjuteris{r texten efter mark|ren, sista tkn. raderas.
;
PF2:                   EX DE,HL
                       PUSH DE
                       LD D,H
                       LD E,L
                       PUSH BC
                       LD B,0
HITT:                  INC B              ; Kolla hur m}nga tkn.
                       INC DE             ; som ska flyttas.
                       LD A,(DE)
                       CP 41
                       JR NZ,HITT
                       DEC DE
                       DEC B
                       LD A,B
                       CP 0
                       JR Z,OK
F:                     DEC DE             ; Flytta ett steg }t h|ger.
                       LD A,(DE)
                       INC DE
                       LD (DE),A
                       DEC DE
                       DJNZ F
OK:                    POP BC
                       POP DE
                       LD (HL),32        ; Radera tkn. d{r mark|ren st}r.
                       EX DE,HL
                       JR FIX
;
END
