/**************************************************************** * Module name : SED.BAS * * Purpose : Simple Editor (No scroll) * * Created : 28-01-88 * * Last edited : 29-10-89 Version 1.0 * * Copyright : G R Buckeridge * ****************************************************************/ 10 REM CBASIC VERSION 20 REM INTEGER A, BL, C, CC, CL, F1, F2 INTEGER i, j, ll, rc, x, y, lw(1) 30 ON ERROR GOTO 1750 40 bl=30:rc=90 50 esc$=CHR$(27):home$=esc$+"H":cls$=home$+esc$+"E":cleol$=esc$+"K":bell$=CHR$(7) 60 inv$=esc$+"p":nor$=esc$+"q":cleop$=esc$+"J":con$=esc$+"e":cof$=esc$+"f":hlp$="sed.hlp" 70 DEF FNat$(x,y)=esc$+"Y"+CHR$(31+x)+CHR$(31+y) 80 DEF FNorg$=FNat$(cl,1) 90 DIM ln$(bl),lw(bl) 110 PRINT cls$; 115 if command$<>"" then fi$=command$:nm$=fi$:a$="Input":gosub 1310:print home$;:a$="":goto 145 120 mes$="PRESS [f1] for HELP SCREEN":GOSUB 1820:if j%=26 then gosub 1910 130 GOSUB 1670 140 a$="Input":b$="PRESS for Output only":GOSUB 1550 145 IF fi$="" THEN GOSUB 530 150 cl=1:cc=1 160 c=INKEY:c$=CHR$(c) 170 IF c=29 THEN GOSUB 890:GOTO 350 180 f1=0 190 IF c=31 THEN cl=cl-1:IF cl<1 THEN cl=bl 200 IF c=30 THEN cl=cl+1:IF cl>bl THEN cl=1 210 IF c=1 THEN cc=cc-1:IF cc<1 THEN cc=rc 220 IF c=6 THEN cc=cc+1:IF cc>rc THEN cc=1:c=30:GOTO 200 230 IF c=13 THEN cc=1:c=30:GOTO 200 240 IF c=7 THEN GOSUB 620 250 IF c=11 THEN GOSUB 690 260 IF c=127 THEN GOSUB 750 270 IF c=24 THEN GOSUB 830:cc=1 280 IF c=22 THEN f2=ABS(f2-1) 290 IF c=5 THEN GOSUB 1000 300 IF c=8 THEN GOSUB 1090 310 IF c=21 THEN GOSUB 1180 320 IF c=18 THEN GOSUB 1240 330 IF c=27 THEN GOSUB 1670:a$="Output":b$=" = Cancel 'IN' & 'EX'":GOSUB 1550:IF fi$="" THEN GOSUB 530:GOTO 150 ELSE PRINT cls$;:GOTO 10000 340 IF c=26 THEN GOSUB 1910 350 PRINT FNat$(cl,cc); 360 IF c<=31 THEN 160 370 REM 380 REM OVERSTRIKE MODE 390 IF f2=1 THEN 450 400 IF cc<=lw(cl) THEN ln$(cl)=LEFT$(ln$(cl),cc-1)+c$+ RIGHT$(ln$(cl),lw(cl)-cc) 405 IF cc>lw(cl) THEN a=cc-lw(cl):ln$(cl)=ln$(cl)+STRING$(a-1," ")+c$:lw(cl)=cc 410 PRINT c$:c=6:GOTO 220 430 REM 440 REM INSERT MODE 450 IF cc>lw(cl) THEN 400 460 ln$(cl)=LEFT$(ln$(cl),cc-1)+c$+RIGHT$(ln$(cl),lw(cl)+1-cc):GOSUB 940 470 PRINT FNorg$;ln$(cl):c=6:GOTO 220 480 REM 490 REM RESTART 530 FOR i=1 TO bl:PRINT ln$(i);cleol$:NEXT:PRINT home$;:RETURN 540 REM 610 REM DEL -> 620 IF cc>lw(cl) THEN cc=lw(cl)+1:PRINT bell$;:GOTO 660 630 ln$(cl)=LEFT$(ln$(cl),cc-1)+RIGHT$(ln$(cl),lw(cl)-cc) 640 PRINT FNorg$;ln$(cl);cleol$ 650 lw(cl)=lw(cl)-1 660 RETURN 670 REM 680 REM ALT DEL -> 690 ln$(cl)=LEFT$(ln$(cl),cc-1) 700 PRINT FNorg$;ln$(cl);cleol$ 710 lw(cl)=cc-1 720 RETURN 730 REM 740 REM <- DEL 750 IF cc=1 THEN PRINT bell$;:GOTO 800 760 IF cc>lw(cl)+1 THEN cc=lw(cl)+1 770 ln$(cl)=LEFT$(ln$(cl),cc-2)+RIGHT$(ln$(cl),lw(cl)+1-cc) 780 PRINT FNorg$;ln$(cl);cleol$ 790 lw(cl)=lw(cl)-1:cc=cc-1 800 c=7:RETURN 810 REM 820 REM ALT <- DEL 830 ln$(cl)=RIGHT$(ln$(cl),lw(cl)+1-cc) 840 PRINT FNorg$;ln$(cl);cleol$ 850 lw(cl)=LEN(ln$(cl)) 860 RETURN 870 REM 880 REM EITHER OF LINE 890 f1=ABS(f1-1) 900 IF f1 THEN cc=lw(cl)-(ccrc THEN lw(cl)=rc 960 ln$(cl)=LEFT$(ln$(cl),rc) 970 RETURN 980 REM 990 REM INSERT LINE 1000 FOR i= bl TO cl+1 STEP -1 1010 ln$(i)=ln$(i-1) 1020 lw(i)=lw(i-1) 1030 PRINT FNat$(i,1);ln$(i);cleol$ 1040 NEXT 1050 PRINT FNorg$;cleol$:ln$(cl)="":lw(cl)=0 1060 RETURN 1070 REM 1080 REM DELETE LINE 1090 FOR i= cl TO bl-1 1100 ln$(i)=ln$(i+1) 1110 lw(i)=lw(i+1) 1120 PRINT FNat$(i,1);ln$(i);cleol$ 1130 NEXT 1140 PRINT FNat$(bl,1);cleol$:ln$(bl)="":lw(bl)=0 1150 RETURN 1160 REM 1170 REM BREAK LINE 1180 IF cl>=bl THEN PRINT bell$;:RETURN 1190 cl=cl+1:GOSUB 990:ln$(cl)=ln$(cl-1):lw(cl)=lw(cl-1) 1200 GOSUB 830:cl=cl-1:GOSUB 690:cl=cl+1:cc=1 1210 RETURN 1220 REM 1230 REM MERGE LINES 1240 IF cl>=bl THEN PRINT bell$;:RETURN 1250 ln$(cl)=ln$(cl)+ln$(cl+1) 1260 IF LEN(ln$(cl))>rc THEN lw(cl)=rc:ln$(cl)=LEFT$(ln$(cl),rc) ELSE lw(cl)=LEN(ln$(cl)) 1270 PRINT FNorg$;ln$(cl);cleol$:cl=cl+1:GOSUB 1090:cl=cl-1 1280 RETURN 1290 REM 1300 REM LOAD FILE 1310 OPEN fi$ AS 1 1320 i=1 1330 IF END #1 THEN 1390 1340 IF i>bl THEN 1400 1350 READ #1; line ln$(i):lw(i)=LEN(ln$(i)) 1360 PRINT ln$(i);cleol$ 1370 i=i+1 1380 GOTO 1330 1390 PRINT cleop$; 1400 CLOSE 1 1410 RETURN 1420 REM 1430 REM SAVE FILE 1440 FOR ll=bl TO 1 STEP-1 1450 IF lw(ll)<>0 THEN 1470 1460 NEXT 1470 CREATE fi$ AS 1 1480 FOR i=1 TO ll 1490 for j=1 to lw(i):put 1,asc(mid$(ln$(i),j,1)):next:put 1,13:put 1,10 1500 NEXT 1510 CLOSE 1 1520 RETURN 1530 REM 1540 REM GET FILE-NAME 1550 PRINT FNat$(15,36);inv$;a$;" File-name";nor$ 1560 PRINT FNat$(17,37);"? " 1570 PRINT FNat$(19,30);inv$;b$;nor$; 1580 PRINT FNat$(17,37);:INPUT "";LINE fi$ 1590 IF a$="Output" AND UCASE$(fi$)="EX" THEN 2070 1600 IF fi$="" THEN 1630 1605 IF a$="Output" AND UCASE$(fi$)="IN" then fi$=nm$ 1610 PRINT home$; 1620 IF a$="Output" THEN GOSUB 1440 ELSE GOSUB 1310 1630 PRINT home$; 1635 nm$=fi$ 1640 RETURN 1650 REM 1660 REM PRINT PDM 1670 PRINT inv$;:FOR i= 1 TO 10 1680 IF i=3 THEN a$=STRING$(40,"_") ELSE a$=STRING$(40," ") 1690 PRINT FNat$(i+10,25);a$ 1700 NEXT 1710 PRINT FNat$(12,27);inv$;"Small Editor. by G.R. Buckeridge.";nor$ 1720 PRINT nor$;:RETURN 1730 REM 1740 REM ERROR HANDLER 1750 REM 1760 print bell$; 1770 if a$="Output" then goto 330 else goto 130 1780 PRINT"error ";ERR 1790 GOTO 10000 1800 REM 1810 REM HELP REMINDER 1820 GOSUB 1670 1830 PRINT FNat$(16,32);inv$;mes$;nor$ 1840 PRINT FNat$(19,32);inv$;"PRESS ANY KEY TO CONTINUE";nor$ 1850 PRINT cof$; 1860 j%=inkey 1870 PRINT con$;home$; 1880 RETURN 1890 REM 1900 REM DISPLAY HELP FILE 1910 IF SIZE(hlp$)=0 THEN mes$="NEEDS SED.HLP ON THIS DISK"+bell$:GOSUB 1820:GOTO 2010 1920 fi$=hlp$:PRINT home$; 1930 open hlp$ AS 1 1940 IF END #1 THEN 1970 1950 READ #1; line a$:PRINT a$;cleol$ 1960 GOTO 1940 1970 PRINT cleop$; 1980 CLOSE 1 1990 PRINT cof$; 2000 j%=constat%:if not j% then 2000 else j%=INKEY 2010 PRINT con$;home$; 2020 GOSUB 530 2030 PRINT home$; 2040 RETURN 2050 REM 2060 REM EXIT ROUTINE 2070 PRINT cls$; 2080 GOTO 10000 10000 END 2020 GOSUB 530 2030 PRINT home$; 2040