1 REM Ins{nd av Stig Johansson <664> 1987-10-23 07.36.41 (SEND) ; TEDI.ASM ; ASM-kod med kommentarer till rutiner inf|rda i TED. ; Det {r huvudsakligen dessa rutiner som skiljer TEDI ; fr}n TED. ; Stig Johansson < 664 >. 871022 ;.................................................... ; Detta {r rutinen "CTRL-GV" med vilken man kan flytta hela ; texten }t h|ger eller v{nster till |nskad v{nster-marginal. VMARG: LD HL,VTXT Utskrift texten "V-marg." LD BC,9 CALL CUR LD HL,VBF1 LD BC,3 PUSH HL CALL 5 Fr}n tangentbordet till VBF1 POP HL |nskad v{nster-marginal. LD A,(HL) CP 13 Om RETURN JP Z,TANGENT tillbaks. LD HL,VBF1 Omvandla talet i VBF1 till bin{rt. LD A,(6174) Men kolla f|rst datorns check-summa, CP 126 [r det ch-sa 11273 ? PUCH AF CALL Z,6174 Ja ! POP AF CALL NZ,6172 Nej det {r ch-sa 9913 eller 10042. EX DE,HL Bin{ra talet till HL LD (VBF2),HL och lagra det i VBF2. ; Nedanst}ende rutin kollar antalet rader i texten som skall f|rses ; med space-byte. De rader som b|rjar l{ngst ut till v{nster,saknar ; spacebyte. Genom att dessa rader f|rses med space-byte och d{rmed ; blir en byte l{ngre m}ste hela texten i minnet f|rst flyttas fram ; (bakifr}n),s} m}nga byte, sedan flyttas texten tillbaks och sam- ; tidigt f|rses med dessa byte. LD HL,(VBF4) Text-radens start-adress. VLOOP: LD DE,0 LD A,(HL) H{mta radens l{ngd-byte. CP 0 Om l{ngdbyten {r noll {r texten slut, hoppa JR Z,VEND1 d} till text-flyttn och byte-komplementering. LD E,A Annars spara l{ngden i E. INC HL CP 1 Om tom rad hoppa. JR Z,VV1 LD A,(HL) H{mta radens andra byte, CP 128 om den {r >128, har raden redan space-byte. JR NC,VREF hoppa d} till test referens-punkt. PUSH HL Spara rad-adressen. LD HL,(VANT) INC HL I VANT lagras hur m}nga rader LD (VANT),HL som saknar space-byte. ; Texten kanske redan har V-marg. och raderna b|rjar p} olika kolumner. ; Referenspunkt {r d} den kolumn,som den rad b|rjar p},som ligger l{ngst ; ut till v{nster. Fr}n denna ref-punkt skall sedan hela texten flyttas. LD A,128 F|r de rader som saknade space-byte blir LD (VREFBF),A nu space-byten 128 =l{ngst t.v. POP HL VV1: ADD HL,DE Ber{kna n{sta rad-adress. DEC HL JR VLOOP VREF: PUSH HL LD HL,VREFBF I VREFBF lagras l{gsta space-byten, den CP (HL) som skall vara ref-punkt. JR NC,VRET LD (HL),A VRET: POP HL JR VV1 VTXT: DEFM "V-marg. :" VEND1: PUSH HL LD HL,VANT Om (VANT) =noll, har alla rader redan LD A,(HL) space-byte, texten i minnet beh|ver ej INC HL framflyttas LD C,(HL) OR C POP HL JR Z,VNOT = hoppa till VNOT. ; Koll om minnesutrymme finns f|r f|rl{ngning med en byte av de rader ; som saknade space-byte. Annars till NOMEM f|r utskrift text och ; hoppa ur rutinen. PUSH HL LD HL,(VANT) HL =ant.rader utan space-byte. EX DE,HL DE = -"- LD HL,(EOT) HL = adr.textslut. ADD HL,DE INC HL Blivande text-slut. EX DE,HL LD HL,(MAX) Adress f|r fullt minne. SBC HL,DE Om subtraktionen blir negativ finns POP HL det ej utrymme. JP M,NOMEM Hoppa d} ur. ; Nu skall texten framflyttas - med b|rjan p} sista raden LD DE,(VBF4) Textens start-adress. PUSH HL Spara textens slut-adress. SBC HL,DE Ber{kna textens storlek. LD B,H LD C,L BC =textstorlek =ant.byte att flytta. INC BC LD DE,(VANT) DE = antalet byte texten skall framflyttas. POP HL PUSH HL ADD HL,DE HL = ny text-slut-adress. EX DE,HL DE = -"- POP HL HL = ursprungliga slut-adress. LDDR Flytta texten !!. VNOT: LD DE,(VANT) LD HL,(VBF4) ADD HL,DE HL = textens start-adress efter framflyttningen. ; Utr{kna antalet steg +/- fr}n ref-punkten. LD A,(VREFBF) LD E,A E= ref-byten. LD A,(VBF2) A= |nskad v{nster-marginal SET 7,A A= A+128 CP E J{mf|r. JR C,VR1 Om texten skall flyttas }t v{nster, A < E ,hoppa. SUB E annars A-E = antalet kolumner }t h|ger. JR VR2 VR1: LD B,A Kasta om LD A,E A och LD E,B E. SUB E A = ant.kolumner }t v{nster. PUSH HL LD HL,VBF3 Markera med " 2 " i VBF3 LD (HL),2 att texten skall flyttas }t v{nster. POP HL VR2: LD (VREFBF),A Till VREFBF ant. kolumner att flytta texten. ; F|ljande rutin kompletterar rader med space-byte, om space-byte ; saknas samt {ndrar space-bytens v{rde till r{tt antal space. VLOP2: LD A,(HL) CP 0 Om radl{ngsbyten {r noll {r texten slut. JR Z,VEND2 LD E,A E= radens l{ngd. LD D,0 CP 1 Om tom rad JR Z,VHARTAB hoppa. INC HL LD A,(HL) Testa om radens andra byte {r CP 128 en space-byte JR C,VX2 Hoppa om space-byte ej finns. PUSH HL LD HL,VREFBF LD C,(HL) C = ny V-marginal. LD B,A Spara A i B. LD A,(VBF3) CP 2 Om VBF3 inneh}ller "2" skall texten LD A,B flyttas }t v{nster, JR Z,VX1 = hoppa till VX1 ADD A,C annars addera JR VX och hoppa. VX1: SUB C Texten }t v{nster =subtrahera ist{llet f|r add. VX: POP HL LD (HL),A L{gg in den nya space-byten. VX2: CP 128 DEC HL Backa till plats f|r l{ngd-byten. JR NC,VHARTAB Hoppa om space-byte finns. LD A,(VREFBF) SET 7,A LD (HL),A L{gg in space-byten p} platsen f|r l{ngdbyten. DEC HL Backa ett steg till. INC E INC gamla l{ngdbyten LD (HL),E och l{gg in den som f|rsta byte i raden. VHARTAB: LD C,E LD B,0 BC= radl{ngd,= antal byte att flytta. LD DE,(VBF4) DE= till adress. LDIR Flytta tillbaks raden. LD (VBF4),DE Spara flytta-till-adressen. JR VLOP2 NMTXT: DEFM "MINNET R[CKER EJ !" NOMEM: LD HL,NMTXT LD C,18 CALL CUR Utskrift text "MINNET R[CKER EJ" JR VEND3 Till }terst{lln. buffrar och uthopp. VEND2: LD HL,(VANT) ]terst{llning av buffrar. EX DE,HL LD HL,(EOT) ADD HL,DE Ber{kna textens nya slutadress LD (EOT),HL och lagra den i EOT. LD HL,SLUT LD (VBF4),HL Textens f|rsta adress. VEND3: LD HL,0 LD (VANT),HL Noll-st{ll LD (VBF3),HL buffrar. LD A,255 LD (VREFBF),A JP TILLBUFF K L A R T . ; Denna rutin kunde f|renklas om man ist{llet {ndrade i TED-s ; rutin FR]NBUFF s} att spacebyte lades in som andra byte p} alla ; rader, {ven p} de som {r skrivna med b|rjan l{ngst till v{nster. ................................................................. ; K{llkoden med kommentarer till rutinen DELETE STYCKE. ; I nedanst}ende kommentarer anv{nder jag begreppet STYCKE f|r ; den text som skall raderas, och begreppet TEXT f|r |vrig text. DELBLK: LD A,(DBFLG) Har f|rsta CTRL-E tryckts ? DEC A JR Z,DB1 Ja - hoppa till raderning. LD A,1 Nej detta {r f|rsta CTRL-E LD (DBFLG),A = markera flaggan med 1. LD HL,(RAD) Lagra radnummert p} vilken mark|ren LD (DB2BUF),HL befinner sig i DB2BUF. LD HL,(PRAD) Lagra denna radens adress LD (DB1BUF),HL i DB1BUF LD HL,(\VERST) Lagara |versta radens nummer LD (DB3BUF),HL i DB3BUF. LD HL,KOP1 Skriv p} nedersta raden : LD C,19 "MARKERA SISTA RADEN" CALL CUR Utskrift. JP TANGENT Hoppa till n{sta TANGENT-tryckn. ** R A D E R A ** DB1: LD HL,(PRAD) H{mta styckets sista rad-adress. LD A,(HL) H{mta den radens l{ngd. LD E,A F|r {ven sista raden i det markerade LD D,0 stycket skall bort. ADD HL,DE Eft.ADD:HL=styckets sista rads slut-adr. PUSH HL Spara denna adress. LD DE,(DB1BUF) H{mta styckets f|rsta rads start-adress. DEC HL SBC HL,DE HL blir =antal byte som skall bort. POP HL Om talet {r negativt, har felaktig JP M,DB4 radmarkering skett, hoppa d} ur rutinen. PUSH DE Annars spara styckets start-adr. PUSH HL Spara styckets sista adress. EX DE,HL DE= -"- LD HL,(EOT) HL= hela textens slutadress. SBC HL,DE Texten efter stycket som skall bort, INC HL skall flyttas till styckets f|rsta adress, LD B,H och d{rmed radera stycket. LD C,L BC= l{ngden p} texten som skall flyttas. POP HL HL= F|rsta adr.till texten efter stycket. POP DE DE= Dit texten eft.stycket ska flyttas. LDIR Flytta texten eft.stycket= radera stycket. EX DE,HL HL- 1 = textens nya slutadress. DEC HL Texten i minnet har blivit mindre = LD (EOT),HL l{gg in nya slutadressen. LD (BRAD),BC Rad noll i buffert. DB3: LD HL,(DB2BUF) ]terst{ll LD (RAD),HL rad-nummert. LD HL,(DB3BUF) ]terst{ll sidans |versta LD (\VERST),HL radnummer. XOR A LD (DBFLG),A Nollst{ll DELETE-flaggan. JP EDITOR KLART !!. DB4: LD HL,KOP5 Utskrift "OTILL]TEN MARKERING" LD BC,22 CALL CUR JP DB3 Till }terst{lln.buffrar och uthopp. ; N{r man trycker CTRL-E hamnar man i ovanst}ende rutin "DELBLK." ; DELLINE har jag tagit bort. I TANGENT-rutinen under TAN9 ; har jag inf|rt att n{r flaggan (DBFLG) har en 1-a ; skrivs ut p} |versta raden. ..................................................................... ; MENY-val f|r andra CTRL-tecknet. ; N{r man trycker CTRL-G kommer man till denna rutin. ZC: DEFM "CTRL ( K,G,Y,Q,V,W )" ZCTRL: LD HL,ZC LD C,20 LD DE,(65011) PUSH DE CALL CUR Utskrift "CTRL ( K,G,Y,Q,V.W )" POP DE LD (65011),DE CALL GET H{mta in andra CTRL-tecknet fr.tangentbordet. CP 11 JP Z,KLICK K = till KLICK CP 7 JP Z,ORDMODE G = till ORDMODE CP 25 JP Z,HM[RKE Y = H-m{rk med #. CP 17 JR Z,CTRL Q = Controlltecken till texten. CP 22 JP Z,VMARG V = [ndra v{nster-marginalen. CP 23 JR Z,WMARG W = S{tt v{nstermarginal vid 1-ta TAB-markeringen. JP TAN14 ;............................................... ; S{tt v{nster-marginal med CTRL-GW WMARG: LD HL,WMGFLG LD A,(HL) Skall V{nster-marginal s{ttas ? AND A {r A =noll JR NZ,WM1 nej A {r ej noll,V-marg. skall kopplas ur =hoppa. INC A jo A =noll, INC A till 1 JR WM2 och hoppa till lagring av A i WMGFLG. WM1: XOR A Koppla ur , allts} nollst{ll A WM2: LD (HL),A lagra A i WMGFLG. JP TANGENT ..................................................... ; Fr}n TED-s rutin BRYT kopplas nedanst}ende rutin in f|r ; varje ord-brytning om ordmode och v{nstermarginal {r , inkopplade. ; I rutinen RETURN h{mtas f|rsta TAB-markeringen in med ; rutinen WM3, om v{nstermarginalen {r satt. ; I bufferten KOL lagras d} denna TAB-markering .N{r man ; sedan trycker RETURN hamnar mark|ren p} den TAB-markerade ; kolumnen ist{llet f|r l{ngs bort i v{nsterkanten. WM4: CALL WM3 Leta fram f|rsta TAB-markeringen. EX DE,HL LD HL,BUFF1+159 PUSH HL SBC HL,DE Ber{kna radens slutadress i BUFF1. PUSH HL LD DE,BUFF1 Ber{kns radens l{ngd. SBC HL,DE LD B,H LD C,L BC= radens l{ngd. INC BC POP HL POP DE LDDR Flytta fram raden i BUFF1, bakifr}n. LD A,(WTAB) LD B,A LD A,32 EX DE,HL WMLOP: LD (HL),A L{gg in space framf|r raden. DEC HL DJNZ WMLOP RET WM3: LD HL,TABRAD1 LD BC,158 Max-position f|r TAB PUSH HL LD A,127 CPIR Leta fram f|rsta TAB-markeringen p} POP DE TABRADEN. LD A,C Om C =noll AND A ingen TAB-markering JR Z,WM3B = hoppa. SBC HL,DE DEC HL LD (WTAB),HL Spara vilken kolumn som har makeringen. RET WM3B: LD HL,0 Nollst{ll HL f|r KOLumn i rutin RETURN, LD (WTAB),HL ingen space framf|r texten.(rutin WM4). RET ................................................................. F|rutom att jag inf|rt dessa rutiner har jag {ven gjort div. {ndringar i TEDI j{mf|rt med TED. Rutinen som skriver ut hj{lp-raderna har jag gjort om s} att den blir lite smidigare. Som synes har jag {ndrat markeringarna av inkopplade rutiner p} raden ovanf|r TAB-linjalen. Detta f|r att f} plats med fler markeringar och {nd} passa f|r 40-teckens sk{rm. Jag har inf|rt att man med h|gerpilen kan h{mta ut tidigare anv{nt filnamn inte enbart f|r SKRIVFIL utan {ven f|r L[SFIL. Likas} om man vill anv{nda tidigare s|k-ord. Samtidigt som man h{mtar filnamn eller s|kord med h|gerpilen,kan man redigera resp. ord el. filnamn. Med en rutin fr}n Kjell Svensson <5318> har jag snabbat upp tangentbordsrepetitionen vilket g|r TEDI smidigare att arbeta med. ======================================================================