From d4eb6c480e6d2ad439acb1058d3b5c3f7b7fd8bf Mon Sep 17 00:00:00 2001 From: Bobbi Webber-Manners Date: Thu, 31 Oct 2019 19:18:20 -0400 Subject: [PATCH] Implemented simple command line editing in CCP --- SOFTCARD80.ASM#040000 | 39 +++++++++++++++++++++++++++++++++++---- SOFTCARD80.BIN#041000 | Bin 43011 -> 43011 bytes zapple2.po | Bin 819200 -> 819200 bytes 3 files changed, 35 insertions(+), 4 deletions(-) diff --git a/SOFTCARD80.ASM#040000 b/SOFTCARD80.ASM#040000 index 1f56cbb..2ee39e1 100644 --- a/SOFTCARD80.ASM#040000 +++ b/SOFTCARD80.ASM#040000 @@ -742,7 +742,8 @@ C_WRITESTR LD A,(DE) ; Fetch character from string ; DE points to the string buffer. First byte of the buffer is the capacity ; of the buffer. This function writes the number of bytes written in second ; byte. Entry finishes on CR or when the buffer is filled up. -; TODO: Line editing is supposed to be supported here +; Supports ^H, DEL for deleting a character +; Supports ^Z for deleting entire line (since ^X doesn't work with RDKEY C_READSTR LD H,D ; HL will be the working pointer LD L,E ; ... INC HL ; Advance to first character ... @@ -754,10 +755,16 @@ C_READSTR LD H,D ; HL will be the working pointer CRSL1 PUSH HL ; Preserve HL CALL C_READ ; Read a character into A POP HL ; Restore HL - CP 13 ; Carriage return? + CP 13 ; Carriage return ^M pressed? RET Z ; If so, we are done - CP 10 ; Line feed? + CP 10 ; Line feed ^J pressed? RET Z ; If so, we are done + CP 8 ; Backspace ^H pressed? + JP Z,CRSS2 ; Handle backspace + CP 7FH ; Delete key pressed? + JP Z,CRSS1 ; Handle delete + CP 26 ; ^X pressed? + JP Z,CRSS3 ; Handle ^X LD B,A ; Stash character in B LD A,(IX+0) ; Buffer capacity -> A SUB (IX+1) ; Subtract characters read @@ -767,7 +774,31 @@ CRSL1 PUSH HL ; Preserve HL INC HL ; Advance to next character INC (IX+1) ; Increment character count JP CRSL1 ; Loop - RET + RET ; +CRSS1 LD E,8 ; Print two backspaces (^H) + CALL C_WRITE ; ... + CALL C_WRITE ; ... + LD E,' ' ; Print two spaces to erase chars + CALL C_WRITE ; ... + CALL C_WRITE ; ... + LD E,8 ; Print two backspaces (^H) + CALL C_WRITE ; ... + CALL C_WRITE ; ... +CRSS2 LD E,' ' ; Print space to erase character + CALL C_WRITE ; ... + LD E,8 ; Print backspace (^H) + CALL C_WRITE ; ... + LD A,(IX+1) ; Get character count + CP 0 ; See if it is zero + JP Z,CRSL1 ; If so, back to top of loop + DEC HL ; Delete previously-entered character + DEC (IX+1) ; Decrement character count + JP CRSL1 ; Back to top of loop +CRSS3 LD A,0 ; Set character count to zero to ... + LD (IX+1),A ; ... cancel the entire entry + LD E,13 ; Print a carriage return + CALL C_WRITE ; ... + RET ; Done ; Returns 0 in A and L if no chars waiting, non zero otherwise C_STAT LD A,3 ; CMD=3 means peek at keyboard diff --git a/SOFTCARD80.BIN#041000 b/SOFTCARD80.BIN#041000 index 624c693b78175fa5e99905eb8746d0c05dd05559..f968bf63e7aa51f988e95195cd24a8c6ff6e26e9 100644 GIT binary patch delta 2731 zcmZ`*eQZg5T z?t9OavM!46$M1aIbM86!yvc=z$%Tg5W{x9gTwF&(Q(J)wQh4<_&$`2;Mdo_}azzeEgmG2XQVj zmMA9PO*oT#l2?-b!jLc}2trmU2*-rWLUD=+RQQ*$KlPtfmw2~WoGMQ3$0w%Vd{TF) z#kd|*C*!(TJsTg;qDXs{)6rYs^J`l;WhhQM9ken9|D8T-zIksDwI~RvL-Ag1E0YK# zEy8uWfE&LQ?}>exIYM66Td%If2SPTq^!M4I4V9GDIJi$Lw3sMsyf{t2Eml^lCE6g;O3{3m%(pd)!W5whWxh&%W=<_DS5z_&2nC9OnSN-Ggxs1xz7f*tL4 z0#~H;9AVm@dYbETBWDzjH=PL9qYAo?CPKZ~v~@HAa`>KvH?|jh_F_7gV52=j2h+f~ znBdnJxL)M!a!I9Ni?lqv3DG|TMZK0#N{JGfApw^Zx|w22nzHufXJwW5On&AwI60W~ zOd!j3p5$rF@NzI&uF!WG{h=fy0uO|S(JivFIavnx%0~3Gsupzzx8tA-Yf+!Jvzbmx zU13}b-i!IIEJpgEswDLtY(Vmx$v}r0RyXF?804?37whC0(3z4gKK-zKHd)dlux<{u zVSPfrm}C*<;O8_WTe)F*)Bm@8hX9sgK=L-BZuvIMuQMzglwIl;lMIF(rsb~)_)p0V zF(V`RUs-PN5h#~1uGEa(5y1+a#?xuI`4}_CJU zF|kh=K)>$1dRDm7x?O%v2zk+L(2I!Mkz>HGg)fFS0K0nfr-SpF& ztn|0UZyX^ogqI%)nT7$$AKy6HO}7D*UFttga{XlZ zL~4BtMD;x@s-0rsZ&*q3+!(HTA`a=+Gjl*{}JPNznlW z`8Cn692diV4A%U1#F)#X-Ys7c!`mDO^hR~Tl(8|PSx~bQLF7Y-og08F2JgVEwBmN9Hn84mX{bUr!tF2gGEl1w7EwwF+Gn%T<_uoGw=Z zdLML<5`pIh9vM29c5s`GrwD+4c#Ryu^3^8x`sgnCFD5TSXdvV+oKx=r9HzUaP%BLR zQpf|-{SvOFAN5A1?gtJn#RwgfAcx5-^qBMtJs};U$MB%^C94}jYkENnbnVQ94kIu` zB)vg)WC8OG*QCo*&-t2~pTzsbND_Q4EI?+2vDr>AQx)oLdq zet#5<&t`g~i}wz|(BSt+NN+FHGyZO7ZA{J(os&PwIOyr@%RzWTvYFcD3Oo_4bHcWm zf%t}Z1Q(~nyMw=<4i5(ZFkQY>wGr@42iZosCwq(Rh|zWHvL>@l?#&W?jlAa;<{1CX z=WyHQVS|rAvLpFBus)v!i=6ztv1GOn8!I?8;Ei&+zSC`TvAzb%8u_R79ntOb8?ZT@ zB~VwIe;t9MS-~%6yJH_^cY4ps|H%5=U5b_sBi5ljZ%^}cS^7t~AK96s@8^_}9K$YK z*ljs_XWqh83%fHn|8O1qorOJ^n}4K^RV-|8ZvK}HGZNK9N2bkiLk9(8KhN=qGwTG3 zfSZ8i?O?g|Vh;R&BgdNUr5xQJH$QGDGQS(l9q|xGf*ehlfae;1A$L~{nkSm0_Pl2V zu|{dEm5*~ZU~;3;8hm$Dp}d^u)y?^E^Le>BZ+weXNoSuyQ@nXg9mqRbf$zxIO%c#( z5~1AyU4e#O1d&t zhJzi1ZhAalEfeBH7w0a_jDJBqr9jPc@IwGyT9_H<#8a@6ug{D(h^Hu9|8{9+e64tj z@!+52TZUF=#v6?-(A4IW<2E2nzz?=pHhyM1A2>PAF`V9IE#B@wIo<%g3|!dt>AL*b KnYH*A>;4P!!1d<< delta 2654 zcmZ`*e{2)?75~~v6PqMXjH47eRq(~2b%_>L*LKYem<9&vXd1$_?H|$-O)IEtRW?Lt zp!A%C)jpr^{NwIuCq=EaG*Y*zmC>je8B!qMgTh_&-Ebze71bM_nz>($LD?Cd*AoIKc3Irbe_5CJlE`SaOYbb9nPlfD%qI|SB`phRq3nqyR5nQ zx_W-3PMh3%M`nH_lTVVYrm|O6_L|DRuQKDPy8|%@b#Fr5exz|qf2?QQ@%TiXkG~ne z5O3#4_!K|KHzvjt_YzIQHesi*N7yF}3#Wvs7$-~$KNdD8&n17IyqlbgO~p1VZ^W)| z94vCE_?p8+H@*`rKH|{65m)BpTcaiFU4PkZTl{H!FjSA0{&J43M>*}iIILMOkP$v# zWCm2yA{JIkIdV-hD@Gg7b|D99b9ettX5OU+OoZF`(5$=?@vs{d#;E|-)2xscX(iH{ zTZsfhU5LSI1KRHfRwQ>+r`Esuykn~exj7RVU*XwWD!|qdAG#ykzJ_?vQv}{0^(bDC zLfU!SUWyZ^1jHoIEU1oN5|0XkkvQ(ZjP9)6Tv_bfEqNl@7t0pr)x5Pun@tXJnkW(X%1k4Hi zTq0MDz_>YdT{g$@ab+%Xe-!-W|G%FyH3SX9%d37CWk$FBSdu4e&J++hfm{6q@nMoD4xed9$_B2ftU)6X_nGiN@A5ip$aeC-l zx0~+8=Y$X1cHo0T$dAskex!R`Sqi)$ggOD}M0yW^46DFttr$~ELHPWbo!S?f;^A%* z{GZg`pM;R1LAW#d8L9PAv6cDGWYMXJcdki1O`%#% z;jfZCZz&#;akMKBiH|xqD~H9dXiVhHfN?-{oisNXBciJqLCwKpQ0o_6AixL3pmsnE z_ffbQY(SJ86U{C7m>BMNoiOW+S8bhos`M)KI6CIMzbG(2#D+Uhhlik#`+fRf=Cs7 z)n9{4yDcg^q)l+g;XcFTM;hr#9G2j&Gec+B0SoJaq1Vepl?x;(=1Zf{e_hI#06Pmt^qdYa2fQETCCTOZ zob}28upJ&67f`Oycg1YMZ`f3X&|pYYFB)aQp}Q-Eu0eNC3cU~AKP2U$)Uf~I)Rr&5 zvJ}-xdkPM$ewqxYPLr>uULnKE4^o?}#Q`eCBMuX&>3WgXg`T= z4ICnG#-T7YrTe13H2F!!q7h$K<5I)00XKpzoOx=oHEoXFZcX0`M6`dW$euJafy%{F z2Wmi+WNb@QTEKWTO}rV6Nt2^#Xu|>Mp#~k(%gipdyizK4Aw3x6!1=T3UhdZ8gU~pG z!HC}53wJjPmv>Nyvx9IXt(y+~ZrVkTWL{>WXzWRsuNB}0fX$#aWF!q)4)11@YIr{@ zs^OUD_kJm}Wp+v{~ltx{OiwaNAP4v_D|jT!1Fy2jHBpTTaxZ5Gd7Vi$~G z%z#G+e$X0H-(R#wU<>d%ysI`d>+wi!43his)3upyHsHfBIg-(f%7si{bSAUce-Xc( z3Hn+zITJ?oba~IH%u5-PfxW?V8FDtOd9xHdRmB!FWT}QltJqRzp;E)XU&TJjEFih6 zD^xL0cH!F;v(Bh@a#XdG40REl9m+DuVc!V)>W#y>?V#tVCks&@&e9V4y)4-gxBq7l zYl3^D1N2n|78F&zi?>>lD zhUGsllYKHQ&N5%KKqE?6%P!ap;!MABL_P$!xe&|4!cIbsJRq0yx*kB6uN<2mYaE!- z;J!NGLjcXcIz8qXn1K;aPmehVW+v(Q>eTeuhJhK%iCRoLviLXNn;xsPBtSFfr^o66 zAGc*6-2AWU!tcN|^+Enn9sJ@RxBxB%Z?1eg&b!~TaTNIUM|qV><@`}aZO>+&{0}{- B*-HQb diff --git a/zapple2.po b/zapple2.po index a5f7e7ab88fc2b94093fbaf0117703cbe4d0e79c..4f4a4174302c6a1fddf15aee37237a4d9ee750af 100644 GIT binary patch delta 2819 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 delta 2744 zcmZ`*e{37o9e;Lwi5(}7T}PpEQ0j|Y!4eUn14ibyE@{_>m5`>>#y<@-LePqV=vI}v zEyZ@y5ueX@_W69}CPg4EL}HtYTy3ansFXH$4ecGd4F{zg72fJiiMCbI)}j3nTQ2*) zJ3C|EK_&SlG5((5sW;?Ts*~{!_ z`kB+r*l3IyVSd7FNnc3+Dt#wCHaa%CMS7DVu5aos#Zc)Dn}Ke8H&lAqraYCDX41sA zco_$vzG`^qf0pbGJJ8Z!E>I3sP~J;I;Oc@tKo?77kEl1Y3oGS(9Pu z+vY*8n1Qr!&{Q=WV5^S~-xe%ieKhDv3`+#!p1jYK*PChFUry?F4wz}0oD*%G$ki@$ z1?n2NeCS@JOCZrwwDKHX06%Jn%!SuWrf5s|@&;W+wD@?@uu6N%mq3-ZlQBV$o6EGP ziVJ!M%MBU}fdje0@`_mblrF;hie~ysy_ktW7c{pec%P*t~r6`OW!q){OA)k<@IpUr; zI4b^sM~m1JbVy!ab2KlIs_Dp-Jg)uG60iCBUDXfXG8Z(vwRP3JyjWRx9iv}NK49*u zmAyxq3Z+Djh_KOKV609~L0 zNcA{#7Zw*t_L)D8eiDh~&CRU4BQGQ?Mgtn9u_mX5URq5sM5J!x1pbVzPZe@S-z zSZpT0HC?i7bY`rrvNG#WOIJ9eC0?JW3<2+CQLv78g}vsn!<}D#;xpl$<=ykoq?h-s z3gqAMO4qh|0(*iE$>-MsS(kl~Jg)uN5^o3ur@nPv?r|2yN)|s(cf2imc!IPwOAqqI zBepHl5uRv^kFqf%s2yaTr;K`SfOVFls3BAeDc!6S1o9y^q#R@;T^KHfY7r)nvc^{V zI2-A9o-}H-*DW0fR(c-HtVEG|2NLK(h3|!S7+zUmVHWZP&8b`d5ql@L)O29^PzyS_ zsWyy4{!?%X|ID5=+|b92F6}q$CZk*a1Q6$~PuR%TO^!z8B8wILm0zt>xy4F5bHrx2 z>u|5(A=K;ef$Znt&XaxTHUM)Qfxb7^F$&567g;R>qWaBHQNY-x9p(02l8YA(`>Ok2;XmW#WG;$z=&E<;RS(rM1O^I+U_%78vu5|gX09s zRs6mfjq;lo6(Q6cR>Vu%BH-}3!-Z$zbC(N$0H1$w(t`rgA9yIU_3N)K#Z|pI1IJc9 zqxWad=-O<|0@$7M&K%zG3@emCVUndVf-CIH+v52ZzZ8l zxbs9;+@IBd%9}jhpHpI)e%OT@p~jeTdcG-Z4BcwV-V8>Se`oZ)S#lUHmdY)t7GaXM zJ&S2U?UAhR;}tTiAIm}?3Bng@(s6Z>+$}Dyl*?^M4TWOh{rPNX?B-*=(Ah(wsM^^H zw>S>hxL1V(gyd*eHEi;`S*L!Kf0cp?vNyXpy8w>?YzQtW16jy)WDk`VBL^r}j66wk zVsWPIP+@^T2i+R^)<)eyvouz9EwV$t4P-*DP$6i}rFcIqSAh5* z6ZHK8L}!|>TEI(6nQ<>z0mY1fc2qbFcY0y82!Wk~ig{2d7gaTgu3SAnK2+B;p}?)R zK|=t|ygoi;>zRO&oE;ys_e_l7@wKt>q57T)%!!*!JTmz=-WwmPF(p9LX2ypcfF~^3 zhadgdbndrc8vD@yP#OH