10REM EZcopy
20REM by DIGITAL EXPRESS
30REM All graphics!!!
40REM AUTO 'block count' copy feature
100IF PEEK(259)<>195 GOTO 60000
110LOMEM :37888:POKE 16149, 255:POKE 16150, 255: qz=PEEK(16134)
120TEXT:? "standby, processing data ...":POKE 16134, 255
130DATA 17,0,0,33,0,108,1,0,4,205,29,253,201
140FOR x=28672 TO 28684:READ mc:POKE x, mc:NEXT:CALL 28672
150DATA 33,0,108,17,0,212,1,0,4,126,18,19,18,19
160DATA 35,11,120,177,32,245,201
170FOR x=28685 TO 28705:READ mc:POKE x, mc:NEXT
180DATA 0,16,16,16,16,16,16,0,0,68,68,68,68,68,68,0
190DATA 0,146,146,146,146,146,146,0,0,145,145,138,138,132,132,0
200DATA 0,34,34,20,20,8,8,0,0,137,137,81,81,33,33,0
210FOR x=27656 TO 27703:READ mc:POKE x, mc:NEXT
220DATA 237,91,242,255,26,254,0,200,254,13,200
230DATA 245,58,239,255,71,241,33,0,0,95,22,0,25,16,253
235DATA 237,75,248,255,9,58,246,255
240DATA 71,58,244,255,79,175,129,16,253
245DATA 95,58,245,255,61,198,32,87,237,75,246,255
250DATA 213,205,26,253,209,107,122,214,32,103,58,241,255
260DATA 237,91,246,255,205,38,253,58,244,255,60,50,244,255
270DATA 42,242,255,35,34,242,255,24,165
280FOR x=28706 TO 28796:READ mc:POKE x, mc:NEXT
290FOR x=65517 TO 65535:POKE x, 0:NEXT:POKE 65526, 8
300POKE 25431, 11:POKE 25471, 187:HGR2: pt=28706
310DATA 62,187,17,0,20,33,0,0,213,205,38,253,209
320DATA 175,33,0,32,205,38,253,201
330FOR x=28797 TO 28817:READ mc:POKE x, mc:NEXT: c1=28797
340DATA 62,153,17,248,0,33,8,20,213,205,38,253,209
350DATA 175,33,8,52,205,38,253,201
360FOR x=28818 TO 28838:READ mc:POKE x, mc:NEXT: c2=28818
370DATA 62,119,17,248,0,33,8,21,245,213,229,205,38,253
380DATA 225,209,241,36,245,213,229,205,38,253,225,209,241
390DATA 36,213,205,38,253,209,33,8,53,175,213,229,205,38,253
400DATA 225,209,36,175,213,229,205,38,253,225,209,36,175,195,38,253
410FOR x=28839 TO 28896:READ mc:POKE x, mc:NEXT: c3=28839
420DATA 62,4,17,40,0,33,0,21,229,213,245,205,38,253
430DATA 241,209,225,36,229,213,245,205,38,253
440DATA 241,209,225,36,195,38,253
450FOR x=28897 TO 28927:READ mc:POKE x, mc:NEXT
460 d1=28897: d2=d1+1: d3=d1+6
470FOR x=5 TO 6:READ m1$(x):NEXT:DATA xfer,exit
475DATA 6,20,62,128,211,224,120,211,224,62,146,211,224
480DATA 17,0,10,27,122,179,32,251,5,16,234,62,159,211,224,201
485FOR x=28928 TO 28956:READ mc:POKE x, mc:NEXT
490 s1=28928: s2=s1+1: s3=s1+15
495DATA 62,226,211,224,62,240,211,224,17,0,175,27,122,179
500DATA 32,251,62,255,211,224,201
510FOR x=28957 TO 28977:READ mc:POKE x, mc:NEXT
520 e1=28957: e2=e1+1: e3=e1+10
530FOR x=4 TO 6:READ x1$(x):NEXT:DATA auto,spec,done
540FOR x=0 TO 15:POKE x+18765, x:NEXT:POKE 65518, 255
550 dr%=PEEK(16821):POKE 65530, dr%:POKE 65531, dr%
555IF dr%=4 OR dr%=5 THEN POKE 65518, 159
560 hm$="yes": fix$="yes"
570FOR x=2 TO 6:READ x2$(x):NEXT
580DATA src,dest,more,xfer,done
590FOR x=2 TO 6:READ x3$(x):NEXT
600DATA frst,last,home,fix,done
610FOR x=5 TO 6:READ yn$(x):NEXT:DATA no,yes
620DATA 62,4,205,126,252,40,5,50,252,255,24,21
630DATA 62,4,205,84,252,253,126,20,230,15,254,3,62,4,56,2
640DATA 62,255,50,252,255
650DATA 62,5,205,126,252,40,5,50,253,255,24,21
660DATA 62,5,205,84,252,253,126,20,230,15,254,3,62,5,56,2
670DATA 62,255,50,253,255
680DATA 62,8,205,126,252
690DATA 62,8,205,84,252,253,126,20,230,15,254,3,62,8,56,2
700DATA 62,255,50,254,255
710DATA 253,126,20,254,48,48,4,62,24,24,2,62,255
720DATA 50,255,255,201
730FOR x=28978 TO 29086:READ mc:POKE x, mc:NEXT: dv=28978
740FOR x=5 TO 6:READ dv$(x):NEXT:DATA scan,done
750DATA 62,0,1,0,0,17,0,0,33,0,0,205,243,252,50,255,107,201
760FOR x=29087 TO 29104:READ mc:POKE x, mc:NEXT
770 r1=29087: r2=r1+1: r3=r1+6: r4=r1+10
780DATA 62,0,1,0,0,17,0,0,33,0,0,205,246,252,50,255,107,201
790FOR x=29105 TO 29122:READ mc:POKE x, mc:NEXT
800 w1=29105: w2=w1+1: w3=w1+6: w4=w1+10
810DATA 62,0,1,0,0,17,1,0,33,0,116,195,243,252
820FOR x=29123 TO 29136:READ mc:POKE x, mc:NEXT
830 ha%=29123: hb%=ha%+1
1000GOSUB 30100:CALL 28685
1010 ww$=" DIGITAL EXPRESS": vt%=2: ht%=8: co%=18
1020 b1%=0: b2%=212: di%=16:GOSUB 30000
1030 b1%=8: vt%=3:GOSUB 30000
1040 b1%=0: ww$="presents ...": co%=19
1050 ht%=10: vt%=5: b2%=108: di%=8:GOSUB 30000
1060 ww$="- EZcopy -": vt%=7: ht%=11: co%=246
1070 b2%=212: di%=16:GOSUB 30000: b1%=8: vt%=8:GOSUB 30000
1080 b1%=0: b2%=108: di%=8: ww$="(a simple media copy utility)"
1090 ht%=2: vt%=11: co%=248:GOSUB 30000
1100 ww$="primary menu ...":GOSUB 40000: be%=5
1110FOR z=be% TO 6: wd$=m1$(z):GOSUB 40100:NEXT
1120GOSUB 31000:IF sk%<6 THEN GOSUB 30100
1130ON sd% GOTO 2000, 60000
2000 ww$=" source:      ": vt%=2: ht%=2: co%=25:GOSUB 30000
2010 ww$=" destination: ": vt%=4: co%=19:GOSUB 30000
2020 ww$=" FIRST block: ": vt%=6: co%=24:GOSUB 30000
2030 ww$=" LAST block:  ": vt%=8: co%=18:GOSUB 30000
2040 ww$=" home media:  ": vt%=10: co%=246:GOSUB 30000
2050 ww$=" fix blocks:  ": vt%=12: co%=252:GOSUB 30000
2060GOSUB 32200:GOSUB 32210
2070GOSUB 32220:GOSUB 32230:GOSUB 32240:GOSUB 32250
2100 ww$="XFER options ...":GOSUB 40000: be%=4
2110FOR z=be% TO 6: wd$=x1$(z):GOSUB 40100:NEXT
2120GOSUB 31000:ON sd% GOTO 2200, 2210, 1000
2200 au$="auto":GOTO 2300
2210 au$="specialized"
2300 ww$=au$+" XFER options ...":GOSUB 40000: be%=2
2310FOR z=be% TO 6: wd$=x2$(z):GOSUB 40100:NEXT
2320GOSUB 31000:ON sd% GOTO 3000, 3500, 4000, 5000, 2100
3000 w1$="choose the SOURCE ...":GOSUB 34000
3010IF dd%=0 GOTO 2300
3020POKE 65531, dd%:GOSUB 32000:GOSUB 32200:GOTO 2300
3500 w1$="choose the DESTINATION ...":GOSUB 34000
3510IF dd%=0 GOTO 2300
3520POKE 65530, dd%:GOSUB 32000:GOSUB 32210:GOTO 2300
4000 ww$="more XFER options ...":GOSUB 40000
4010 be%=2:IF au$="auto" THEN  be%=4
4020FOR z=be% TO 6: wd$=x3$(z):GOSUB 40100:NEXT
4030GOSUB 31000:IF be%=4 GOTO 4050
4040ON sd% GOTO 4100, 4200, 4300, 4400, 2300
4050ON sd% GOTO 4300, 4400, 2300
4100 ww$="enter new FIRST block:":GOSUB 40000:GOSUB 32300
4110 ht=26: vt=21: ml=1: ll=3: lf$="0": hf$="9":GOSUB 55000
4120 bk%=VAL(b$): ww$=b$
4130IF bk%>PEEK(65518) THEN GOSUB 30600:GOTO 4110
4140POKE 65517, bk%:GOSUB 32220:GOTO 4000
4200 ww$="enter new LAST block:":GOSUB 40000:GOSUB 32300
4210 ht=26: vt=21: ml=1: ll=3: lf$="0": hf$="9":GOSUB 55000
4220 bk%=VAL(b$): ww$=b$
4230IF bk%<PEEK(65517) OR bk%>255 THEN GOSUB 30600:GOTO 4210
4240POKE 65518, bk%:GOSUB 32230:GOTO 4000
4300 ww$="Change auto home media?":GOSUB 40000: be%=5
4310FOR z=be% TO 6: wd$=yn$(z):GOSUB 40100:NEXT
4320GOSUB 31000:IF sd%=1 GOTO 4000
4330IF hm$="yes" THEN  hm$="no ":GOTO 4350
4340 hm$="yes"
4350GOSUB 32240:GOTO 4000
4400 ww$="Change the blocks left fix?":GOSUB 40000: be%=5
4410FOR z=be% TO 6: wd$=yn$(z):GOSUB 40100:NEXT
4420GOSUB 31000:IF sd%=1 GOTO 4000
4430IF fix$="yes" THEN  fix$="no ":GOTO 4450
4440 fix$="yes"
4450GOSUB 32250:GOTO 4000
5000 fb%=PEEK(65517): eb%=PEEK(65518): sc%=PEEK(65531)
5010 ds%=PEEK(65530):IF ds%=sc% GOTO 5050
5020 ww$="to begin xfer,":GOSUB 40000
5030 ww$="press [return] ...": ht%=2: vt%=23: co%=23:GOSUB 30000
5040GET go$:IF go$<>CHR$(13) GOTO 2100
5050IF au$<>"auto" GOTO 5065
5060 ww$="computing blocks to copy ...":GOSUB 40000:GOSUB 37000
5065IF eb%<=159 GOTO 5090
5070IF sc%<>4 AND sc%<>5 AND ds%<>4 AND ds%<>5 GOTO 5090
5075IF fb%>159 THEN  fb%=0:POKE 65517, fb%:GOSUB 32220
5080 eb%=159:POKE 65518, eb%:GOSUB 32230:GOSUB 30300
5090GOSUB 35000
5100 kk=0: ib%=fb%:FOR jj=fb% TO eb%
5110IF kk>7 GOTO 6000
5120 ww$=STR$(jj)+" "+" ": ht%=20: vt%=21: co%=25:GOSUB 30000
5130POKE r2, sc%:POKE r3, jj:POKE r4, 116+kk*4:CALL r1
5140IF PEEK(64885)=27 THEN GOSUB 30300:GOTO 2300
5150IF PEEK(27647)=128 GOTO 5500
5200 ww$="READ error on block "+STR$(jj):CALL c2:CALL c3
5210GOSUB 30600: ht%=2: vt%=21: co%=25:GOSUB 30000
5220 ww$="(R=retry, S=skip, & Q=quit)"
5230 vt%=23: co%=23:GOSUB 30000
5240GET go$:IF go$="q" OR go$="Q" THEN GOSUB 30300:GOTO 2300
5250IF go$<>"r" AND go$<>"R" GOTO 5300
5260GOSUB 30300:GOSUB 36000:GOTO 5110
5300IF go$<>"s" AND go$<>"S" THEN GOSUB 30600:GOTO 5240
5310GOSUB 30300:GOSUB 36000: jj=jj+1: kk=kk+1
5320IF jj>eb% THEN  jj=eb%
5330GOTO 5110
5500 kk=kk+1:NEXT jj
6000GOSUB 35100: kk=0:FOR ii=ib% TO jj-1
6010IF kk>7 GOTO 7000
6020 ww$=STR$(ii)+" "+" ": ht%=20: vt%=21: co%=25:GOSUB 30000
6030POKE w2, ds%:POKE w3, ii:POKE w4, 116+kk*4:CALL w1
6040IF PEEK(64885)=27 THEN GOSUB 30300:GOTO 2300
6050IF PEEK(27647)=0 GOTO 6500
6200 ww$="WRITE error on block "+STR$(ii):CALL c2:CALL c3
6210GOSUB 30600: ht%=2: vt%=21: co%=25:GOSUB 30000
6220 ww$="(R=retry, S=skip, & Q=quit)"
6230 vt%=23: co%=23:GOSUB 30000
6240GET go$:IF go$="q" OR go$="Q" THEN GOSUB 30300:GOTO 2300
6250IF go$<>"r" AND go$<>"R" GOTO 6300
6260GOSUB 30300:GOSUB 36100:GOTO 6010
6300IF go$<>"s" AND go$<>"S" THEN GOSUB 30600:GOTO 6240
6310GOSUB 30300:GOSUB 36000: ii=ii+1: kk=kk+1
6320IF ii>eb% THEN  ii=eb%
6330GOTO 6010
6500 kk=kk+1:NEXT ii: kk=0: ib%=ii
6510IF ii>=eb% GOTO 7000
6520GOSUB 35000:GOTO 5110
7000 yj$="":IF fix$="yes" THEN  jq$="sub":GOSUB 39000
7050 jq$="":IF hm$="no" GOTO 7500
7100 ww$="homing media ...":GOSUB 40000
7110POKE hb%, ds%:CALL ha%:POKE hb%, sc%:CALL ha%
7500GOSUB 30300:GOTO 2300
30000FOR x=1 TO LEN(ww$):POKE x+27599, ASC(MID$(ww$, x, 1))
30010NEXT:POKE 27599+x, 0:POKE 65525, vt%
30020POKE 65524, ht%:POKE 65519, di%:POKE 65521, co%
30030POKE 65528, b1%:POKE 65529, b2%
30040POKE 65522, 208:POKE 65523, 107:CALL pt:RETURN
30100CALL c1:CALL c2:CALL c3:HCOLOR =4:HPLOT 7, 0 TO 255, 0
30110HPLOT 7, 158 TO 255, 158:HPLOT 7, 0 TO 7, 158
30120HPLOT 255, 0 TO 255, 158:RETURN
30300POKE s2, 20:POKE s3, 10:CALL s1:RETURN
30400POKE s2, 8:POKE s3, 25:CALL s1:RETURN
30500POKE s2, 2:POKE s3, 30:CALL s1:RETURN
30600POKE e2, 226:POKE e3, 150:CALL e1:RETURN
30700POKE e2, 228:POKE e3, 20:CALL e1:RETURN
30800POP:GOSUB 30300:CALL c2:CALL c3:GOTO 1000
31000GET sk$: sk%=ASC(sk$)
31010IF sk%>134 THEN  sk%=sk%-8
31020IF sk%>134 THEN GOSUB 30600:GOTO 31000
31030IF sk%=27 GOTO 30800
31040IF sk%<be%+128 THEN GOSUB 30600:GOTO 31000
31050 sk%=sk%-128: sd%=sk%-be%+1:GOTO 30300
32000IF dd%=4 THEN  ww$="disk one"
32010IF dd%=5 THEN  ww$="disk two"
32020IF dd%=8 THEN  ww$="tape one"
32030IF dd%=24 THEN  ww$="tape two"
32040RETURN
32100 ww$=STR$(bk%):IF bk%>99 THEN RETURN
32110IF bk%>9 THEN  ww$=" "+ww$:RETURN
32120 ww$=" "+" "+ww$:RETURN
32200 dd%=PEEK(65531):GOSUB 32000: ht%=18: vt%=2
32205 co%=25:GOTO 30000
32210 dd%=PEEK(65530):GOSUB 32000: vt%=4: ht%=18
32215 co%=19:GOTO 30000
32220 bk%=PEEK(65517):GOSUB 32100: vt%=6: ht%=18
32225 co%=24:GOTO 30000
32230 bk%=PEEK(65518):GOSUB 32100: vt%=8: ht%=18
32235 co%=18:GOTO 30000
32240 ww$=hm$: vt%=10: co%=246: ht%=18:GOTO 30000
32250 ww$=fix$: vt%=12: co%=252: ht%=18:GOTO 30000
32300 ww$="press [RETURN] after typing..."
32310 ht%=2: vt%=23: co%=23:GOTO 30000
33000CALL c2:CALL c3:CALL dv: ee=0
33010IF PEEK(65534)<>8 THEN  ee=ee+1:GOTO 33030
33020 z=1: wd$="ddp1":GOSUB 40100
33030IF PEEK(65535)<>24 THEN  ee=ee+1:GOTO 33050
33040 z=2: wd$="ddp2":GOSUB 40100
33050IF PEEK(65532)<>4 THEN  ee=ee+1:GOTO 33070
33060 z=3: wd$="dsk1":GOSUB 40100
33070IF PEEK(65533)<>5 THEN  ee=ee+1:GOTO 33090
33080 z=4: wd$="dsk2":GOSUB 40100
33090RETURN
34000GOSUB 33000: dd%=0:IF ee<>4 GOTO 34100
34010 ww$="all drives empty ..."
34100ON ee=4 GOTO 34110: ww$=w1$
34110 vt%=21: ht%=2: co%=25:GOSUB 30000
34120FOR z=5 TO 6: wd$=dv$(z):GOSUB 40100:NEXT
34130 be%=1:IF ee=4 THEN  be%=5
34140GOSUB 31000:IF sk%=5 GOTO 34000
34150IF sk%=6 THEN RETURN
34160IF sk%=1 AND PEEK(65534)<>8 THEN GOSUB 30600:GOTO 34130
34170IF sk%=2 AND PEEK(65535)<>24 THEN GOSUB 30600:GOTO 34130
34180IF sk%=3 AND PEEK(65532)<>4 THEN GOSUB 30600:GOTO 34130
34190IF sk%=4 AND PEEK(65533)<>5 THEN GOSUB 30600:GOTO 34130
34200IF sk%=1 THEN  dd%=8:RETURN
34210IF sk%=2 THEN  dd%=24:RETURN
34220IF sk%=3 THEN  dd%=4:RETURN
34230 dd%=5:RETURN
35000IF sc%<>ds% GOTO 36000
35010 ww$="insert SOURCE, then":CALL c2:CALL c3
35020 ht%=2: vt%=23: co%=23:GOSUB 30000
35030 ww$="type an 'S' ...": vt%=24:GOSUB 30000
35040GET go$:IF go$=CHR$(27) THEN POP:GOSUB 30300:GOTO 2300
35050IF go$<>"s" AND go$<>"S" THEN GOSUB 30600:GOTO 35040
35060GOSUB 30300:GOTO 36000
35100IF sc%<>ds% GOTO 36100
35110 ww$="insert DESTINATION, then":CALL c2:CALL c3
35120 ht%=2: vt%=23: co%=23:GOSUB 30000
35130 ww$="type a 'D' ...": vt%=24:GOSUB 30000
35140GET go$:IF go$=CHR$(27) THEN POP:GOSUB 30300:GOTO 2300
35150IF go$<>"d" AND go$<>"D" THEN GOSUB 30600:GOTO 35140
35160GOSUB 30300:GOTO 36100
36000 ww$="READING block #:":CALL c2:CALL c3
36010 ht%=2: vt%=21: co%=25:GOSUB 30000
36020 ww$="press [ESCAPE] to abort ..."
36030 ht%=2: vt%=23: co%=23:GOTO 30000
36100 ww$="WRITING block #:":CALL c2:CALL c3:GOTO 36010
37000POKE r2, sc%:POKE r3, 1:POKE r4, 116:CALL r1
37005IF PEEK(27647)<>128 GOTO 39600
37010IF PEEK(29709)<>85 GOTO 38100
37020IF PEEK(29710)<>170 GOTO 38100
37030IF PEEK(29711)<>0 GOTO 38100
37040IF PEEK(29712)<>255 GOTO 38100
37050 ty%=PEEK(29708):IF ty%>128 THEN  ty%=ty%-128
37060 bv%=PEEK(29713):IF ty%>3 GOTO 38100
37100 eb%=0: cz%=1:GOSUB 38500:IF eb%<>0 GOTO 38000
37110IF eb%=0 AND ty%=2 THEN GOSUB 38500:IF eb%<>0 GOTO 38000
37120IF eb%=0 AND ty%=3 THEN GOSUB 38500:IF eb%<>0 GOTO 38000
37130GOTO 38100
38000IF jq$="sub" THEN RETURN
38010GOSUB 30300:POKE 65518, eb%:GOSUB 32230
38020 fb%=0:POKE 65517, fb%:GOTO 32220
38100IF jq$="sub" THEN  yj$="no":GOTO 38000
38110 eb%=255:IF sc%=4 OR sc%=5 THEN  eb%=159
38120IF ds%=4 OR ds%=5 THEN  eb%=159
38130GOTO 38000
38500POKE r3, cz%:CALL r1: cz%=cz%+1
38510FOR xz=29708 TO 30719 STEP 26
38520IF PEEK(xz)=1 GOTO 38540
38530NEXT xz:RETURN
38540 eb%=PEEK(xz+1): eb%=eb%-1
38550POKE 65518, eb%: uq%=PEEK(xz+5):RETURN
39000IF sc%=ds% THEN RETURN
39010IF (sc%=8 OR sc%=24) AND (ds%=4 OR ds%=5) GOTO 39100
39020IF (sc%=4 OR sc%=5) AND (ds%=8 OR ds%=24) GOTO 39100
39030RETURN
39100 ww$="CHECKing blocks left ...":GOSUB 40000
39110 yi%=eb%:GOSUB 37000: eb%=yi%:POKE 65518, eb%
39115IF yj$="no" THEN RETURN
39120IF (sc%=4 OR sc%=5) AND bv%=255 THEN RETURN
39130IF (sc%=8 OR sc%=24) AND (bv%=160 OR bv%=159) THEN RETURN
39200GOSUB 30300: ww$="CHANGING blocks left ...":GOSUB 40000
39300POKE r2, sc%:POKE r3, 1:POKE r4, 116:CALL r1
39310IF sc%=4 OR sc%=5 THEN POKE 29713, 255: ui%=uq%+96
39315IF bv%=160 THEN  ui%=uq%+95
39320IF sc%=8 OR sc%=24 THEN POKE 29713, 159: ui%=uq%-96
39330POKE w2, ds%:POKE w3, 1:POKE w4, 116:CALL w1
39400POKE r2, ds%:POKE r3, cz%-1:CALL r1
39410POKE xz+5, ui%:POKE w3, cz%-1:CALL w1:GOTO 30300
39600 ww$="missing media!!!":GOSUB 40000:GOSUB 30600
39610 vt%=23: co%=23: ww$="[return] = continue copy"
39620GOSUB 30000: vt%=24: ww$="[escape] = abort procedure":GOSUB 30000
39630GET go$:IF go$=CHR$(13) THEN GOSUB 30300:GOTO 39700
39640IF go$=CHR$(27) THEN GOSUB 30300:POP:GOTO 2300
39650GOSUB 30600:GOTO 39630
39700 ww$="one moment please ...":GOSUB 40000:GOTO 37000
40000CALL c2:CALL c3: ht%=2: vt%=21: co%=25
40010 b1%=0: b2%=108: di%=8:GOTO 30000
40100 z$=CHR$(z):POKE d2, 5:IF INT(z/2)=z/2 THEN POKE d2, 4
40110POKE d3, ((z-1)*5+2)*8:CALL d1: ww$=" "+z$+" "
40120 ht%=(z-1)*5+3: vt%=22: co%=31:GOSUB 30000
40130 co%=21:IF PEEK(d2)=4 THEN  co%=244
40140 ww$=wd$: vt%=24:GOSUB 30000
40150ON z=6 GOTO 30400:RETURN
55000 ww$="":FOR x=1 TO ll: ww$=ww$+CHR$(95):NEXT: b$=""
55010 ht%=ht: vt%=vt: co%=25:GOSUB 30000
55020GET a$: fe%=FRE(0): a%=ASC(a$)
55030IF a%=27 GOTO 30800
55060IF a$=CHR$(13) AND LEN(b$)>=ml GOTO 55180
55070IF a$>=lf$ AND a$<=hf$ GOTO 55120
55080IF a$<>CHR$(8) AND a$<>CHR$(163) THEN GOSUB 30600:GOTO 55020
55090IF b$="" THEN GOSUB 30600:GOTO 55020
55100IF LEN(b$)=1 THEN  b$="":GOSUB 55190:GOSUB 30700:GOTO 55020
55110 b$=LEFT$(b$, LEN(b$)-1):GOSUB 55190:GOSUB 30700:GOTO 55020
55120IF LEN(b$)<ll GOTO 55160
55150GOSUB 30600:GOTO 55020
55160 ww$=a$: ht%=ht: vt%=vt:GOSUB 30000
55170 b$=b$+a$:GOSUB 30500: ht=ht+1:GOTO 55020
55180GOTO 30300
55190 ww$=CHR$(32): ht%=ht-1: vt%=vt
55200 ht=ht-1:GOSUB 30000: ww$=CHR$(95): ht%=ht
55210 vt%=vt:GOTO 30000
60000TEXT:? " program terminated."
60010?:? " type NEW to clear RAM"
60020POKE 16134, qz:POKE 25471, 17:END
