/* ED4.C */ #include ed0.c #include ed1.ccc char editbuf[MAXLEN]; int editp; int editpmax; int edcflag; edabt() { edgetln(); edredraw(); edbegin(); edcflag=NO; } edbegin() { editp=0; outxy(0,outyget()); } ederase() /* new: erase from cursor to end of line */ { if (editp==editpmax) { return; } edcflag=YES; editpmax=editp; edredraw(); } edhome() /* new: home cursor. subsequent calls alternate */ { /* cursor to top and bottom of screen */ int ypos; if (edrepl()!=OK){ return; } if ((ypos=outyget())1)&&(!bufattop())){ if (bufup()!=OK){ return(ERR); } ypos--; } } edgetln(); outxy(edxpos(),ypos); } edchng(c) char c; { char oldc; int k; if (editp>=editpmax) { edins(c); return; } oldc=editbuf[editp]; editbuf[editp]=c; fmtadj(editbuf,editp,editpmax); k=fmtlen(editbuf,editpmax); if (k>SCRNW1) { editbuf[editp]=oldc; fmtadj(editbuf,editp,editpmax); } else { edcflag=YES; editp++; edredraw(); } } edldel() /* deletes character before cursor */ /* eddel() in original version: no change in code */ { int k; if(edxpos() < outxget()) { outxy(outxget()-1, outyget()); return; } if (editp==0) { return; } edcflag=YES; k=editp; while (k=MAXLEN){ return; } if ((editp==editpmax) & (edxpos() 0) { editbuf [editp++] = ' '; } editp=editpmax; } k=editpmax; while (k>editp) { editbuf[k]=editbuf[k-1]; k--; } editbuf[editp]=c; editp++; editpmax++; fmtadj(editbuf,editp-1,editpmax); k=fmtlen(editbuf,editpmax); if (k>SCRNW1) { edldel(); } else { edcflag=YES; edredraw(); } } edjoin() { int k; if (bufattop()) { return; } if (edrepl()!=OK) { return; } if (bufup()!=OK) { return; } k = bufgetln(editbuf,MAXLEN); if (bufdn()!=OK) { return; } k=k+bufgetln(editbuf+k,MAXLEN-k); if (k>SCRNW1) { bufgetln(editbuf,MAXLEN); return; } if (bufup()!=OK) { return; } editpmax=k; edcflag=YES; if (edrepl()!=OK) { return; } if (bufdn()!=OK) { return; } if (bufdel()!=OK) { return; } if (bufup()!=OK) { return; } if (edattop()) { edredraw(); } else { k=outyget()-1; bufout(bufln(),k,SCRNL-k); outxy(0,k); edredraw(); } } edkill(c) char c; { int k,p; if (editp==editpmax) { return; } edcflag=YES; k=1; while ((editp+k)outxget()){ outxy(edxpos(),outyget()); } else if (editpMAXLEN) { error("line truncated"); editpmax=MAXLEN; } else { editpmax=k; } fmtadj(editbuf,0,editpmax); } edrepl() { if (edcflag==NO) { return(OK); } edcflag=NO; if (bufatbot()){ return(bufins(editbuf,editpmax)); } else { return(bufrepl(editbuf,editpmax)); } } edscan(xpos) int xpos; { editp=0; while (editp