{ Small editor } { by K.Nakazato Ver. 1.00 10-Feb-1984 } { 1.12 2-Jun-1984 } const maxtext =$7FFF; newline =#$0D; mark =#$87; startblock=#$E7; endblock =#$E4; type linetype=string[30]; frtype=(nosym,findsym,replacesym); var vram :integer absolute $EDD0; vram1 :integer absolute $EDD2; ptop :integer absolute $EDD4; pbotm :integer absolute $EDD6; len :integer absolute $EDD8; address:integer absolute $EDDA; width :byte absolute $EDDC; numbuf :byte absolute $EDE0; sbuffer:string[80] absolute $EDE0; buffer :array [1..80] of char absolute $EDE1; insert:boolean; r:char; x,y,i,slength,halflength:byte; startaddress,endaddress,n:integer; textbuf:array [0..maxtext] of char; filename,line1,line2:linetype; wordset :set of char; vramaddr:array [0..24] of integer; fr:frtype; {$I SED1.INC} {$I SED2.INC} {$I SED3.INC} {$I SED4.INC} {$I SED5.INC} {$I SED6.INC} begin wordset:=['0'..'9','A'..'Z','a'..'z']; slength:=23; width:=80; halflength:=slength div 2; fr:=nosym; crtinit; setvramaddr; settext; dispinsert; newscreen; repeat checkbuf; pline(y); numbuf:=width; gotoxy(x,y+1); read(kbd,r); case chr(ord(r)+ord('@')) of 'G':deletechar; 'S','H':if x>1 then x:=x-1; 'V':begin insert:=not insert; dispinsert end; 'I':begin x:=8*((x-1) div 8)+9; if x>width then x:=width end; 'D':if x1 then begin x:=x-1; deletechar end; 'Q':case getnextc('Q') of 'Y':numbuf:=x-1; 'S':mostleft; 'D':mostright; 'R':begin x:=1; y:=1; texttop; newscreen end; 'C':begin y:=halflength; textbottom; x:=numbuf; newscreen end; 'F':begin find; newscreen; dispinsert end; 'A':begin replace; newscreen; dispinsert end; else; end; 'K':case getnextc('K') of 'B':insertchar(startblock); 'K':insertchar(endblock); 'W':begin writeblock; dispinsert end; 'D':begin outtext; newscreen; dispinsert end; 'C':begin cmblock(true); newscreen end; 'V':begin cmblock(false); newscreen end; 'Y':begin eraseblock; newscreen end; 'R':begin readblock; newscreen; dispinsert end; 'X':begin erasemark; newscreen end; else; end; else if r>=' ' then begin if insert then insertchar(r) else buffer[x]:=r; if x