Lines Matching refs:ep

151 #   define ttyparm	(ep->e_ttyparm)
152 # define nttyparm (ep->e_nttyparm)
163 register Edit_t *ep = (Edit_t*)(shgd->ed_context);
165 ep->e_savefd = -1;
177 register Edit_t *ep = (Edit_t*)(shgd->ed_context);
178 if(fd == ep->e_savefd)
179 *tty = ep->e_savetty;
189 if(ep->e_raw==0)
191 ep->e_savetty = *tty;
192 ep->e_savefd = fd;
205 register Edit_t *ep = (Edit_t*)(shgd->ed_context);
209 if(ep->e_savefd>=0 && compare(&ep->e_savetty,tty,sizeof(struct termios)))
218 ep->e_savetty = *tty;
220 ep->e_savefd = fd;
234 register Edit_t *ep = (Edit_t*)(shgd->ed_context);
235 ep->e_keytrap = 0;
236 if(ep->e_raw==0)
239 fd = ep->e_savefd;
255 ep->e_raw = 0;
271 register Edit_t *ep = (Edit_t*)(shgd->ed_context);
272 if(ep->e_raw==RAWMODE)
274 else if(ep->e_raw==ECHOMODE)
277 if(ep->e_raw != ALTMODE)
300 ep->e_erase = ttyparm.sg_erase;
301 ep->e_kill = ttyparm.sg_kill;
302 ep->e_eof = cntl('D');
303 ep->e_werase = cntl('W');
304 ep->e_lnext = cntl('V');
307 ep->e_ttyspeed = (ttyparm.sg_ospeed>=B1200?FAST:SLOW);
356 ep->e_werase = cntl('W');
358 ep->e_werase = nttyparm.c_cc[VWERASE];
361 ep->e_werase = cntl('W');
365 ep->e_lnext = cntl('V');
367 ep->e_lnext = nttyparm.c_cc[VLNEXT];
370 ep->e_lnext = cntl('V');
372 ep->e_intr = ttyparm.c_cc[VINTR];
373 ep->e_eof = ttyparm.c_cc[VEOF];
374 ep->e_erase = ttyparm.c_cc[VERASE];
375 ep->e_kill = ttyparm.c_cc[VKILL];
378 ep->e_ttyspeed = (cfgetospeed(&ttyparm)>=B1200?FAST:SLOW);
380 ep->e_raw = (echomode?ECHOMODE:RAWMODE);
395 register Edit_t *ep = (Edit_t*)(shgd->ed_context);
398 switch(ep->e_raw)
408 if( ep->e_ttyspeed == 0)
411 ep->e_ttyspeed = (ttyparm.sg_ospeed>=B1200?FAST:SLOW);
412 ep->e_raw = ALTMODE;
443 register Edit_t *ep = (Edit_t*)(shgd->ed_context);
444 switch(ep->e_raw)
459 ep->e_eof = ttyparm.c_cc[VEOF];
472 nttyparm.c_cc[VEOL2] = ep->e_eof; /* make EOF an eol char */
474 nttyparm.c_cc[VEOL] = ep->e_eof; /* make EOF an eol char */
486 ep->e_werase = nttyparm.c_cc[VWERASE];
488 ep->e_werase = cntl('W');
493 ep->e_lnext = nttyparm.c_cc[VLNEXT];
495 ep->e_lnext = cntl('V');
497 ep->e_erase = ttyparm.c_cc[VERASE];
498 ep->e_kill = ttyparm.c_cc[VKILL];
501 ep->e_ttyspeed = (cfgetospeed(&ttyparm)>=B1200?FAST:SLOW);
502 ep->e_raw = ALTMODE;
539 void ed_flush(Edit_t *ep)
541 register int n = ep->e_outptr-ep->e_outbase;
545 write(fd,ep->e_outbase,(unsigned)n);
546 ep->e_outptr = ep->e_outbase;
562 void ed_crlf(register Edit_t *ep)
565 ed_putchar(ep,'\r');
568 ed_putchar(ep,'\r');
571 ed_putchar(ep,'\r');
573 ed_putchar(ep,'\n');
574 ed_flush(ep);
589 void ed_setup(register Edit_t *ep, int fd, int reedit)
591 Shell_t *shp = ep->sh;
598 ep->e_fd = fd;
599 ep->e_multiline = sh_isoption(SH_MULTILINE)!=0;
610 ep->sh->winch = 0;
613 ep->hlist = 0;
614 ep->nhlist = 0;
615 ep->hoff = 0;
618 ep->e_stkptr = stakptr(0);
619 ep->e_stkoff = staktell();
624 last = ep->e_prbuff;
629 ep->e_hismax = hist_max(hp);
630 ep->e_hismin = hist_min(hp);
634 ep->e_hismax = ep->e_hismin = ep->e_hloff = 0;
636 ep->e_hline = ep->e_hismax;
638 ep->e_wsize = MAXLINE;
640 ep->e_wsize = ed_window()-2;
641 ep->e_winsz = ep->e_wsize+2;
642 ep->e_crlf = 1;
643 ep->e_plen = 0;
644 pp = ep->e_prompt;
654 ep->e_crlf = 0;
678 if(pp>ep->e_prompt+1)
682 if(pp == (ep->e_prompt+2)) /* quote char */
688 ep->e_crlf = 1;
691 pp = ep->e_prompt+1;
696 while((pp-ep->e_prompt)%TABSIZE)
719 ep->e_crlf = 0;
728 if(pp-ep->e_prompt > qlen)
729 ep->e_plen = pp - ep->e_prompt - qlen;
731 if(!ep->e_multiline && (ep->e_wsize -= ep->e_plen) < 7)
733 register int shift = 7-ep->e_wsize;
734 ep->e_wsize = 7;
735 pp = ep->e_prompt+1;
737 ep->e_plen -= shift;
738 last[-ep->e_plen-2] = '\r';
747 ep->e_outbase = ep->e_outptr = buff;
748 ep->e_outlast = ep->e_outptr + MAXLINE;
753 ep->e_outbase = ep->e_outptr = (char*)sfreserve(sfstderr,SF_UNBOUND,SF_LOCKR);
754 ep->e_outlast = ep->e_outptr + sfvalue(sfstderr);
757 sfwrite(sfstderr,ep->e_outptr,0);
758 ep->e_eol = reedit;
759 if(ep->e_multiline)
763 if(!ep->e_term)
764 ep->e_term = nv_search("TERM",shp->var_tree,0);
765 if(ep->e_term && (term=nv_getval(ep->e_term)) && strlen(term)<sizeof(ep->e_termname) && strcmp(term,ep->e_termname))
771 strcpy(ep->e_termname,term);
774 ep->e_wsize = MAXLINE - (ep->e_plen+1);
776 if(ep->e_default && (pp = nv_getval(ep->e_default)))
781 ep->e_lookahead = n;
783 ep->e_lbuf[n] = *pp++;
784 ep->e_default = 0;
788 static void ed_putstring(register Edit_t *ep, const char *str)
792 ed_putchar(ep,c);
795 static void ed_nputchar(register Edit_t *ep, int n, int c)
798 ed_putchar(ep,c);
812 register Edit_t *ep = (Edit_t*)context;
814 register int delim = ((ep->e_raw&RAWMODE)?nttyparm.c_cc[VEOL]:'\n');
815 Shell_t *shp = ep->sh;
818 if(ep->e_raw==ALTMODE)
832 if(ep->sh->winch && sh_isstate(SH_INTERACTIVE) && (sh_isoption(SH_VI) || sh_isoption(SH_EMACS)))
837 ed_putchar(ep,'\r');
838 ed_flush(ep);
840 n = (ep->e_plen+ep->e_cur)/++ep->e_winsz;
842 ed_putstring(ep,CURSOR_UP);
843 if(ep->e_multiline && newsize>ep->e_winsz && (lastpos.line=(ep->e_plen+ep->e_peol)/ep->e_winsz))
849 ed_nputchar(ep,ep->e_winsz,' ');
850 ed_putchar(ep,'\n');
852 ed_nputchar(ep,ep->e_winsz,' ');
854 ed_putstring(ep,CURSOR_UP);
856 ep->sh->winch = 0;
857 ed_flush(ep);
860 ep->e_winsz = newsize-1;
861 if(ep->e_winsz < MINWINDOW)
862 ep->e_winsz = MINWINDOW;
863 if(!ep->e_multiline && ep->e_wsize < MAXLINE)
864 ep->e_wsize = ep->e_winsz-2;
865 ep->e_nocrnl=1;
866 if(*ep->e_vi_insert)
878 ep->sh->winch = 0;
887 # define fixtime() if(isdevtty)utime(ep->e_tty,&utimes)
891 if(errno==0 && !ep->e_tty)
893 if((ep->e_tty=ttyname(fd)) && stat(ep->e_tty,&statb)>=0)
895 ep->e_tty_ino = statb.st_ino;
896 ep->e_tty_dev = statb.st_dev;
899 if(ep->e_tty_ino && fstat(fd,&statb)>=0 && statb.st_ino==ep->e_tty_ino && statb.st_dev==ep->e_tty_dev)
934 static int putstack(Edit_t *ep,char string[], register int nbyte, int type)
939 int size, offset = ep->e_lookahead + nbyte;
953 ep->e_lookahead = 0;
956 siglongjmp(ep->e_env, UINTR);
977 if ((c=ed_read(ep,ep->e_fd,endp, 1,0)) == 1)
991 ep->e_lbuf[--offset] = c;
996 if(offset -= ep->e_lookahead)
999 ep->e_lbuf[ep->e_lookahead+size-offset] = ep->e_lbuf[ep->e_lookahead+size];
1001 ep->e_lookahead += nbyte-offset;
1006 ep->e_lbuf[ep->e_lookahead++] = (type?-c:c);
1011 ep->e_lookahead = 0;
1014 siglongjmp(ep->e_env, UINTR);
1032 int ed_getchar(register Edit_t *ep,int mode)
1036 if(!ep->e_lookahead)
1038 ed_flush(ep);
1039 ep->e_inmacro = 0;
1041 *ep->e_vi_insert = (mode==-2);
1042 if((n=ed_read(ep,ep->e_fd,readin,-LOOKAHEAD,0)) > 0)
1043 n = putstack(ep,readin,n,1);
1044 *ep->e_vi_insert = 0;
1046 if(ep->e_lookahead)
1049 if((c = ep->e_lbuf[--ep->e_lookahead]) < 0)
1051 if(mode<=0 && -c == ep->e_intr)
1054 siglongjmp(ep->e_env, UINTR);
1056 if(mode<=0 && ep->sh->st.trap[SH_KEYTRAP])
1058 ep->e_keytrap = 1;
1064 if(!ep->e_lookahead)
1066 if((c=sfpkrd(ep->e_fd,readin+n,1,'\r',(mode?400L:-1L),0))>0)
1067 putstack(ep,readin+n,c,1);
1069 if(!ep->e_lookahead)
1071 if((c=ep->e_lbuf[--ep->e_lookahead])>=0)
1073 ep->e_lookahead++;
1084 if(n=keytrap(ep,readin,n,LOOKAHEAD-n,mode))
1086 putstack(ep,readin,n,0);
1087 c = ep->e_lbuf[--ep->e_lookahead];
1090 c = ed_getchar(ep,mode);
1091 ep->e_keytrap = 0;
1099 if(ep->e_tabcount && !(c=='\t'||c==ESC || c=='\\' || c=='=' || c==cntl('L') || isdigit(c)))
1100 ep->e_tabcount = 0;
1103 siglongjmp(ep->e_env,(n==0?UEOF:UINTR));
1107 void ed_ungetchar(Edit_t *ep,register int c)
1109 if (ep->e_lookahead < LOOKAHEAD)
1110 ep->e_lbuf[ep->e_lookahead++] = c;
1118 void ed_putchar(register Edit_t *ep,register int c)
1121 register char *dp = ep->e_outptr;
1149 if(dp >= ep->e_outlast)
1150 ed_flush(ep);
1152 ep->e_outptr = dp;
1159 Edpos_t ed_curpos(Edit_t *ep,genchar *phys, int off, int cur, Edpos_t curpos)
1162 register int c=1, col=ep->e_plen;
1177 while(col > ep->e_winsz)
1180 col -= (ep->e_winsz+1);
1195 if(col > ep->e_winsz)
1204 int ed_setcursor(register Edit_t *ep,genchar *physical,register int old,register int new,int first)
1219 if(ep->e_multiline)
1221 ep->e_curpos = ed_curpos(ep, physical, old,0,ep->e_curpos);
1222 if(clear && old>=ep->e_peol && (clear=ep->e_winsz-ep->e_curpos.col)>0)
1224 ed_nputchar(ep,clear,' ');
1225 ed_nputchar(ep,clear,'\b');
1228 newpos = ed_curpos(ep, physical, new,old,ep->e_curpos);
1229 if(ep->e_curpos.col==0 && ep->e_curpos.line>0 && oldline<ep->e_curpos.line && delta<0)
1230 ed_putstring(ep,"\r\n");
1232 if(ep->e_curpos.line > newpos.line)
1234 int n,pline,plen=ep->e_plen;
1235 for(;ep->e_curpos.line > newpos.line; ep->e_curpos.line--)
1236 ed_putstring(ep,CURSOR_UP);
1237 pline = plen/(ep->e_winsz+1);
1239 plen -= pline*(ep->e_winsz+1);
1242 if((n=plen- ep->e_curpos.col)>0)
1244 ep->e_curpos.col += n;
1245 ed_putchar(ep,'\r');
1246 if(!ep->e_crlf && pline==0)
1247 ed_putstring(ep,ep->e_prompt);
1250 int m = ep->e_winsz+1-plen;
1251 ed_putchar(ep,'\n');
1256 ed_putchar(ep,physical[m++]);
1258 ed_nputchar(ep,n,' ');
1259 ed_putstring(ep,CURSOR_UP);
1263 else if(ep->e_curpos.line < newpos.line)
1265 ed_nputchar(ep, newpos.line-ep->e_curpos.line,'\n');
1266 ep->e_curpos.line = newpos.line;
1267 ed_putchar(ep,'\r');
1268 ep->e_curpos.col = 0;
1270 delta = newpos.col - ep->e_curpos.col;
1277 int bs= newpos.line && ep->e_plen>ep->e_winsz;
1281 if(!ep->e_crlf || bs || (2*delta <= ((old-first)+(newpos.line?0:ep->e_plen))) )
1283 ed_nputchar(ep,delta,'\b');
1289 ed_putstring(ep,ep->e_prompt);
1292 first = 1+(newpos.line*ep->e_winsz - ep->e_plen);
1293 ed_putchar(ep,'\r');
1300 ed_putchar(ep,physical[old++]);
1307 int ed_virt_to_phys(Edit_t *ep,genchar *virt,genchar *phys,int cur,int voff,int poff)
1346 c += ep->e_plen;
1366 ep->e_peol = dp-phys;
1491 #define ott ep->e_ott
1500 register Edit_t *ep = (Edit_t*)(shgd->ed_context);
1502 ep->e_tcgeta = 0;
1503 ep->e_echoctl = (ECHOCTL!=0);
1514 ep->e_tcgeta++;
1515 ep->e_echoctl = 0;
1522 register Edit_t *ep = (Edit_t*)(shgd->ed_context);
1524 if(ep->e_tcgeta)
1564 static int keytrap(Edit_t *ep,char *inbuff,register int insize, int bufsize, int mode)
1568 Shell_t *shp = ep->sh;
1571 ed_external(ep->e_inbuf,cp=buff);
1573 cp = ep->e_inbuf;
1576 ep->e_col = ep->e_cur;
1579 ep->e_col++;
1580 *ep->e_vi_insert = ESC;
1583 *ep->e_vi_insert = 0;
1585 nv_putval(ED_COLNOD,(char*)&ep->e_col,NV_NOFREE|NV_INTEGER);
1587 nv_putval(ED_MODENOD,ep->e_vi_insert,NV_NOFREE);
1657 int ed_histgen(Edit_t *ep,const char *pattern)
1666 if(!(hp=ep->sh->gd->hist_ptr) && (!nv_getval(HISTFILE) || !sh_histinit(ep->sh)))
1668 if(ep->e_cur <=2)
1670 else if(maxmatch && ep->e_cur > maxmatch)
1672 ep->hlist = 0;
1673 ep->hfirst = 0;
1676 hp = ep->sh->gd->hist_ptr;
1681 if(ep->hlist)
1683 m = strlen(ep->hpat)-4;
1684 if(memcmp(pattern,ep->hpat+2,m)==0)
1686 n = strcmp(cp,ep->hpat)==0;
1687 for(argv=av=(char**)ep->hlist,mp=ep->hfirst; mp;mp= mp->next)
1693 ep->hmax = av-argv;
1694 if(ep->hmax==0)
1695 maxmatch = ep->e_cur;
1696 return(ep->hmax=av-argv);
1698 stakset(ep->e_stkptr,ep->e_stkoff);
1700 if((m=strlen(cp)) >= sizeof(ep->hpat))
1701 m = sizeof(ep->hpat)-1;
1702 memcpy(ep->hpat,cp,m);
1703 ep->hpat[m] = 0;
1759 ep->hlist = (Histmatch_t**)argv;
1760 ep->hfirst = ep->hlist?ep->hlist[0]:0;
1761 return(ep->hmax=ac);
1764 void ed_histlist(Edit_t *ep,int n)
1766 Histmatch_t *mp,**mpp = ep->hlist+ep->hoff;
1771 if(!ep->e_lookahead && sfpkrd(ep->e_fd,save,1,'\r',200L,-1)>0)
1772 ed_ungetchar(ep,save[0]);
1773 if(ep->e_lookahead)
1775 ed_putchar(ep,'\n');
1776 ed_putchar(ep,'\r');
1780 stakset(ep->e_stkptr,ep->e_stkoff);
1781 ep->hlist = 0;
1782 ep->nhlist = 0;
1784 ed_putstring(ep,KILL_LINE);
1790 if(mp->len >= ep->e_winsz-4)
1792 last = ep->e_winsz-4;
1798 ed_putchar(ep,i<10?' ':'1');
1799 ed_putchar(ep,i<10?'0'+i:'0'+i-10);
1800 ed_putchar(ep,')');
1801 ed_putchar(ep,' ');
1802 ed_putstring(ep,mp->data);
1808 ep->nhlist = i;
1812 ed_putstring(ep,CURSOR_UP);
1814 ed_flush(ep);