; TEXT-EDITOR 7/8 ; Anders Franz`n <5258> ; Stockholm april 1985 ; Uppdaterad juli 1985 KOPIA LD A,(KOPFLG) DEC A JRZ KOP2 DEC A JRZ KOP4 LD A,1 LD (KOPFLG),A LD HL,(RAD) LD (255:250),HL LD HL,KOP1 LD C,KOP2-KOP1 CALL CUR JP TANGENT KOP1 DEFM "MARKERA SISTA " DEFM "RADEN ATT KOPIERA." ; (255:250) = RAD1 ursprungsrad ; (255:252) = RAD2 sista ursprungsraden ; (255:254) = RAD3 destinationsraden KOP2 LD A,2 LD (KOPFLG),A LD HL,(RAD) LD (255:252),HL LD HL,KOP3 LD C,KOP4-KOP3 CALL CUR JP TANGENT KOP3 DEFM "MARKERA DESTINATION " DEFM "F\R KOPIA." KOP4 CALL FR]NBUFF JPC TANGENT XOR A Clear carry LD (KOPFLG),A LD HL,(255:250) RAD1 LD DE,(RAD) LD (255:254),DE Spara RAD3 PUSH DE Spara rad SBC HL,DE RAD3 <= RAD1? LD C,A Kod "bak}t" JRNC KOP6 Ja, hoppa INC C Kod "fram}t" LD HL,(255:252) RAD2 AND A SBC HL,DE RAD3 > RAD2 ? JPC KOP6 Ja, hoppa POP DE LD HL,KOP5 LD C,KOP6-KOP5 CALL CUR JP TANGENT KOP5 DEFM "OTILL]TEN DESTINATION." ; KOMMANDO: ; C=0 Kopiering av rader BAK]T ; C=1 Kopiering av rader FRAM]T KOP6 LD A,(254:7) CTRL-C ? AND A LD A,255 JPNZ KOP9 Ja, hoppa LD DE,(255:254) RAD3 destina- LD (RAD),DE tion PUSH BC CALL TILLBUFF H{mta rad CALL INSL Skjut in ny POP BC JPC KOP9 Minnet fullt LD HL,(PRAD) PUSH HL LD HL,(SAKNAS) PUSH HL LD DE,(255:250) RAD1 orginal BIT 0,C JRNZ KOP7 INC DE En inskjuten! KOP7 LD (RAD),DE PUSH BC CALL TILLBUFF H{mta rad POP BC POP HL LD (SAKNAS),HL POP HL LD (PRAD),HL LD HL,(255:254) Destination LD (BRAD),HL f|r kopian PUSH BC CALL FR]NBUFF Spara kopia POP BC JRC KOP9 Minnet fullt LD HL,(255:254) Destination INC HL |kas pga LD (255:254),HL inskjuten rad LD HL,(255:252) Sista orginal LD DE,(255:250) \ka RAD1 pga INC DE ny rad BIT 0,C Fram}t ? JRNZ KOP8 Ja, hoppa INC DE INC HL Ny sista LD (255:252),HL orginalrad KOP8 LD (255:250),DE N{sta orginal XOR A A <-- noll SBC HL,DE Fler rader ? JRNC KOP6 Ja, upprepa KOP9 POP HL LD (RAD),HL RET Visa sida KLICK LD HL,KLKFLG KLICK1 LD A,(HL) XOR 255 KLICK2 LD (HL),A JP TANGENT INSMODE LD HL,INSFLG JR KLICK1 ORDMODE LD HL,ORDFLG LD A,(HL) INC A CP 3 JRC KLICK2 XOR A JR KLICK2 BRYTAV CALL BRYT Bryt av raden JPC TANGENT Minnet fullt JP SIDTEST Fixa |verst BRYT CALL FR]NBUFF Spara rad RETC Minnet fullt CALL INSL Skjut in ny rad RETC Minnet fullt LD HL,160 LD DE,(KOL) Ber{kna antalet SBC HL,DE tkn from mark|r PUSH HL LD C,L Observera att LD B,H BC alltid > noll LD HL,BUFF1 HL pekar p} rad PUSH HL ADD HL,DE HL pekar p} tkn PUSH HL LD E,L d{r mark|r {r LD D,H LD (HL),32 Blanka raden INC DE from d{r mark|r LDIR befinner sig LD A,(ORDFLG) CP 2 Rak marginal ? CALLZ RAK Ja, fixa detta LD HL,(RAD) Nya tomma raden LD (BRAD),HL byts ut mot den CALL FR]NBUFF f|rsta halvan LD DE,(RAD) INC DE H{mta orginal- LD (RAD),DE CALL TILLBUFF raden POP HL Plats f|r mark|r POP DE F|rsta position POP BC Antal tecken LDIR Flytta fram den LD L,E bakre halvan LD H,D LD (HL),32 Blanka slutet p} INC DE raden LD BC,(KOL) INC BC LDIR CALL FR]NBUFF Spara rad XOR A LD (KOL),A DEC A LD (SIDFLG),A Visa sida AND A RET ; RAK H\GERMARGINAL ; Rutin som skjuter in mellanslag ; mellan l{mpliga ord i en rad s} ; att en rak h|gerkant bildas. RAK LD BC,(L[NGD) LD A,(HMARG) AND A Saknas marginal? JRZ R1 Ja, kant g{ller CP C Marg > radl{ngd? JRNC R1 Ja, kant g{ller CP 5 Marg < 5 ? RETC Ja, ignorera ! LD C,A R1 DEC C BC=h|germarginal LD HL,BUFF1 Peka p} rad LD A,32 Blanktecken R2 CPI Skippa ev RETPO inledande blanka JRZ R2 CPIR Leta n{sta RETNZ Finns ej DEC HL HL --> blank INC BC LD E,L LD D,H ADD HL,BC DEC HL Sista kolumnen LD IX,251:0 Slaskvariabler LD (IX+0),B Nollst{ll (B=0) R3 INC (IX+0) Ber{kna antalet CPD blanka som RETPO saknas i raden JRZ R3 DEC (IX+0) RETZ Inga saknas CPDR Leta blank RETNZ Saknas INC HL HL --> blank INC BC LD (IX+1),C Spara antal tkn LD A,(RAD) Kolla om rad {r AND 1 udda eller j{mn JRZ R4 Hoppa om j{mn EX DE,HL B|rja bakifr}n R4 LD L,E F|rsta position LD H,D att testa LD C,(IX+1) Antal tecken LD B,0 att testa R5 CALL INSERT Skjut in ett LD (HL),32 blanktecken DEC (IX+0) Ett mindre kvar RETZ Klart INC (IX+1) Ett tkn till LD A,(RAD) J{mn eller udda AND 1 rad ? LD A,(HL) Tag blanktkn JRNZ R7 Hoppa om udda INC C Ett tkn till R6 CPI Testa tkn JPPO R4 Rad slut JRZ R6 Skippa blanka CPIR Leta n{sta JRNZ R4 Finns ej fler JR R5 Upprepa R7 INC DE Ny sistaposition R8 CPD Testa tkn JPPO R4 Rad slut JRZ R8 Skippa blanka CPDR Leta n{sta JRNZ R4 Finns ej fler INC HL Peka p} blanktkn INC BC som hittats JR R5 Upprepa BRYTIHOP CALL FR]NBUFF Spara rad JPC TANGENT LD HL,BUFF1 LD DE,BUFF2 LD BC,160 LDIR Kopiera raden LD DE,(RAD) DEC DE LD A,D Befinner vi oss OR E p} rad ett ? JPZ TANGENT Ja, ignorera CALL TILLBUFF H{mta f|reg}ende LD HL,BUFF1+159 Sista tecknet LD BC,160 LD A,32 CPD Leta radslut JPNZ TANGENT Raden {r full BRYTI1 LD A,32 CPD Annat {n space? JRNZ BRYTI2 Ja, hoppa LD A,B Hela raden OR C genomletad ? JRNZ BRYTI1 Nej, upprepa DEC HL BRYTI2 LD BC,(KOL) Antal tecken INC BC att flytta INC HL INC HL Sista position EX DE,HL LD HL,BUFF2 LD A,(HL) F|rsta tecknet CP 32 ett space ? JRZ BRYTI3 Ja, hoppa INC DE L{mna en blank BRYTI3 PUSH HL LD HL,BUFF1+160 AND A SBC HL,DE F}r tecknen att SBC HL,BC flytta plats p} POP HL raden ovan ? JPC TANGENT Nej, ignorera ! PUSH BC LDIR Fyll ut raden CALL FR]NBUFF Spara raden LD DE,(RAD) CALL TILLBUFF H{mta orginalrad POP BC Gammal kolumn +1 PUSH BC LD HL,BUFF1 LD E,L LD D,H ADD HL,BC F|rsta tkn som LD A,160 {r kvar p} rad SUB C Antal tkn kvar LD C,A Finns tkn kvar ? JRZ BRYTI4 Nej, hoppa LDIR Flytta v{nster BRYTI4 POP BC Gammal kolumn LD L,E LD H,D INC DE LD (HL),32 Fyll ut radslut LDIR med blanka CALL FR]NBUFF XOR A Placera mark|r LD (KOL),A i position ett DEC A LD (SIDFLG),A Visa sida ; forts{tt ner i SIDTEST SIDTEST LD HL,(RAD) LD A,(SCRFLG) AND A JRNZ SIDT1 DEC HL LD DE,(SIDSTORL) Rader/sida CALL DIVISION INC HL LD DE,(SIDNR) Aktuell sida XOR A [r det samma SBC HL,DE sida {nnu ? JRZ SIDT3 Ja, hoppa RET Nej, retur SIDT1 LD DE,(\VERST) XOR A PUSH HL SBC HL,DE RAD < \VERST ? POP HL JRC SIDT2 Ja, hoppa LD BC,(SIDSTORL) SBC HL,BC JRC SIDT3 PUSH HL AND A \VERST > RAD SBC HL,DE - SIDSTORL + 1 ? POP HL JRC SIDT3 Ja, hoppa INC HL SIDT2 LD (\VERST),HL RET SIDT3 LD A,(T\MFLG) Skall sk{rm AND A t|mmas ? JRNZ SIDT4 Ja, hoppa LD A,(SIDFLG) Ska sida visas? AND A JRNZ SIDT4 Ja, hoppa LD A,(BYTFLG) P}g}r utbyte ? AND A JPZ TANGENT Nej, hoppa SIDT4 XOR A RET Visa sida RJUST LD BC,(KOL) Ny kolumn INC C LD A,(L[NGD) Radl{ngd RJUST1 CP C Kol inom raden ? RETNC Ja, retur ADD 40 \ka radl{ngd LD (L[NGD),A Spara LD (T\MFLG),A Sida ska visas PUSH HL LD HL,(RAD) Fixa \verst LD (\VERST),HL annars fel i POP HL scroll-mode !! JR RJUST1 SLUT EQU $