; TEXT-EDITOR 2/8 ; Anders Franz`n <5258> ; Stockholm April 1985 ; Uppdaterad juli 1985 CUR PUSH HL PUSH BC LD HL,CUR1 LD BC,8 CALL 0:11 ;CUR(23,0) POP HL CHR$(7)"* "; LD C,L OBS B=noll !! POP HL CALL 0:11 RET ; TILLBUFF ; Subrutin som placerar |nskad textrad ; i buffert. ; IN DE = nr p} |nskad rad (OBS att ; f|rsta raden {r nummer ett. TILLBUFF LD HL,(BRAD) Gammal rad LD (BRAD),DE Spara ny rad LD C,L LD B,H XOR A SBC HL,DE Samma rad ? RETZ Ja, retur LD HL,(TXT) JRNC TIL1 Rad < brad LD A,B OR C JRZ TIL1 Ingen brad EX DE,HL XOR A SBC HL,BC Ber{kna antal INC HL rader from brad EX DE,HL LD HL,(PRAD) Bradens prad TIL1 LD B,A B=noll! TIL2 LD A,(HL) L{ngd p} prad AND A Slut p} rader ? JRZ TIL3 Ja, hoppa DEC DE LD A,D Har vi hittat OR E raden ? JRZ TIL3 Ja, hoppa LD C,(HL) L{ngd p} prad ADD HL,BC Peka p} n{sta JR TIL2 TIL3 LD (PRAD),HL LD (SAKNAS),DE PUSH HL LD HL,BUFF1 PUSH HL LD (HL),32 LD E,L LD D,H INC DE LD BC,159 LDIR Blanka buffert POP DE Pekar p} buff POP HL Pekar p} prad LD A,(HL) L{ngd prad AND A Slut p} rader RETZ Ja, retur DEC A Blankrad ? RETZ Ja, retur INC HL F|rsta tecknet LD B,A Antal tecken TIL4 LD A,(HL) Tag tecken INC HL BIT 7,A ? JRNZ TIL5 Ja, hoppa LD (DE),A L{gg ner tkn INC DE DJNZ TIL4 Upprepa RET Klart! TIL5 AND 127 Antalet space ADD E LD E,A Fixa space !! DJNZ TIL4 N{sta tecken RET Klart! ; FR]NBUFF ; Subrutin som sparar textrad som be- ; finner sig i buffert. Raden antas ; ha det nr som finns i (BRAD). SPARRAD LD (BRAD),DE LD A,255 LD (FILFLG),A FR]NBUFF LD HL,(BRAD) LD A,H Finns n}gon OR L rad i buffert ? RETZ Nej, retur LD HL,BUFF1 Pekar p} rad LD DE,BUFF2+1 LD B,160 L{ngd p} raden FR]1 LD A,(HL) Tag tecken INC HL CP 32 Space ? JRNZ FR]3 Nej, hoppa CP (HL) Tv} space ? JRNZ FR]3 Nej, hoppa LD C,1 FR]2 INC C R{kna space DEC B Raden slut ? JRZ FR]4 Ja, gl|m space INC HL CP (HL) Ett till space? JRZ FR]2 Ja, r{kna p} DEC B [r raden slut ? JRZ FR]4 Ja, gl|m space INC B ]terst{ll B LD A,C Antal space SUB 128 Antal < 128 ? JRC FR]3 Ja, bit 7 satt INC A Antal-127 OR 128 S{tt bit 7 LD (DE),A L{gg ner antal INC DE LD A,255 Kod f|r 127 st FR]3 LD (DE),A L{gg ner tkn INC DE DJNZ FR]1 forts{tt FR]4 LD HL,BUFF2 EX DE,HL HL=sista tkn AND A SBC HL,DE EX DE,HL LD C,E LD B,D BC=l{ngd rad LD (HL),C L{gg ner l{ngd LD DE,(SAKNAS) LD A,D Saknas n}gra OR E rader ? JRZ FR]6 Nej, hoppa PUSH HL Ny prad PUSH DE Antal saknade LD HL,(EOT) ADD HL,DE Addera saknade ADD HL,BC Addera radl{ngd EX DE,HL LD HL,(MAX) AND A SBC HL,DE POP DE Antalet saknade POP HL Ny prad JPC ERR Minnet fullt ! PUSH HL LD HL,(EOT) FR]5 LD (HL),1 Fixa en ny rad INC HL DEC DE Minska saknade LD A,D Fattas det OR E {nnu fler ? JRNZ FR]5 Ja, upprepa LD (HL),A Markera slut ! LD (EOT),HL LD (SAKNAS),DE DEC HL LD (PRAD),HL POP HL Ny prad FR]6 LD DE,(PRAD) Gammal prad LD A,(DE) L{ngd p} denna SUB C JRZ FR]9 Lika l}nga JRNC FR]7 Nya {r mindre PUSH HL Ny prad PUSH DE Gammal prad LD HL,(EOT) NEG LD C,A BC=antal bytes ADD HL,BC som fattas EX DE,HL LD HL,(MAX) AND A SBC HL,DE POP DE Gammal prad POP HL Ny prad JPC ERR Minnet fullt ! PUSH HL PUSH DE LD HL,(EOT) PUSH HL AND A SBC HL,DE EX (SP),HL LD E,L LD D,H DE=gammal EOT ADD HL,BC HL=nytt EOT LD (EOT),HL EX DE,HL POP BC Tkn att flytta LD A,B Finns n}got OR C att flytta ? JRZ FR]8 Nej, hoppa LDDR G|r plats JR FR]8 FR]7 PUSH HL PUSH DE EX DE,HL HL=gammal prad LD C,A BC=antal bytes ADD HL,BC att ta bort EX DE,HL LD HL,(EOT) PUSH HL AND A SBC HL,DE EX (SP),HL HL=gammalt EOT AND A SBC HL,BC LD (EOT),HL Spara nytt EOT POP BC Tkn att flytta EX DE,HL POP DE PUSH DE LD A,B OR C JRZ FR]8 INC BC [ven slutbyte ! LDIR FR]8 POP DE POP HL FR]9 LD A,(HL) L{ngd ny prad AND A L{ngden noll ? JRZ FR]10 Ja, klart ! LD C,A LD B,0 LDIR Placera prad FR]10 LD A,(FILFLG) Ska tom rad AND A sparas sist LD A,0 i TED? LD (FILFLG),A RETNZ Ja, retur LD HL,(EOT) LD DE,(TXT) LD BC,(PRAD) FR]11 DEC HL PUSH HL AND A SBC HL,DE POP HL JRC FR]12 LD A,(HL) CP 1 JRNZ FR]12 PUSH HL SBC HL,BC Carry EJ satt ! POP HL JRNZ FR]11 LD BC,0 LD (BRAD),BC JR FR]11 FR]12 INC HL LD (HL),0 LD (EOT),HL LD A,B OR C JRNZ FR]13 LD (PRAD),HL FR]13 AND A Clear carry RET ERR LD HL,ERR1 LD C,ERR2-ERR1 CALL CUR LD A,3 ERROR 3 SCF RET ERR1 DEFM "MINNET [R FULLT." ERR2 EQU $ ; ADR ; Ber{kna adress bildminnet f|r rad ; att skriva ut. Ber{kna antal tecken ; att skriva p} sk{rmraden (B). ADR LD BC,(1:215) B=Sk{rmbredd SUB B Hela raden ? JRNC ADR1 Ja, hoppa NEG LD B,A B=dell{ngd XOR A ADR1 LD E,(IX+0) DE = adress till LD D,(IX+1) bildminnet INC IX Uppdatera INC IX tabellpekare RET OBS! C=254 !!!! ; SKRIVRAD ; Rutin som skriver ut raden i buffert ; p} bildsk{rmen. CTRL-tkn |vers{tts ; till "_X". SKRIV1 anropas av EDITOR. ; Rutinen optimerad f|r att bli s} ; snabb som m|jligt. SKRIVRAD LD A,(SRAD) Sk{rmrad att ADD A skriva rad p} LD E,A LD D,0 LD IX,3:116 Adresstabell ADD IX,DE f|r bildminnet SKRIV1 LD HL,BUFF1 Peka p} rad LD A,(L[NGD) Radl{ngd SKRIV2 CALL ADR DE--> bildminnet PUSH AF SKRIV3 LD A,31 SKRIV4 CP (HL) CTRL-tecken ? JRNC SKRIV6 Ja, hoppa ; F|ljande instruktion "SMART" d} ; r{knaren B ej {ndras d{rf|r att ; C fr}n b|rjan {r st|rre {n maximala ; antalet tecken att skriva (80). LDI Skriv p} sk{rm DJNZ SKRIV4 Fyll hela raden SKRIV5 POP AF Forts{ttning p} AND A n{sta sk{rmrad ? JRNZ SKRIV2 Ja, hoppa RET SKRIV6 LD A,(HL) Tag CTRL-tecknet CP 6 Slut grafik? JRZ SKRIV8 Ja, skriv ut CP 23 Start grafik? JRZ SKRIV8 Ja, skriv ut LD A,"_" \vers{tt CTRL-X LD (DE),A till "_X" INC DE DJNZ SKRIV7 Sk{rmrad ej full POP AF AND A Hela raden klar? RETZ Ja, retur CALL ADR N{sta sk{rmrad PUSH AF SKRIV7 LD A,(HL) Tag CTRL-tecknet ADD 64 G|r stor bokstav SKRIV8 LD (DE),A Skriv p} sk{rm INC DE INC HL DJNZ SKRIV3 Fyll hela raden JR SKRIV5