1 REM Ins{nd av Kristoffer Eriksson <5357>    1988-06-21 19.00.07 (KERMIT)
; Fil: WNDINPUT.ASM 
; Av: Kristoffer Eriksson, "SKE" <5357>. 
; 
;-Ver--/-Datum----/-Sign-/-Kommentar---------------------------------- 
; X.00 / 84-12-03 / SKE  / WNDINPUT 
; 1.00 / 85-05-28 / SKE  / 
; 2.00 / 88-04-17 / SKE  / Anv{nds nu {ven n{r CON: inte {r ett f|nster. 
;                          DE beh|ver nog inte skyddas, s} n}gra PUSH-POP 
;                          har blivit indragna. 
; 
; Kopia av input-rutinen i PROM f|r CON: (CONREAD), modifierad f|r att {ven 
; klara f|nster. 
; 
; (TABPTR)- och DE-initiering g|rs bara vid anrop direkt fr}n drivrutin- 
; interfacet. Vid andra tillf{llen har man redan v{rden d{r, som ger m|jlighet 
; att editera tidigare inmatad text. Se ConsI.Ny i WNDMAIN. 
; 
; HL = Inbuffert 
; DE = Default-str{ng, tempor{rt 
; C  = Max inmatningsl{ngd 
; B  = Antal kvarvarande platser i inbufferten, teckennedr{kning. 


            EXTERN WndInput, INPUT 

LUS.WIN:    =     7                ; LU.STAT  Filen {r ett {kta f|nster. 
IOCM.WRA:   =     4                ; Funktionskod PRINT. 
IOCM.RDA:   =     3                ; Funktionskod INPUT. 
IOCM.RDC:   =     5                ; Funktionskod GET. 
TABPTR:     =     65504            ; Intern variabel, defaultstr{ngspekare. 
ConsI:      =     65424            ; GET-rutin 


; Interface till drivrutiner. 
; LU-initiering g|rs vid utskrift i WndInput, s} det beh|vs inte h{r. 

INPUT:      LD    DE,CR$ 
            LD    (TABPTR),DE 

; Inmatningsrutin. 

WndInput:   LD    B,C 
Loop1:      CALL  Backa            ; Backa vid <- och vid full buffert. 
Loop2:      PUSH  HL 
            PUSH  BC 
            LD    HL,Buf 
            LD    BC,1 
            LD    A,IOCM.RDC 
            CALL  Entry.WND        ; GET, med r{tt sk{rmvidd och position. 
            LD    A,(Buf) 
            POP   BC 
            POP   HL

            CP    3 
            JR Z  Klart 
            CP    13 
CR$:        =     * - 1 
            JR Z  Klart 
            CP    24 
            JR Z  CE#FF 
            CP    12 
            JR Z  CE#FF 
            CP    11               ; Reverse LF 
            JR Z  CE#FF 
            CP    8 
            JR Z  Loop1 
            CP    9 
            JR NZ X2 
            LD    DE,(TABPTR)      ; ->, h{mta n{sta tecken ur default-buffert 
            LD    A,(DE) 
            CP    13 
            JR Z  Loop2 
            INC   DE 
            LD    (TABPTR),DE 
X2:         CP    32 
            JR C  Loop2 
            CP    128 
            JR NC PF 
            LD    (HL),A           ; Lagra tecknet i inbufferten. 
            INC   HL 
Visa:       PUSH  BC               ; Visa det inmatade tecknet i A. 
            PUSH  HL 
            LD    HL,Buf 
            LD    (HL),A 
            LD    BC,1 
            LD    A,IOCM.WRA 
            CALL  Entry.WND        ; Utskrift av tecken i A. 
            POP   HL 
            POP   BC 
            DJNZ  Loop2            ; Forts{tt om bufferten inte {r full. 
            JR    Loop1            ; Radera annars senaste tecken o forts{tt. 

CE#FF:      PUSH  AF 
BLoop:      CALL  Backa            ; Rensa hela inbufferten, och radera 
            JR NZ BLoop            ;   p} sk{rmen, f|r CE och FF. 
            POP   AF 
            CP    24 
            JR Z  Loop2 
            INC   B 
            JR    Visa             ; F|r FF: Visa FF s} sk{rmen rensas. 

PF:         LD    A,53             ; Funktionstangenter ger Error 53. 
            SCF 
Klart:      LD    (HL),13          ;Avsluta inbufferten. 
            LD    (IX+LU.FC),IOCM.RDA ; ]terst{ll till "INPUT" 
            LD    DE,(TABPTR)      ; Ifall n}gon rutin v{ntar sig att DE ska 
            RET                    ;   vara kvar. 

; Backa ett tecken p} sk{rm och i inbuffert. 

Backa:      LD    A,B 
            CP    C 
            RET   Z 
            PUSH  HL 
            PUSH  BC 
            LD    HL,Backa$ 
            LD    BC,3 
            LD    A,IOCM.WRA 
            CALL  Entry.WND        ; Utskrift p} samma fil som inmatning 
            POP   BC               ;   g|rs fr}n, s} LU-hanteringen st{mmer. 
            POP   HL 
            DEC   HL 
            INC   B 
            RET 

Backa$:     DEFB  8," ",8 
Buf:        DEFB  0                ; CONSI- och PRINT-buffert. 
