From f4b93c1b79df73b4558c9af1436e6962c91b0dda Mon Sep 17 00:00:00 2001 From: Yuvia Date: Tue, 12 Aug 2025 13:15:49 +0000 Subject: [PATCH] q --- .gitignore | 2 - 6.out | Bin 501034 -> 0 bytes acme.6 | Bin 43068 -> 0 bytes acme.c | 955 --------------------------------- addr.6 | Bin 14404 -> 0 bytes addr.c | 291 ---------- buff.6 | Bin 13785 -> 0 bytes buff.c | 322 ----------- cols.6 | Bin 30892 -> 0 bytes cols.c | 551 ------------------- dat.h | 570 -------------------- disk.6 | Bin 7392 -> 0 bytes disk.c | 142 ----- ecmd.6 | Bin 54741 -> 0 bytes ecmd.c | 1366 ----------------------------------------------- edit.6 | Bin 24280 -> 0 bytes edit.c | 679 ------------------------ edit.h | 99 ---- elog.6 | Bin 13190 -> 0 bytes elog.c | 353 ------------- exec.6 | Bin 67246 -> 0 bytes exec.c | 1499 ---------------------------------------------------- file.6 | Bin 12397 -> 0 bytes file.c | 310 ----------- fns.h | 96 ---- fsys.6 | Bin 26229 -> 0 bytes fsys.c | 749 -------------------------- logf.6 | Bin 7454 -> 0 bytes logf.c | 202 ------- look.6 | Bin 35722 -> 0 bytes look.c | 737 -------------------------- mkfile | 41 -- regx.6 | Bin 25196 -> 0 bytes regx.c | 839 ----------------------------- rows.6 | Bin 38340 -> 0 bytes rows.c | 736 -------------------------- scrl.6 | Bin 8885 -> 0 bytes scrl.c | 157 ------ text.6 | Bin 66260 -> 0 bytes text.c | 1484 --------------------------------------------------- time.6 | Bin 5626 -> 0 bytes time.c | 120 ----- util.6 | Bin 17626 -> 0 bytes util.c | 485 ----------------- wind.6 | Bin 32543 -> 0 bytes wind.c | 698 ------------------------ xfid.6 | Bin 46559 -> 0 bytes xfid.c | 1100 -------------------------------------- 48 files changed, 14583 deletions(-) delete mode 100644 .gitignore delete mode 100755 6.out delete mode 100644 acme.6 delete mode 100644 acme.c delete mode 100644 addr.6 delete mode 100644 addr.c delete mode 100644 buff.6 delete mode 100644 buff.c delete mode 100644 cols.6 delete mode 100644 cols.c delete mode 100644 dat.h delete mode 100644 disk.6 delete mode 100644 disk.c delete mode 100644 ecmd.6 delete mode 100644 ecmd.c delete mode 100644 edit.6 delete mode 100644 edit.c delete mode 100644 edit.h delete mode 100644 elog.6 delete mode 100644 elog.c delete mode 100644 exec.6 delete mode 100644 exec.c delete mode 100644 file.6 delete mode 100644 file.c delete mode 100644 fns.h delete mode 100644 fsys.6 delete mode 100644 fsys.c delete mode 100644 logf.6 delete mode 100644 logf.c delete mode 100644 look.6 delete mode 100644 look.c delete mode 100644 mkfile delete mode 100644 regx.6 delete mode 100644 regx.c delete mode 100644 rows.6 delete mode 100644 rows.c delete mode 100644 scrl.6 delete mode 100644 scrl.c delete mode 100644 text.6 delete mode 100644 text.c delete mode 100644 time.6 delete mode 100644 time.c delete mode 100644 util.6 delete mode 100644 util.c delete mode 100644 wind.6 delete mode 100644 wind.c delete mode 100644 xfid.6 delete mode 100644 xfid.c diff --git a/.gitignore b/.gitignore deleted file mode 100644 index 402b8f6..0000000 --- a/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -6.out -*.6 diff --git a/6.out b/6.out deleted file mode 100755 index f7324da7b21baf02e9865311b12ae3ef8cf94625..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 501034 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ⅅZQJ{!E(2|Sk8!NR^t6z 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 X_a)zzxo;FP-4nIJ&$~kpVsHI_HIT*9 diff --git a/acme.6 b/acme.6 deleted file mode 100644 index a8b1bf3f7c55f9a298858ff9c5f08acf8d399a98..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 43068 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 Ncp*BUC -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "dat.h" -#include "fns.h" - /* for generating syms in mkfile only: */ - #include - #include "edit.h" - -void mousethread(void*); -void keyboardthread(void*); -void waitthread(void*); -void xfidallocthread(void*); -void newwindowthread(void*); -void plumbproc(void*); - -Reffont **fontcache; -int nfontcache; -char wdir[512] = "."; -Reffont *reffonts[2]; -int snarffd = -1; -int mainpid; -int plumbsendfd; -int plumbeditfd; - -enum{ - NSnarf = 1000 /* less than 1024, I/O buffer size */ -}; -Rune snarfrune[NSnarf+1]; - -char *fontnames[2]; - -Command *command; - -void acmeerrorinit(void); -void readfile(Column*, char*); -int shutdown(void*, char*); - -void -derror(Display*, char *errorstr) -{ - error(errorstr); -} - -void -threadmain(int argc, char *argv[]) -{ - int i; - char *p, *loadfile; - char buf[256]; - Column *c; - int ncol; - Display *d; - - rfork(RFENVG|RFNAMEG); - - ncol = -1; - - loadfile = nil; - ARGBEGIN{ - case 'a': - globalindent[AUTOINDENT] = TRUE; - break; - case 'b': - bartflag = TRUE; - break; - case 'c': - p = ARGF(); - if(p == nil) - goto Usage; - ncol = atoi(p); - if(ncol <= 0) - goto Usage; - break; - case 'f': - fontnames[0] = ARGF(); - if(fontnames[0] == nil) - goto Usage; - break; - case 'F': - fontnames[1] = ARGF(); - if(fontnames[1] == nil) - goto Usage; - break; - case 'i': - globalindent[SPACESINDENT] = TRUE; - break; - case 'l': - loadfile = ARGF(); - if(loadfile == nil) - goto Usage; - break; - default: - Usage: - fprint(2, "usage: acme [-aib] [-c ncol] [-f font] [-F fixedfont] [-l loadfile | file...]\n"); - exits("usage"); - }ARGEND - - if(fontnames[0] != nil) - fontnames[0] = estrdup(fontnames[0]); - else - if((fontnames[0] = getenv("font")) == nil) - fontnames[0] = estrdup("/lib/font/bit/vga/unicode.font"); - if(access(fontnames[0], 0) < 0){ - fprint(2, "acme: can't access %s: %r\n", fontnames[0]); - exits("font open"); - } - if(fontnames[1] == nil) - fontnames[1] = fontnames[0]; - fontnames[1] = estrdup(fontnames[1]); - - quotefmtinstall(); - cputype = getenv("cputype"); - objtype = getenv("objtype"); - home = getenv("home"); - p = getenv("tabstop"); - if(p != nil){ - maxtab = strtoul(p, nil, 0); - free(p); - } - if(maxtab == 0) - maxtab = 4; - if(loadfile) - rowloadfonts(loadfile); - putenv("font", fontnames[0]); - snarffd = open("/dev/snarf", OREAD|OCEXEC); - if(cputype){ - sprint(buf, "/acme/bin/%s", cputype); - bind(buf, "/bin", MBEFORE); - } - bind("/acme/bin", "/bin", MBEFORE); - getwd(wdir, sizeof wdir); - - if(geninitdraw(nil, derror, fontnames[0], "acme", nil, Refnone) < 0){ - fprint(2, "acme: can't open display: %r\n"); - exits("geninitdraw"); - } - d = display; - font = d->defaultfont; - - reffont.f = font; - reffonts[0] = &reffont; - incref(&reffont); /* one to hold up 'font' variable */ - incref(&reffont); /* one to hold up reffonts[0] */ - fontcache = emalloc(sizeof(Reffont*)); - nfontcache = 1; - fontcache[0] = &reffont; - - iconinit(); - timerinit(); - rxinit(); - - cwait = threadwaitchan(); - ccommand = chancreate(sizeof(Command**), 0); - ckill = chancreate(sizeof(Rune*), 0); - cxfidalloc = chancreate(sizeof(Xfid*), 0); - cxfidfree = chancreate(sizeof(Xfid*), 0); - cnewwindow = chancreate(sizeof(Channel*), 0); - cerr = chancreate(sizeof(char*), 0); - cedit = chancreate(sizeof(int), 0); - cexit = chancreate(sizeof(int), 0); - cwarn = chancreate(sizeof(void*), 1); - if(cwait==nil || ccommand==nil || ckill==nil || cxfidalloc==nil || cxfidfree==nil || cnewwindow==nil || cerr==nil || cedit==nil || cexit==nil || cwarn==nil){ - fprint(2, "acme: can't create initial channels: %r\n"); - threadexitsall("channels"); - } - - mousectl = initmouse(nil, screen); - if(mousectl == nil){ - fprint(2, "acme: can't initialize mouse: %r\n"); - threadexitsall("mouse"); - } - mouse = mousectl; - keyboardctl = initkeyboard(nil); - if(keyboardctl == nil){ - fprint(2, "acme: can't initialize keyboard: %r\n"); - threadexitsall("keyboard"); - } - mainpid = getpid(); - plumbeditfd = plumbopen("edit", OREAD|OCEXEC); - if(plumbeditfd >= 0){ - cplumb = chancreate(sizeof(Plumbmsg*), 0); - proccreate(plumbproc, nil, STACK); - } - plumbsendfd = plumbopen("send", OWRITE|OCEXEC); - - fsysinit(); - - #define WPERCOL 8 - disk = diskinit(); - if(!loadfile || !rowload(&row, loadfile, TRUE)){ - rowinit(&row, screen->clipr); - if(ncol < 0){ - if(argc == 0) - ncol = 2; - else{ - ncol = (argc+(WPERCOL-1))/WPERCOL; - if(ncol < 2) - ncol = 2; - } - } - if(ncol == 0) - ncol = 2; - for(i=0; i=row.ncol) - readfile(c, argv[i]); - else - readfile(row.col[i/WPERCOL], argv[i]); - } - } - flushimage(display, 1); - - acmeerrorinit(); - threadcreate(keyboardthread, nil, STACK); - threadcreate(mousethread, nil, STACK); - threadcreate(waitthread, nil, STACK); - threadcreate(xfidallocthread, nil, STACK); - threadcreate(newwindowthread, nil, STACK); - - threadnotify(shutdown, 1); - recvul(cexit); - killprocs(); - threadexitsall(nil); -} - -void -readfile(Column *c, char *s) -{ - Window *w; - Rune rb[256]; - int nb, nr; - Runestr rs; - - w = coladd(c, nil, nil, -1); - cvttorunes(s, strlen(s), rb, &nb, &nr, nil); - rs = cleanrname((Runestr){rb, nr}); - winsetname(w, rs.r, rs.nr); - textload(&w->body, 0, s, 1); - w->body.file->mod = FALSE; - w->dirty = FALSE; - winsettag(w); - textscrdraw(&w->body); - textsetselect(&w->tag, w->tag.file->nc, w->tag.file->nc); - xfidlog(w, "new"); -} - -char *oknotes[] ={ - "delete", - "hangup", - "kill", - "exit", - nil -}; - -int dumping; - -int -shutdown(void*, char *msg) -{ - int i; - - killprocs(); - if(!dumping && strcmp(msg, "kill")!=0 && strcmp(msg, "exit")!=0 && getpid()==mainpid){ - dumping = TRUE; - rowdump(&row, nil); - } - for(i=0; oknotes[i]; i++) - if(strncmp(oknotes[i], msg, strlen(oknotes[i])) == 0) - threadexitsall(msg); - print("acme: %s\n", msg); - abort(); -} - -void -killprocs(void) -{ - Command *c; - - fsysclose(); - for(c=command; c; c=c->next) - postnote(PNGROUP, c->pid, "hangup"); - remove(acmeerrorfile); -} - -static int errorfd; - -void -acmeerrorproc(void *) -{ - char *buf, *s; - int n; - - threadsetname("acmeerrorproc"); - buf = emalloc(8192+1); - while((n=read(errorfd, buf, 8192)) >= 0){ - buf[n] = '\0'; - s = estrdup(buf); - sendp(cerr, s); - } - free(buf); -} - -void -acmeerrorinit(void) -{ - int fd, pfd[2]; - char buf[64]; - - if(pipe(pfd) < 0) - error("can't create pipe"); - sprint(acmeerrorfile, "/srv/acme.%s.%d", user, mainpid); - fd = create(acmeerrorfile, OWRITE, 0666); - if(fd < 0){ - remove(acmeerrorfile); - fd = create(acmeerrorfile, OWRITE, 0666); - if(fd < 0) - error("can't create acmeerror file"); - } - sprint(buf, "%d", pfd[0]); - write(fd, buf, strlen(buf)); - close(fd); - /* reopen pfd[1] close on exec */ - sprint(buf, "/fd/%d", pfd[1]); - errorfd = open(buf, OREAD|OCEXEC); - if(errorfd < 0) - error("can't re-open acmeerror file"); - close(pfd[1]); - close(pfd[0]); - proccreate(acmeerrorproc, nil, STACK); -} - -void -plumbproc(void *) -{ - Plumbmsg *m; - - threadsetname("plumbproc"); - for(;;){ - m = plumbrecv(plumbeditfd); - if(m == nil) - threadexits(nil); - sendp(cplumb, m); - } -} - -void -keyboardthread(void *) -{ - Rune r; - Timer *timer; - Text *t; - enum { KTimer, KKey, NKALT }; - static Alt alts[NKALT+1]; - - alts[KTimer].c = nil; - alts[KTimer].v = nil; - alts[KTimer].op = CHANNOP; - alts[KKey].c = keyboardctl->c; - alts[KKey].v = &r; - alts[KKey].op = CHANRCV; - alts[NKALT].op = CHANEND; - - timer = nil; - typetext = nil; - threadsetname("keyboardthread"); - for(;;){ - switch(alt(alts)){ - case KTimer: - timerstop(timer); - t = typetext; - if(t!=nil && t->what==Tag){ - winlock(t->w, 'K'); - wincommit(t->w, t); - winunlock(t->w); - flushimage(display, 1); - } - alts[KTimer].c = nil; - alts[KTimer].op = CHANNOP; - break; - case KKey: - casekeyboard: - typetext = rowtype(&row, r, mouse->xy); - t = typetext; - if(t!=nil && t->col!=nil && !(r==Kdown || r==Kleft || r==Kright)) /* scrolling doesn't change activecol */ - activecol = t->col; - if(t!=nil && t->w!=nil) - t->w->body.file->curtext = &t->w->body; - if(timer != nil) - timercancel(timer); - if(t!=nil && t->what==Tag) { - timer = timerstart(500); - alts[KTimer].c = timer->c; - alts[KTimer].op = CHANRCV; - }else{ - timer = nil; - alts[KTimer].c = nil; - alts[KTimer].op = CHANNOP; - } - if(nbrecv(keyboardctl->c, &r) > 0) - goto casekeyboard; - flushimage(display, 1); - break; - } - } -} - -void -mousethread(void *) -{ - Text *t, *argt; - int but; - uint q0, q1; - Window *w; - Plumbmsg *pm; - Mouse m; - char *act; - enum { MResize, MMouse, MPlumb, MWarnings, NMALT }; - static Alt alts[NMALT+1]; - - threadsetname("mousethread"); - alts[MResize].c = mousectl->resizec; - alts[MResize].v = nil; - alts[MResize].op = CHANRCV; - alts[MMouse].c = mousectl->c; - alts[MMouse].v = &mousectl->Mouse; - alts[MMouse].op = CHANRCV; - alts[MPlumb].c = cplumb; - alts[MPlumb].v = ± - alts[MPlumb].op = CHANRCV; - alts[MWarnings].c = cwarn; - alts[MWarnings].v = nil; - alts[MWarnings].op = CHANRCV; - if(cplumb == nil) - alts[MPlumb].op = CHANNOP; - alts[NMALT].op = CHANEND; - - for(;;){ - qlock(&row); - flushwarnings(); - qunlock(&row); - flushimage(display, 1); - switch(alt(alts)){ - case MResize: - if(getwindow(display, Refnone) < 0) - error("attach to window"); - scrlresize(); - rowresize(&row, screen->clipr); - break; - case MPlumb: - if(strcmp(pm->type, "text") == 0){ - act = plumblookup(pm->attr, "action"); - if(act==nil || strcmp(act, "showfile")==0) - plumblook(pm); - else if(strcmp(act, "showdata")==0) - plumbshow(pm); - } - plumbfree(pm); - break; - case MWarnings: - break; - case MMouse: - /* - * Make a copy so decisions are consistent; mousectl changes - * underfoot. Can't just receive into m because this introduces - * another race; see /sys/src/libdraw/mouse.c. - */ - m = mousectl->Mouse; - qlock(&row); - t = rowwhich(&row, m.xy); - - if((t!=mousetext && t!=nil && t->w!=nil) && - (mousetext==nil || mousetext->w==nil || t->w->id!=mousetext->w->id)) { - xfidlog(t->w, "focus"); - } - - if(t!=mousetext && mousetext!=nil && mousetext->w!=nil){ - winlock(mousetext->w, 'M'); - mousetext->eq0 = ~0; - wincommit(mousetext->w, mousetext); - winunlock(mousetext->w); - } - mousetext = t; - if(t == nil) - goto Continue; - w = t->w; - if(t==nil || m.buttons==0) - goto Continue; - but = 0; - if(m.buttons == 1) - but = 1; - else if(m.buttons == 2) - but = 2; - else if(m.buttons == 4) - but = 3; - barttext = t; - if(t->what==Body && ptinrect(m.xy, t->scrollr)){ - if(but){ - winlock(w, 'M'); - t->eq0 = ~0; - textscroll(t, but); - winunlock(w); - } - goto Continue; - } - /* scroll buttons, wheels, etc. */ - if(t->what==Body && w != nil && (m.buttons & (8|16))){ - if(m.buttons & 8) - but = Kscrolloneup; - else - but = Kscrollonedown; - winlock(w, 'M'); - t->eq0 = ~0; - texttype(t, but); - winunlock(w); - goto Continue; - } - if(ptinrect(m.xy, t->scrollr)){ - if(but){ - if(t->what == Columntag) - rowdragcol(&row, t->col, but); - else if(t->what == Tag){ - coldragwin(t->col, t->w, but); - if(t->w) - barttext = &t->w->body; - } - if(t->col) - activecol = t->col; - } - goto Continue; - } - if(m.buttons){ - if(w) - winlock(w, 'M'); - t->eq0 = ~0; - if(w) - wincommit(w, t); - else - textcommit(t, TRUE); - if(m.buttons & 1){ - textselect(t); - if(w) - winsettag(w); - argtext = t; - seltext = t; - if(t->col) - activecol = t->col; /* button 1 only */ - if(t->w!=nil && t==&t->w->body) - activewin = t->w; - }else if(m.buttons & 2){ - if(textselect2(t, &q0, &q1, &argt)) - execute(t, q0, q1, FALSE, argt); - }else if(m.buttons & 4){ - if(textselect3(t, &q0, &q1)) - look3(t, q0, q1, FALSE); - } - if(w) - winunlock(w); - goto Continue; - } - Continue: - qunlock(&row); - break; - } - } -} - -/* - * There is a race between process exiting and our finding out it was ever created. - * This structure keeps a list of processes that have exited we haven't heard of. - */ -typedef struct Pid Pid; -struct Pid -{ - int pid; - char msg[ERRMAX]; - Pid *next; -}; - -void -waitthread(void *) -{ - Waitmsg *w; - Command *c, *lc; - uint pid; - int found, ncmd; - Rune *cmd; - char *err; - Text *t; - Pid *pids, *p, *lastp; - enum { WErr, WKill, WWait, WCmd, NWALT }; - Alt alts[NWALT+1]; - - threadsetname("waitthread"); - pids = nil; - alts[WErr].c = cerr; - alts[WErr].v = &err; - alts[WErr].op = CHANRCV; - alts[WKill].c = ckill; - alts[WKill].v = &cmd; - alts[WKill].op = CHANRCV; - alts[WWait].c = cwait; - alts[WWait].v = &w; - alts[WWait].op = CHANRCV; - alts[WCmd].c = ccommand; - alts[WCmd].v = &c; - alts[WCmd].op = CHANRCV; - alts[NWALT].op = CHANEND; - - command = nil; - for(;;){ - switch(alt(alts)){ - case WErr: - qlock(&row); - warning(nil, "%s", err); - free(err); - flushimage(display, 1); - qunlock(&row); - break; - case WKill: - found = FALSE; - ncmd = runestrlen(cmd); - for(c=command; c; c=c->next){ - /* -1 for blank */ - if(runeeq(c->name, c->nname-1, cmd, ncmd) == TRUE){ - if(postnote(PNGROUP, c->pid, "kill") < 0) - warning(nil, "kill %S: %r\n", cmd); - found = TRUE; - } - } - if(!found) - warning(nil, "Kill: no process %S\n", cmd); - free(cmd); - break; - case WWait: - pid = w->pid; - lc = nil; - for(c=command; c; c=c->next){ - if(c->pid == pid){ - if(lc) - lc->next = c->next; - else - command = c->next; - break; - } - lc = c; - } - qlock(&row); - t = &row.tag; - textcommit(t, TRUE); - if(c == nil){ - /* helper processes use this exit status */ - if(strncmp(w->msg, "libthread", 9) != 0){ - p = emalloc(sizeof(Pid)); - p->pid = pid; - strncpy(p->msg, w->msg, sizeof(p->msg)); - p->next = pids; - pids = p; - } - }else{ - if(search(t, c->name, c->nname)){ - textdelete(t, t->q0, t->q1, TRUE); - textsetselect(t, 0, 0); - } - if(w->msg[0]) - warning(c->md, "%s\n", w->msg); - flushimage(display, 1); - } - qunlock(&row); - free(w); - Freecmd: - if(c){ - if(c->iseditcmd) - sendul(cedit, 0); - free(c->text); - free(c->name); - fsysdelid(c->md); - free(c); - } - break; - case WCmd: - /* has this command already exited? */ - lastp = nil; - for(p=pids; p!=nil; p=p->next){ - if(p->pid == c->pid){ - if(p->msg[0]) - warning(c->md, "%s\n", p->msg); - if(lastp == nil) - pids = p->next; - else - lastp->next = p->next; - free(p); - goto Freecmd; - } - lastp = p; - } - c->next = command; - command = c; - qlock(&row); - t = &row.tag; - textcommit(t, TRUE); - textinsert(t, 0, c->name, c->nname, TRUE); - textsetselect(t, 0, 0); - flushimage(display, 1); - qunlock(&row); - break; - } - } -} - -void -xfidallocthread(void*) -{ - Xfid *xfree, *x; - enum { Alloc, Free, N }; - static Alt alts[N+1]; - - threadsetname("xfidallocthread"); - alts[Alloc].c = cxfidalloc; - alts[Alloc].v = nil; - alts[Alloc].op = CHANRCV; - alts[Free].c = cxfidfree; - alts[Free].v = &x; - alts[Free].op = CHANRCV; - alts[N].op = CHANEND; - - xfree = nil; - for(;;){ - switch(alt(alts)){ - case Alloc: - x = xfree; - if(x) - xfree = x->next; - else{ - x = emalloc(sizeof(Xfid)); - x->c = chancreate(sizeof(void(*)(Xfid*)), 0); - x->arg = x; - threadcreate(xfidctl, x->arg, STACK); - } - sendp(cxfidalloc, x); - break; - case Free: - x->next = xfree; - xfree = x; - break; - } - } -} - -/* this thread, in the main proc, allows fsysproc to get a window made without doing graphics */ -void -newwindowthread(void*) -{ - Window *w; - - threadsetname("newwindowthread"); - - for(;;){ - /* only fsysproc is talking to us, so synchronization is trivial */ - recvp(cnewwindow); - w = makenewwindow(nil); - winsettag(w); - xfidlog(w, "new"); - sendp(cnewwindow, w); - } -} - -Reffont* -rfget(int fix, int save, int setfont, char *name) -{ - Reffont *r; - Font *f; - int i; - - r = nil; - if(name == nil){ - name = fontnames[fix]; - r = reffonts[fix]; - } - if(r == nil){ - for(i=0; if->name) == 0){ - r = fontcache[i]; - goto Found; - } - f = openfont(display, name); - if(f == nil){ - warning(nil, "can't open font file %s: %r\n", name); - return nil; - } - r = emalloc(sizeof(Reffont)); - r->f = f; - fontcache = erealloc(fontcache, (nfontcache+1)*sizeof(Reffont*)); - fontcache[nfontcache++] = r; - } - Found: - if(save){ - incref(r); - if(reffonts[fix]) - rfclose(reffonts[fix]); - reffonts[fix] = r; - if(name != fontnames[fix]){ - free(fontnames[fix]); - fontnames[fix] = estrdup(name); - } - } - if(setfont){ - reffont.f = r->f; - incref(r); - rfclose(reffonts[0]); - font = r->f; - reffonts[0] = r; - incref(r); - iconinit(); - } - incref(r); - return r; -} - -void -rfclose(Reffont *r) -{ - int i; - - if(decref(r) == 0){ - for(i=0; i= nfontcache) - warning(nil, "internal error: can't find font in cache\n"); - else{ - nfontcache--; - memmove(fontcache+i, fontcache+i+1, (nfontcache-i)*sizeof(Reffont*)); - } - freefont(r->f); - free(r); - } -} - -Cursor boxcursor = { - {-7, -7}, - {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xF8, 0x1F, 0xF8, 0x1F, 0xF8, 0x1F, - 0xF8, 0x1F, 0xF8, 0x1F, 0xF8, 0x1F, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, - {0x00, 0x00, 0x7F, 0xFE, 0x7F, 0xFE, 0x7F, 0xFE, - 0x70, 0x0E, 0x70, 0x0E, 0x70, 0x0E, 0x70, 0x0E, - 0x70, 0x0E, 0x70, 0x0E, 0x70, 0x0E, 0x70, 0x0E, - 0x7F, 0xFE, 0x7F, 0xFE, 0x7F, 0xFE, 0x00, 0x00} -}; - -void -iconinit(void) -{ - Rectangle r; - Image *tmp; - - tagcols[BACK] = display->white; - tagcols[HIGH] = allocimagemix(display, DBlack, 0xb53a38FF); - tagcols[BORD] = allocimagemix(display, DBlack, 0xb53a38FF); - tagcols[TEXT] = display->black; - tagcols[HTEXT] = display->white; - - textcols[BACK] = allocimagemix(display, DPaleyellow, DWhite); - textcols[HIGH] = allocimagemix(display, DBlack, 0xb53a38FF); - textcols[BORD] = allocimage(display, Rect(0,0,2,2), screen->chan, 1, DWhite); - draw(textcols[BORD], Rect(1,1,2,2), display->black, nil, ZP); - draw(textcols[BORD], Rect(0,0,1,1), display->black, nil, ZP); - textcols[TEXT] = display->black; - textcols[HTEXT] = display->white; - - if(button){ - freeimage(button); - freeimage(modbutton); - freeimage(colbutton); - } - - r = Rect(0, 0, Scrollwid, font->height+1); - button = allocimage(display, r, screen->chan, 0, DNofill); - draw(button, r, tagcols[BORD], nil, r.min); - r.max.x -= 4; - fillellipse(button, (Point){r.min.x + 5, r.min.y + 7}, 3, 3, display->white, ZP); - r = button->r; - modbutton = allocimage(display, r, screen->chan, 0, DNofill); - draw(modbutton, r, tagcols[BORD], nil, r.min); - r = insetrect(r, 2); - fillellipse(modbutton, (Point){r.min.x + 3, r.min.y + 5}, 3, 3, display->black, ZP); - r = button->r; - colbutton = allocimagemix(display, DBlack, 0xb53a38FF); - but2col = allocimage(display, r, screen->chan, 1, 0x000000FF); - but3col = allocimagemix(display, DBlack, 0xb53a38FF); -} - -/* - * /dev/snarf updates when the file is closed, so we must open our own - * fd here rather than use snarffd - */ - -/* rio truncates larges snarf buffers, so this avoids using the - * service if the string is huge */ - -#define MAXSNARF 100*1024 - -void -putsnarf(void) -{ - int fd, i, n; - - if(snarffd<0 || snarfbuf.nc==0) - return; - if(snarfbuf.nc > MAXSNARF) - return; - fd = open("/dev/snarf", OWRITE); - if(fd < 0) - return; - for(i=0; i= NSnarf) - n = NSnarf; - bufread(&snarfbuf, i, snarfrune, n); - if(fprint(fd, "%.*S", n, snarfrune) < 0) - break; - } - close(fd); -} - -void -getsnarf() -{ - int nulls; - - if(snarfbuf.nc > MAXSNARF) - return; - if(snarffd < 0) - return; - seek(snarffd, 0, 0); - bufreset(&snarfbuf); - bufload(&snarfbuf, 0, snarffd, &nulls); -} diff --git a/addr.6 b/addr.6 deleted file mode 100644 index 2ac161dd0e16ca2d8809cda592339e155caafffa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14404 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 diff --git a/addr.c b/addr.c deleted file mode 100644 index 0637fab..0000000 --- a/addr.c +++ /dev/null @@ -1,291 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "dat.h" -#include "fns.h" - -enum -{ - None = 0, - Fore = '+', - Back = '-', -}; - -enum -{ - Char, - Line, -}; - -int -isaddrc(int r) -{ - if(r && utfrune("0123456789+-/$.#,;", r)!=nil) - return TRUE; - return FALSE; -} - -/* - * quite hard: could be almost anything but white space, but we are a little conservative, - * aiming for regular expressions of alphanumerics and no white space - */ -int -isregexc(int r) -{ - if(r == 0) - return FALSE; - if(isalnum(r)) - return TRUE; - if(utfrune("^+-.*?#,;[]()$", r)!=nil) - return TRUE; - return FALSE; -} - -// nlcounttopos starts at q0 and advances nl lines, -// being careful not to walk past the end of the text, -// and then nr chars, being careful not to walk past -// the end of the current line. -// It returns the final position. -long -nlcounttopos(Text *t, long q0, long nl, long nr) -{ - while(nl > 0 && q0 < t->file->nc) { - if(textreadc(t, q0++) == '\n') - nl--; - } - if(nl > 0) - return q0; - while(nr > 0 && q0 < t->file->nc && textreadc(t, q0) != '\n') { - q0++; - nr--; - } - return q0; -} - -Range -number(Mntdir *md, Text *t, Range r, int line, int dir, int size, int *evalp) -{ - uint q0, q1; - - if(size == Char){ - if(dir == Fore) - line = r.q1+line; - else if(dir == Back){ - if(r.q0==0 && line>0) - r.q0 = t->file->nc; - line = r.q0 - line; - } - if(line<0 || line>t->file->nc) - goto Rescue; - *evalp = TRUE; - return (Range){line, line}; - } - q0 = r.q0; - q1 = r.q1; - switch(dir){ - case None: - q0 = 0; - q1 = 0; - Forward: - while(line>0 && q1file->nc) - if(textreadc(t, q1++) == '\n' || q1==t->file->nc) - if(--line > 0) - q0 = q1; - if(line > 0) - goto Rescue; - break; - case Fore: - if(q1 > 0) - while(q1file->nc && textreadc(t, q1-1) != '\n') - q1++; - q0 = q1; - goto Forward; - case Back: - if(q0 < t->file->nc) - while(q0>0 && textreadc(t, q0-1)!='\n') - q0--; - q1 = q0; - while(line>0 && q0>0){ - if(textreadc(t, q0-1) == '\n'){ - if(--line >= 0) - q1 = q0; - } - --q0; - } - /* :1-1 is :0 = #0, but :1-2 is an error */ - if(line > 1) - goto Rescue; - while(q0>0 && textreadc(t, q0-1)!='\n') - --q0; - } - *evalp = TRUE; - return (Range){q0, q1}; - - Rescue: - if(md != nil) - warning(nil, "address out of range\n"); - *evalp = FALSE; - return r; -} - - -Range -regexp(Mntdir *md, Text *t, Range lim, Range r, Rune *pat, int dir, int *foundp) -{ - int found; - Rangeset sel; - int q; - - if(pat[0] == '\0' && rxnull()){ - warning(md, "no previous regular expression\n"); - *foundp = FALSE; - return r; - } - if(pat[0] && rxcompile(pat) == FALSE){ - *foundp = FALSE; - return r; - } - if(dir == Back) - found = rxbexecute(t, r.q0, &sel); - else{ - if(lim.q0 < 0) - q = Infinity; - else - q = lim.q1; - found = rxexecute(t, nil, r.q1, q, &sel); - } - if(!found && md==nil) - warning(nil, "no match for regexp\n"); - *foundp = found; - return sel.r[0]; -} - -Range -address(Mntdir *md, Text *t, Range lim, Range ar, void *a, uint q0, uint q1, int (*getc)(void*, uint), int *evalp, uint *qp) -{ - int dir, size, npat; - int prevc, c, nc, n; - uint q; - Rune *pat; - Range r, nr; - - r = ar; - q = q0; - dir = None; - size = Line; - c = 0; - while(q < q1){ - prevc = c; - c = (*getc)(a, q++); - switch(c){ - default: - *qp = q-1; - return r; - case ';': - ar = r; - /* fall through */ - case ',': - if(prevc == 0) /* lhs defaults to 0 */ - r.q0 = 0; - if(q>=q1 && t!=nil && t->file!=nil) /* rhs defaults to $ */ - r.q1 = t->file->nc; - else{ - nr = address(md, t, lim, ar, a, q, q1, getc, evalp, &q); - r.q1 = nr.q1; - } - *qp = q; - return r; - case '+': - case '-': - if(*evalp && (prevc=='+' || prevc=='-')) - if((nc=(*getc)(a, q))!='#' && nc!='/' && nc!='?') - r = number(md, t, r, 1, prevc, Line, evalp); /* do previous one */ - dir = c; - break; - case '.': - case '$': - if(q != q0+1){ - *qp = q-1; - return r; - } - if(*evalp) - if(c == '.') - r = ar; - else - r = (Range){t->file->nc, t->file->nc}; - if(q < q1) - dir = Fore; - else - dir = None; - break; - case '#': - if(q==q1 || (c=(*getc)(a, q++))<'0' || '9'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 aYgui -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "dat.h" -#include "fns.h" - -enum -{ - Slop = 100, /* room to grow with reallocation */ -}; - -static -void -sizecache(Buffer *b, uint n) -{ - if(n <= b->cmax) - return; - b->cmax = n+Slop; - b->c = runerealloc(b->c, b->cmax); -} - -static -void -addblock(Buffer *b, uint i, uint n) -{ - if(i > b->nbl) - error("internal error: addblock"); - - b->bl = realloc(b->bl, (b->nbl+1)*sizeof b->bl[0]); - if(i < b->nbl) - memmove(b->bl+i+1, b->bl+i, (b->nbl-i)*sizeof(Block*)); - b->bl[i] = disknewblock(disk, n); - b->nbl++; -} - -static -void -delblock(Buffer *b, uint i) -{ - if(i >= b->nbl) - error("internal error: delblock"); - - diskrelease(disk, b->bl[i]); - b->nbl--; - if(i < b->nbl) - memmove(b->bl+i, b->bl+i+1, (b->nbl-i)*sizeof(Block*)); - b->bl = realloc(b->bl, b->nbl*sizeof b->bl[0]); -} - -/* - * Move cache so b->cq <= q0 < b->cq+b->cnc. - * If at very end, q0 will fall on end of cache block. - */ - -static -void -flush(Buffer *b) -{ - if(b->cdirty || b->cnc==0){ - if(b->cnc == 0) - delblock(b, b->cbi); - else - diskwrite(disk, &b->bl[b->cbi], b->c, b->cnc); - b->cdirty = FALSE; - } -} - -static -void -setcache(Buffer *b, uint q0) -{ - Block **blp, *bl; - uint i, q; - - if(q0 > b->nc) - error("internal error: setcache"); - /* - * flush and reload if q0 is not in cache. - */ - if(b->nc == 0 || (b->cq<=q0 && q0cq+b->cnc)) - return; - /* - * if q0 is at end of file and end of cache, continue to grow this block - */ - if(q0==b->nc && q0==b->cq+b->cnc && b->cnccq){ - q = 0; - i = 0; - }else{ - q = b->cq; - i = b->cbi; - } - blp = &b->bl[i]; - while(q+(*blp)->n <= q0 && q+(*blp)->n < b->nc){ - q += (*blp)->n; - i++; - blp++; - if(i >= b->nbl) - error("block not found"); - } - bl = *blp; - /* remember position */ - b->cbi = i; - b->cq = q; - sizecache(b, bl->n); - b->cnc = bl->n; - /*read block*/ - diskread(disk, bl, b->c, b->cnc); -} - -void -bufinsert(Buffer *b, uint q0, Rune *s, uint n) -{ - uint i, m, t, off; - - if(q0 > b->nc) - error("internal error: bufinsert"); - - while(n > 0){ - setcache(b, q0); - off = q0-b->cq; - if(b->cnc+n <= Maxblock){ - /* Everything fits in one block. */ - t = b->cnc+n; - m = n; - if(b->bl == nil){ /* allocate */ - if(b->cnc != 0) - error("internal error: bufinsert1 cnc!=0"); - addblock(b, 0, t); - b->cbi = 0; - } - sizecache(b, t); - runemove(b->c+off+m, b->c+off, b->cnc-off); - runemove(b->c+off, s, m); - b->cnc = t; - goto Tail; - } - /* - * We must make a new block. If q0 is at - * the very beginning or end of this block, - * just make a new block and fill it. - */ - if(q0==b->cq || q0==b->cq+b->cnc){ - if(b->cdirty) - flush(b); - m = min(n, Maxblock); - if(b->bl == nil){ /* allocate */ - if(b->cnc != 0) - error("internal error: bufinsert2 cnc!=0"); - i = 0; - }else{ - i = b->cbi; - if(q0 > b->cq) - i++; - } - addblock(b, i, m); - sizecache(b, m); - runemove(b->c, s, m); - b->cq = q0; - b->cbi = i; - b->cnc = m; - goto Tail; - } - /* - * Split the block; cut off the right side and - * let go of it. - */ - m = b->cnc-off; - if(m > 0){ - i = b->cbi+1; - addblock(b, i, m); - diskwrite(disk, &b->bl[i], b->c+off, m); - b->cnc -= m; - } - /* - * Now at end of block. Take as much input - * as possible and tack it on end of block. - */ - m = min(n, Maxblock-b->cnc); - sizecache(b, b->cnc+m); - runemove(b->c+b->cnc, s, m); - b->cnc += m; - Tail: - b->nc += m; - q0 += m; - s += m; - n -= m; - b->cdirty = TRUE; - } -} - -void -bufdelete(Buffer *b, uint q0, uint q1) -{ - uint m, n, off; - - if(!(q0<=q1 && q0<=b->nc && q1<=b->nc)) - error("internal error: bufdelete"); - while(q1 > q0){ - setcache(b, q0); - off = q0-b->cq; - if(q1 > b->cq+b->cnc) - n = b->cnc - off; - else - n = q1-q0; - m = b->cnc - (off+n); - if(m > 0) - runemove(b->c+off, b->c+off+n, m); - b->cnc -= n; - b->cdirty = TRUE; - q1 -= n; - b->nc -= n; - } -} - -static int -bufloader(void *v, uint q0, Rune *r, int nr) -{ - bufinsert(v, q0, r, nr); - return nr; -} - -uint -loadfile(int fd, uint q0, int *nulls, int(*f)(void*, uint, Rune*, int), void *arg) -{ - char *p; - Rune *r; - int l, m, n, nb, nr; - uint q1; - - p = emalloc((Maxblock+UTFmax+1)*sizeof p[0]); - r = runemalloc(Maxblock); - m = 0; - n = 1; - q1 = q0; - /* - * At top of loop, may have m bytes left over from - * last pass, possibly representing a partial rune. - */ - while(n > 0){ - n = read(fd, p+m, Maxblock); - if(n < 0){ - warning(nil, "read error in Buffer.load"); - break; - } - m += n; - p[m] = 0; - l = m; - if(n > 0) - l -= UTFmax; - cvttorunes(p, l, r, &nb, &nr, nulls); - memmove(p, p+nb, m-nb); - m -= nb; - q1 += (*f)(arg, q1, r, nr); - } - free(p); - free(r); - return q1-q0; -} - -uint -bufload(Buffer *b, uint q0, int fd, int *nulls) -{ - if(q0 > b->nc) - error("internal error: bufload"); - return loadfile(fd, q0, nulls, bufloader, b); -} - -void -bufread(Buffer *b, uint q0, Rune *s, uint n) -{ - uint m; - - if(!(q0<=b->nc && q0+n<=b->nc)) - error("bufread: internal error"); - - while(n > 0){ - setcache(b, q0); - m = min(n, b->cnc-(q0-b->cq)); - runemove(s, b->c+(q0-b->cq), m); - q0 += m; - s += m; - n -= m; - } -} - -void -bufreset(Buffer *b) -{ - int i; - - b->nc = 0; - b->cnc = 0; - b->cq = 0; - b->cdirty = 0; - b->cbi = 0; - /* delete backwards to avoid n² behavior */ - for(i=b->nbl-1; --i>=0; ) - delblock(b, i); -} - -void -bufclose(Buffer *b) -{ - bufreset(b); - free(b->c); - b->c = nil; - b->cnc = 0; - free(b->bl); - b->bl = nil; - b->nbl = 0; -} diff --git a/cols.6 b/cols.6 deleted file mode 100644 index 65fd31d019789558c7414051dc6097dd3731f96e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30892 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 n&y~xWK$W(3;Cv)%s&ZHC69 diff --git a/cols.c b/cols.c deleted file mode 100644 index cfd29b0..0000000 --- a/cols.c +++ /dev/null @@ -1,551 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "dat.h" -#include "fns.h" - -void -colinit(Column *c, Rectangle r) -{ - Rectangle r1; - Text *t; - - draw(screen, r, display->white, nil, ZP); - c->r = r; - c->w = nil; - c->nw = 0; - t = &c->tag; - t->w = nil; - t->col = c; - r1 = r; - r1.max.y = r1.min.y + font->height; - textinit(t, fileaddtext(nil, t), r1, &reffont, tagcols); - t->what = Columntag; - r1.min.y = r1.max.y; - r1.max.y += Border; - draw(screen, r1, display->black, nil, ZP); - textinsert(t, 0, L"New Cut Paste Snarf Sort Zerox Delcol ", 38, TRUE); - textsetselect(t, t->file->nc, t->file->nc); - draw(screen, t->scrollr, colbutton, nil, colbutton->r.min); - c->safe = TRUE; -} - -Window* -coladd(Column *c, Window *w, Window *clone, int y) -{ - Rectangle r, r1; - Window *v; - int i, t; - - v = nil; - r = c->r; - r.min.y = c->tag.r.max.y+Border; - if(ynw>0){ /* steal half of last window by default */ - v = c->w[c->nw-1]; - y = v->body.r.min.y+Dy(v->body.r)/2; - } - /* look for window we'll land on */ - for(i=0; inw; i++){ - v = c->w[i]; - if(y < v->r.max.y) - break; - } - if(c->nw > 0){ - if(i < c->nw) - i++; /* new window will go after v */ - /* - * if v's too small, grow it first. - */ - if(!c->safe || v->body.maxlines<=3){ - colgrow(c, v, 1); - y = v->body.r.min.y+Dy(v->body.r)/2; - } - r = v->r; - if(i == c->nw) - t = c->r.max.y; - else - t = c->w[i]->r.min.y-Border; - r.max.y = t; - draw(screen, r, textcols[BACK], nil, ZP); - r1 = r; - y = min(y, t-(v->tag.font->height+v->body.font->height+Border+1)); - r1.max.y = min(y, v->body.r.min.y+v->body.nlines*v->body.font->height); - r1.min.y = winresize(v, r1, FALSE, FALSE); - r1.max.y = r1.min.y+Border; - draw(screen, r1, display->black, nil, ZP); - r.min.y = r1.max.y; - } - if(w == nil){ - w = emalloc(sizeof(Window)); - w->rdselfd = -1; - w->col = c; - draw(screen, r, textcols[BACK], nil, ZP); - wininit(w, clone, r); - }else{ - w->col = c; - winresize(w, r, FALSE, TRUE); - } - w->tag.col = c; - w->tag.row = c->row; - w->body.col = c; - w->body.row = c->row; - c->w = realloc(c->w, (c->nw+1)*sizeof(Window*)); - memmove(c->w+i+1, c->w+i, (c->nw-i)*sizeof(Window*)); - c->nw++; - c->w[i] = w; - savemouse(w); - /* near but not on the button */ - moveto(mousectl, addpt(w->tag.scrollr.max, Pt(3, 3))); - barttext = &w->body; - c->safe = TRUE; - return w; -} - -void -colclose(Column *c, Window *w, int dofree) -{ - Rectangle r; - int i, didmouse, up; - - /* w is locked */ - if(!c->safe) - colgrow(c, w, 1); - for(i=0; inw; i++) - if(c->w[i] == w) - goto Found; - error("can't find window"); - Found: - r = w->r; - w->tag.col = nil; - w->body.col = nil; - w->col = nil; - didmouse = restoremouse(w); - if(dofree){ - windelete(w); - winclose(w); - } - c->nw--; - memmove(c->w+i, c->w+i+1, (c->nw-i)*sizeof(Window*)); - c->w = realloc(c->w, c->nw*sizeof(Window*)); - if(c->nw == 0){ - draw(screen, r, display->white, nil, ZP); - return; - } - up = 0; - if(i == c->nw){ /* extend last window down */ - w = c->w[i-1]; - r.min.y = w->r.min.y; - r.max.y = c->r.max.y; - }else{ /* extend next window up */ - up = 1; - w = c->w[i]; - r.max.y = w->r.max.y; - } - draw(screen, r, textcols[BACK], nil, ZP); - if(c->safe) { - if(!didmouse && up) - w->showdel = TRUE; - winresize(w, r, FALSE, TRUE); - if(!didmouse && up) - movetodel(w); - } -} - -void -colcloseall(Column *c) -{ - int i; - Window *w; - - if(c == activecol) - activecol = nil; - textclose(&c->tag); - for(i=0; inw; i++){ - w = c->w[i]; - winclose(w); - } - c->nw = 0; - free(c->w); - free(c); - clearmouse(); -} - -void -colmousebut(Column *c) -{ - moveto(mousectl, divpt(addpt(c->tag.scrollr.min, c->tag.scrollr.max), 2)); -} - -void -colresize(Column *c, Rectangle r) -{ - int i, old, new; - Rectangle r1, r2; - Window *w; - - clearmouse(); - r1 = r; - r1.max.y = r1.min.y + c->tag.font->height; - textresize(&c->tag, r1, TRUE); - draw(screen, c->tag.scrollr, colbutton, nil, colbutton->r.min); - r1.min.y = r1.max.y; - r1.max.y += Border; - draw(screen, r1, display->black, nil, ZP); - r1.max.y = r.max.y; - new = Dy(r) - c->nw*(Border + font->height); - old = Dy(c->r) - c->nw*(Border + font->height); - for(i=0; inw; i++){ - w = c->w[i]; - w->maxlines = 0; - if(i == c->nw-1) - r1.max.y = r.max.y; - else { - r1.max.y = r1.min.y; - if(new > 0 && old > 0 && Dy(w->r) > Border+font->height) - r1.max.y += (Dy(w->r)-Border-font->height)*new/old + Border + font->height; - } - r1.max.y = max(r1.max.y, r1.min.y + Border+font->height); - r2 = r1; - r2.max.y = r2.min.y+Border; - draw(screen, r2, display->black, nil, ZP); - r1.min.y = r2.max.y; - r1.min.y = winresize(w, r1, FALSE, i==c->nw-1); - } - c->r = r; -} - -static -int -colcmp(void *a, void *b) -{ - Rune *r1, *r2; - int i, nr1, nr2; - - r1 = (*(Window**)a)->body.file->name; - nr1 = (*(Window**)a)->body.file->nname; - r2 = (*(Window**)b)->body.file->name; - nr2 = (*(Window**)b)->body.file->nname; - for(i=0; inw == 0) - return; - clearmouse(); - rp = emalloc(c->nw*sizeof(Rectangle)); - wp = emalloc(c->nw*sizeof(Window*)); - memmove(wp, c->w, c->nw*sizeof(Window*)); - qsort(wp, c->nw, sizeof(Window*), colcmp); - for(i=0; inw; i++) - rp[i] = wp[i]->r; - r = c->r; - r.min.y = c->tag.r.max.y; - draw(screen, r, textcols[BACK], nil, ZP); - y = r.min.y; - for(i=0; inw; i++){ - w = wp[i]; - r.min.y = y; - if(i == c->nw-1) - r.max.y = c->r.max.y; - else - r.max.y = r.min.y+Dy(w->r)+Border; - r1 = r; - r1.max.y = r1.min.y+Border; - draw(screen, r1, display->black, nil, ZP); - r.min.y = r1.max.y; - y = winresize(w, r, FALSE, i==c->nw-1); - } - free(rp); - free(c->w); - c->w = wp; -} - -void -colgrow(Column *c, Window *w, int but) -{ - Rectangle r, cr; - int i, j, k, l, y1, y2, *nl, *ny, tot, nnl, onl, dnl, h; - Window *v; - - for(i=0; inw; i++) - if(c->w[i] == w) - goto Found; - error("can't find window"); - - Found: - cr = c->r; - if(but < 0){ /* make sure window fills its own space properly */ - r = w->r; - if(i==c->nw-1 || c->safe==FALSE) - r.max.y = cr.max.y; - else - r.max.y = c->w[i+1]->r.min.y - Border; - winresize(w, r, FALSE, TRUE); - return; - } - cr.min.y = c->w[0]->r.min.y; - if(but == 3){ /* full size */ - if(i != 0){ - v = c->w[0]; - c->w[0] = w; - c->w[i] = v; - } - draw(screen, cr, textcols[BACK], nil, ZP); - winresize(w, cr, FALSE, TRUE); - for(i=1; inw; i++) - c->w[i]->body.maxlines = 0; - c->safe = FALSE; - return; - } - /* store old #lines for each window */ - onl = w->body.maxlines; - nl = emalloc(c->nw * sizeof(int)); - ny = emalloc(c->nw * sizeof(int)); - tot = 0; - for(j=0; jnw; j++){ - l = c->w[j]->body.maxlines; - nl[j] = l; - tot += l; - } - /* approximate new #lines for this window */ - if(but == 2){ /* as big as can be */ - memset(nl, 0, c->nw * sizeof(int)); - goto Pack; - } - nnl = min(onl + max(min(5, w->maxlines), onl/2), tot); - if(nnl < w->maxlines) - nnl = (w->maxlines+nnl)/2; - if(nnl == 0) - nnl = 2; - dnl = nnl - onl; - /* compute new #lines for each window */ - for(k=1; knw; k++){ - /* prune from later window */ - j = i+k; - if(jnw && nl[j]){ - l = min(dnl, max(1, nl[j]/2)); - nl[j] -= l; - nl[i] += l; - dnl -= l; - } - /* prune from earlier window */ - j = i-k; - if(j>=0 && nl[j]){ - l = min(dnl, max(1, nl[j]/2)); - nl[j] -= l; - nl[i] += l; - dnl -= l; - } - } - Pack: - /* pack everyone above */ - y1 = cr.min.y; - for(j=0; jw[j]; - r = v->r; - r.min.y = y1; - r.max.y = y1+Dy(v->tag.all); - if(nl[j]) - r.max.y += 1 + nl[j]*v->body.font->height; - if(!c->safe || !eqrect(v->r, r)){ - draw(screen, r, textcols[BACK], nil, ZP); - r.min.y = winresize(v, r, c->safe, FALSE); - }else - r.min.y = v->r.max.y; - r.max.y += Border; - draw(screen, r, display->black, nil, ZP); - y1 = r.max.y; - } - /* scan to see new size of everyone below */ - y2 = c->r.max.y; - for(j=c->nw-1; j>i; j--){ - v = c->w[j]; - r = v->r; - r.min.y = y2-Dy(v->tag.all); - if(nl[j]) - r.min.y -= 1 + nl[j]*v->body.font->height; - r.min.y -= Border; - ny[j] = r.min.y; - y2 = r.min.y; - } - /* compute new size of window */ - r = w->r; - r.min.y = y1; - r.max.y = y2; - h = w->body.font->height; - if(Dy(r) < Dy(w->tagtop)+1+h+Border) - r.max.y = r.min.y + Dy(w->tagtop)+1+h+Border; - /* draw window */ - draw(screen, r, textcols[BACK], nil, ZP); - r.max.y = winresize(w, r, c->safe, TRUE); - if(i < c->nw-1){ - r.min.y = r.max.y; - r.max.y += Border; - draw(screen, r, display->black, nil, ZP); - for(j=i+1; jnw; j++) - ny[j] -= (y2-r.max.y); - } - /* pack everyone below */ - y1 = r.max.y; - for(j=i+1; jnw; j++){ - v = c->w[j]; - r = v->r; - r.min.y = y1; - r.max.y = y1+Dy(v->tag.all); - if(nl[j]) - r.max.y += 1 + nl[j]*v->body.font->height; - draw(screen, r, textcols[BACK], nil, ZP); - y1 = winresize(v, r, c->safe, j==c->nw-1); - if(j < c->nw-1){ /* no border on last window */ - r.min.y = y1; - r.max.y += Border; - draw(screen, r, display->black, nil, ZP); - y1 = r.max.y; - } - } - free(nl); - free(ny); - c->safe = TRUE; - winmousebut(w); -} - -void -coldragwin(Column *c, Window *w, int but) -{ - Rectangle r; - int i, b; - Point p, op; - Window *v; - Column *nc; - - clearmouse(); - setcursor(mousectl, &boxcursor); - b = mouse->buttons; - op = mouse->xy; - while(mouse->buttons == b) - readmouse(mousectl); - setcursor(mousectl, nil); - if(mouse->buttons){ - while(mouse->buttons) - readmouse(mousectl); - return; - } - - for(i=0; inw; i++) - if(c->w[i] == w) - goto Found; - error("can't find window"); - - Found: - if(w->tagexpand) /* force recomputation of window tag size */ - w->taglines = 1; - p = mouse->xy; - if(abs(p.x-op.x)<5 && abs(p.y-op.y)<5){ - colgrow(c, w, but); - winmousebut(w); - return; - } - /* is it a flick to the right? */ - if(abs(p.y-op.y)<10 && p.x>op.x+30 && rowwhichcol(c->row, p)==c) - p.x = op.x+Dx(w->r); /* yes: toss to next column */ - nc = rowwhichcol(c->row, p); - if(nc!=nil && nc!=c){ - colclose(c, w, FALSE); - coladd(nc, w, nil, p.y); - winmousebut(w); - return; - } - if(i==0 && c->nw==1) - return; /* can't do it */ - if((i>0 && p.yw[i-1]->r.min.y) || (inw-1 && p.y>w->r.max.y) - || (i==0 && p.y>w->r.max.y)){ - /* shuffle */ - colclose(c, w, FALSE); - coladd(c, w, nil, p.y); - winmousebut(w); - return; - } - if(i == 0) - return; - v = c->w[i-1]; - if(p.y < v->tag.all.max.y) - p.y = v->tag.all.max.y; - if(p.y > w->r.max.y-Dy(w->tag.all)-Border) - p.y = w->r.max.y-Dy(w->tag.all)-Border; - r = v->r; - r.max.y = p.y; - if(r.max.y > v->body.r.min.y){ - r.max.y -= (r.max.y-v->body.r.min.y)%v->body.font->height; - if(v->body.r.min.y == v->body.r.max.y) - r.max.y++; - } - draw(screen, r, textcols[BACK], nil, ZP); - r.min.y = winresize(v, r, c->safe, FALSE); - r.max.y = r.min.y+Border; - draw(screen, r, display->black, nil, ZP); - r.min.y = r.max.y; - if(i == c->nw-1) - r.max.y = c->r.max.y; - else - r.max.y = c->w[i+1]->r.min.y-Border; - if(!eqrect(w->r, r)){ - draw(screen, r, textcols[BACK], nil, ZP); - winresize(w, r, c->safe, TRUE); - } - c->safe = TRUE; - winmousebut(w); -} - -Text* -colwhich(Column *c, Point p) -{ - int i; - Window *w; - - if(!ptinrect(p, c->r)) - return nil; - if(ptinrect(p, c->tag.all)) - return &c->tag; - for(i=0; inw; i++){ - w = c->w[i]; - if(ptinrect(p, w->r)){ - if(ptinrect(p, w->tag.all)) - return &w->tag; - return &w->body; - } - /* scrollr drops below w->r on low windows */ - if(ptinrect(p, w->body.scrollr)) - return &w->body; - } - return nil; -} - -int -colclean(Column *c) -{ - int i, clean; - - clean = TRUE; - for(i=0; inw; i++) - clean &= winclean(c->w[i], TRUE); - return clean; -} diff --git a/dat.h b/dat.h deleted file mode 100644 index c94c3dc..0000000 --- a/dat.h +++ /dev/null @@ -1,570 +0,0 @@ -enum -{ - Qdir, - Qacme, - Qcons, - Qconsctl, - Qdraw, - Qeditout, - Qindex, - Qlabel, - Qlog, - Qnew, - - QWaddr, - QWbody, - QWctl, - QWdata, - QWeditout, - QWerrors, - QWevent, - QWrdsel, - QWwrsel, - QWtag, - QWxdata, - QMAX, -}; - -enum -{ - Blockincr = 256, - Maxblock = 8*1024, - NRange = 10, - Infinity = 0x7FFFFFFF, /* huge value for regexp address */ -}; - -typedef struct Block Block; -typedef struct Buffer Buffer; -typedef struct Command Command; -typedef struct Column Column; -typedef struct Dirlist Dirlist; -typedef struct Dirtab Dirtab; -typedef struct Disk Disk; -typedef struct Expand Expand; -typedef struct Fid Fid; -typedef struct File File; -typedef struct Elog Elog; -typedef struct Mntdir Mntdir; -typedef struct Range Range; -typedef struct Rangeset Rangeset; -typedef struct Reffont Reffont; -typedef struct Row Row; -typedef struct Runestr Runestr; -typedef struct Text Text; -typedef struct Timer Timer; -typedef struct Window Window; -typedef struct Xfid Xfid; - -struct Runestr -{ - Rune *r; - int nr; -}; - -struct Range -{ - int q0; - int q1; -}; - -struct Block -{ - vlong addr; /* disk address in bytes */ - union - { - uint n; /* number of used runes in block */ - Block *next; /* pointer to next in free list */ - }; -}; - -struct Disk -{ - int fd; - vlong addr; /* length of temp file */ - Block *free[Maxblock/Blockincr+1]; -}; - -Disk* diskinit(void); -Block* disknewblock(Disk*, uint); -void diskrelease(Disk*, Block*); -void diskread(Disk*, Block*, Rune*, uint); -void diskwrite(Disk*, Block**, Rune*, uint); - -struct Buffer -{ - uint nc; - Rune *c; /* cache */ - uint cnc; /* bytes in cache */ - uint cmax; /* size of allocated cache */ - uint cq; /* position of cache */ - int cdirty; /* cache needs to be written */ - uint cbi; /* index of cache Block */ - Block **bl; /* array of blocks */ - uint nbl; /* number of blocks */ -}; -void bufinsert(Buffer*, uint, Rune*, uint); -void bufdelete(Buffer*, uint, uint); -uint bufload(Buffer*, uint, int, int*); -void bufread(Buffer*, uint, Rune*, uint); -void bufclose(Buffer*); -void bufreset(Buffer*); - -struct Elog -{ - short type; /* Delete, Insert, Filename */ - uint q0; /* location of change (unused in f) */ - uint nd; /* number of deleted characters */ - uint nr; /* # runes in string or file name */ - Rune *r; -}; -void elogterm(File*); -void elogclose(File*); -void eloginsert(File*, int, Rune*, int); -void elogdelete(File*, int, int); -void elogreplace(File*, int, int, Rune*, int); -void elogapply(File*); - -struct File -{ - Buffer; /* the data */ - Buffer delta; /* transcript of changes */ - Buffer epsilon; /* inversion of delta for redo */ - Buffer *elogbuf; /* log of pending editor changes */ - Elog elog; /* current pending change */ - Rune *name; /* name of associated file */ - int nname; /* size of name */ - uvlong qidpath; /* of file when read */ - uint mtime; /* of file when read */ - int dev; /* of file when read */ - int unread; /* file has not been read from disk */ - int editclean; /* mark clean after edit command */ - - int seq; /* if seq==0, File acts like Buffer */ - int mod; - Text *curtext; /* most recently used associated text */ - Text **text; /* list of associated texts */ - int ntext; - int dumpid; /* used in dumping zeroxed windows */ -}; -File* fileaddtext(File*, Text*); -void fileclose(File*); -void filedelete(File*, uint, uint); -void filedeltext(File*, Text*); -void fileinsert(File*, uint, Rune*, uint); -uint fileload(File*, uint, int, int*); -void filemark(File*); -void filereset(File*); -void filesetname(File*, Rune*, int); -void fileundelete(File*, Buffer*, uint, uint); -void fileuninsert(File*, Buffer*, uint, uint); -void fileunsetname(File*, Buffer*); -void fileundo(File*, int, uint*, uint*); -uint fileredoseq(File*); - -enum /* Text.what */ -{ - Columntag, - Rowtag, - Tag, - Body, -}; - -struct Text -{ - File *file; - Frame; - Reffont *reffont; - uint org; - uint q0; - uint q1; - int what; - int tabstop; - Window *w; - Rectangle scrollr; - Rectangle lastsr; - Rectangle all; - Row *row; - Column *col; - - uint eq0; /* start of typing for ESC */ - uint cq0; /* cache position */ - int ncache; /* storage for insert */ - int ncachealloc; - Rune *cache; - int nofill; - int needundo; -}; - -uint textbacknl(Text*, uint, uint); -uint textbsinsert(Text*, uint, Rune*, uint, int, int*); -int textbswidth(Text*, Rune); -int textclickmatch(Text*, int, int, int, uint*); -void textclose(Text*); -void textcolumnate(Text*, Dirlist**, int); -void textcommit(Text*, int); -void textconstrain(Text*, uint, uint, uint*, uint*); -void textdelete(Text*, uint, uint, int); -void textstretchsel(Text*, uint*, uint*, int); -void textfill(Text*); -void textframescroll(Text*, int); -void textinit(Text*, File*, Rectangle, Reffont*, Image**); -void textinsert(Text*, uint, Rune*, uint, int); -uint textload(Text*, uint, char*, int); -Rune textreadc(Text*, uint); -void textredraw(Text*, Rectangle, Font*, Image*, int); -void textreset(Text*); -int textresize(Text*, Rectangle, int); -void textscrdraw(Text*); -void textscroll(Text*, int); -void textselect(Text*); -int textselect2(Text*, uint*, uint*, Text**); -int textselect23(Text*, uint*, uint*, Image*, int); -int textselect3(Text*, uint*, uint*); -void textsetorigin(Text*, uint, int); -void textsetselect(Text*, uint, uint); -void textshow(Text*, uint, uint, int); -void texttype(Text*, Rune); - -enum -{ - SPACESINDENT = 0, - AUTOINDENT, - NINDENT, -}; - -struct Window -{ - QLock; - Ref; - Text tag; - Text body; - Rectangle r; - uchar isdir; - uchar isscratch; - uchar filemenu; - uchar dirty; - uchar indent[NINDENT]; - uchar showdel; - int id; - Range addr; - Range limit; - uchar nopen[QMAX]; - uchar nomark; - uchar noscroll; - Range wrselrange; - int rdselfd; - Column *col; - Xfid *eventx; - char *events; - int nevents; - int owner; - int maxlines; - Dirlist **dlp; - int ndl; - int putseq; - int nincl; - Rune **incl; - Reffont *reffont; - QLock ctllock; - uint ctlfid; - char *dumpstr; - char *dumpdir; - int dumpid; - int utflastqid; - int utflastboff; - int utflastq; - int tagsafe; /* taglines is correct */ - int tagexpand; - int taglines; - Rectangle tagtop; -}; - -void wininit(Window*, Window*, Rectangle); -void winlock(Window*, int); -void winlock1(Window*, int); -void winunlock(Window*); -void wintype(Window*, Text*, Rune); -void winundo(Window*, int); -void winsetname(Window*, Rune*, int); -void winsettag(Window*); -void winsettag1(Window*); -void wincommit(Window*, Text*); -int winresize(Window*, Rectangle, int, int); -void winclose(Window*); -void windelete(Window*); -int winclean(Window*, int); -void windirfree(Window*); -void winevent(Window*, char*, ...); -void winmousebut(Window*); -void winaddincl(Window*, Rune*, int); -void wincleartag(Window*); -char *winctlprint(Window*, char*, int); - -struct Column -{ - Rectangle r; - Text tag; - Row *row; - Window **w; - int nw; - int safe; -}; - -void colinit(Column*, Rectangle); -Window* coladd(Column*, Window*, Window*, int); -void colclose(Column*, Window*, int); -void colcloseall(Column*); -void colresize(Column*, Rectangle); -Text* colwhich(Column*, Point); -void coldragwin(Column*, Window*, int); -void colgrow(Column*, Window*, int); -int colclean(Column*); -void colsort(Column*); -void colmousebut(Column*); - -struct Row -{ - QLock; - Rectangle r; - Text tag; - Column **col; - int ncol; - -}; - -void rowinit(Row*, Rectangle); -Column* rowadd(Row*, Column *c, int); -void rowclose(Row*, Column*, int); -Text* rowwhich(Row*, Point); -Column* rowwhichcol(Row*, Point); -void rowresize(Row*, Rectangle); -Text* rowtype(Row*, Rune, Point); -void rowdragcol(Row*, Column*, int but); -int rowclean(Row*); -void rowdump(Row*, char*); -int rowload(Row*, char*, int); -void rowloadfonts(char*); - -struct Timer -{ - int dt; - int cancel; - Channel *c; /* chan(int) */ - Timer *next; -}; - -struct Command -{ - int pid; - Rune *name; - int nname; - char *text; - char **av; - int iseditcmd; - Mntdir *md; - Command *next; -}; - -struct Dirtab -{ - char *name; - uchar type; - uint qid; - uint perm; -}; - -struct Mntdir -{ - int id; - int ref; - Rune *dir; - int ndir; - Mntdir *next; - int nincl; - Rune **incl; -}; - -struct Fid -{ - int fid; - int busy; - int open; - Qid qid; - Window *w; - Dirtab *dir; - Fid *next; - Mntdir *mntdir; - int nrpart; - uchar rpart[UTFmax]; - vlong logoff; // for putlog -}; - - -struct Xfid -{ - void *arg; /* args to xfidinit */ - Fcall; - Xfid *next; - Channel *c; /* chan(void(*)(Xfid*)) */ - Fid *f; - uchar *buf; - int flushed; -}; - -void xfidctl(void *); -void xfidflush(Xfid*); -void xfidopen(Xfid*); -void xfidclose(Xfid*); -void xfidread(Xfid*); -void xfidwrite(Xfid*); -void xfidctlwrite(Xfid*, Window*); -void xfideventread(Xfid*, Window*); -void xfideventwrite(Xfid*, Window*); -void xfidindexread(Xfid*); -void xfidutfread(Xfid*, Text*, uint, int); -int xfidruneread(Xfid*, Text*, uint, uint); -void xfidlogopen(Xfid*); -void xfidlogread(Xfid*); -void xfidlogflush(Xfid*); -void xfidlog(Window*, char*); - -struct Reffont -{ - Ref; - Font *f; - -}; -Reffont *rfget(int, int, int, char*); -void rfclose(Reffont*); - -struct Rangeset -{ - Range r[NRange]; -}; - -struct Dirlist -{ - Rune *r; - int nr; - int wid; -}; - -struct Expand -{ - uint q0; - uint q1; - Rune *name; - int nname; - char *bname; - int jump; - union{ - Text *at; - Rune *ar; - }; - int (*agetc)(void*, uint); - int a0; - int a1; -}; - -enum -{ - /* fbufalloc() guarantees room off end of BUFSIZE */ - BUFSIZE = Maxblock+IOHDRSZ, /* size from fbufalloc() */ - RBUFSIZE = BUFSIZE/sizeof(Rune), - EVENTSIZE = 256, - Scrollwid = 12, /* width of scroll bar */ - Scrollgap = 4, /* gap right of scroll bar */ - Margin = 4, /* margin around text */ - Border = 2, /* line between rows, cols, windows */ -}; - -#define QID(w,q) ((w<<8)|(q)) -#define WIN(q) ((((ulong)(q).path)>>8) & 0xFFFFFF) -#define FILE(q) ((q).path & 0xFF) - -enum -{ - FALSE, - TRUE, - XXX, -}; - -enum -{ - Empty = 0, - Null = '-', - Delete = 'd', - Insert = 'i', - Replace = 'r', - Filename = 'f', -}; - -enum /* editing */ -{ - Inactive = 0, - Inserting, - Collecting, -}; - -uint globalincref; -uint seq; -uint maxtab; /* size of a tab, in units of the '0' character */ - -Display *display; -Image *screen; -Font *font; -Mouse *mouse; -Mousectl *mousectl; -Keyboardctl *keyboardctl; -Reffont reffont; -Image *modbutton; -Image *colbutton; -Image *button; -Image *but2col; -Image *but3col; -Cursor boxcursor; -Row row; -int timerpid; -Disk *disk; -Text *seltext; -Text *argtext; -Text *mousetext; /* global because Text.close needs to clear it */ -Text *typetext; /* global because Text.close needs to clear it */ -Text *barttext; /* shared between mousetask and keyboardthread */ -int bartflag; -Window *activewin; -Column *activecol; -Buffer snarfbuf; -Rectangle nullrect; -int fsyspid; -char *user; -char *cputype; -char *objtype; -char *home; -char *fontnames[2]; -char acmeerrorfile[128]; -Image *tagcols[NCOL]; -Image *textcols[NCOL]; -int plumbsendfd; -int plumbeditfd; -char wdir[]; -int editing; -int messagesize; /* negotiated in 9P version setup */ -int globalindent[NINDENT]; -Rune *delcmd; /* what command deleted the window. eg, Del, Delete, Delmesg */ - -Channel *cplumb; /* chan(Plumbmsg*) */ -Channel *cwait; /* chan(Waitmsg) */ -Channel *ccommand; /* chan(Command*) */ -Channel *ckill; /* chan(Rune*) */ -Channel *cxfidalloc; /* chan(Xfid*) */ -Channel *cxfidfree; /* chan(Xfid*) */ -Channel *cnewwindow; /* chan(Channel*) */ -Channel *mouseexit0; /* chan(int) */ -Channel *mouseexit1; /* chan(int) */ -Channel *cexit; /* chan(int) */ -Channel *cerr; /* chan(char*) */ -Channel *cedit; /* chan(int) */ -Channel *cwarn; /* chan(void*)[1] (really chan(unit)[1]) */ - -#define STACK 8192 diff --git a/disk.6 b/disk.6 deleted file mode 100644 index e83384d2fb654cd8ee46c3631300a0c67e6e461b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7392 zcmbVRdyHIF89%4n+ipuAd$-I?DQ$Q9*lmICwkVJVik8rbkkH2HJ4jEP44{l0VVomnBI z+CMtq`+Vnnopa9~Qv3DB_399RT9L89{?@)~(SngFS)eptwm`8o9$2VcjrNX|)Tq*m z|HOtfRU9v0aGs@9>!n(&>{MDKdmukUsgjMjZuM6f%vrNKT9%^iIuayvGE^vY5T8qXM&zLBqF@kr?io zb!vu7EfY127@jFAqiWtMs*X2WQ6QT0o#rK{sJS=TKh`K3yPr>Wl)A&TiR5HAcXni4 z6?}B;E2cPZUAn8I0jrkIAl=<<_MMK<$D1t`Yc<*FpE?>aTN*Mj} z`fCTvmX>Su_Cgx;k-?GkA`A#;w`X?{H>+heAgapm2@k1g=15em1j-0a_hoA6+?f#= z-dL-mrZiW{90bvebjC_~2kDH?Ih~xx5-Hm{D(4`)a9Cbl1^dzc*>wGA$MmqMzg`*#Yayndj~1o69( zwL~^sG2K5TfbREpQU7YEO|P4XL2ng-*$(r%KXW5u&>MvbdaHzFN*AWbhp2AZh!phJ z-#zzuIHy=D1yKZ-$yELvxGY-MB7G38KHb`7MZ9HPf2X>d^4>xsQ~Gn$7b5D7fhCC` zhGKY&)*d4G2xqeW{=h&4yCz%t z{itt3aD%mh*m0Y=`2u+#Km?t#T`=Ws1KKnyN`(j|LYD6Fj@8oHH>^}nXXjWbt9@*I zQMIW~=oZv6y)d>Y)~)S|sPcALa0c9rHv{ zKG`Wvs3+HZl#3FU!{eCtPw1N|<1>ncl-Iz2NYO1ox-1d3mIx)52upwu>ug(#Ox9Z7 zDF&2xoYqe0+o;~pAxublx7kH*r#^31=-vTEjN_=S3CZ>?h*{Hb)Eyw|miBiFq`U*P zks$lK5wX76im`V@)Ave{X>D=ZlT>(If0;&6uFneO&7_FVO$pYM(|7Ykbu!t_0x6w! zYFV9~riL(6v?mKSghSM_5}so_t*SS{RonV5uG+8twmu9mqN|HKb#B42WTl3(IoprIgzqr^nIh zt`pTZgh!0}3Ylzrv=SPasAC>(>-&hwcqPQPwZ8@Zi*?_=Cp?2~Yl2!(j5ubGL&iVD z9g}TMRQeSSyo7Q81_-j$67--^L|xp`!@}$|8PQG;6SF-`h`a2cZVtQrCOAoNp=gNq zWP7D(2ulYYWrm3*TQur{E;W=WQ8c0y4q@%v)|(PRr3yNG#TT}OXL9Egriv@co9bJT z^Un;uO>nZ+)HPhVlW z``Li-7zitc8O4ZkMon>v#f%bS+tx&rTit*#ZTLjYF2wGCgj&`FuNy=$z5BKcq~s2d z#(ETFS6Kvc_hh}?JD`X$<89qeL~tVpn0SJ|A=*hKF-~@?!4cHfk5PdZZFGo&ajdPs z3rN;Ail9Ei$sI4}rJHz$_n+mcT8p}r;_fa?7mMtZg1Yku1umBCJjEA)VEr!i4waH| zVzhz_|HdQBt_la5HsJ$eL-_;Y$1XKwm+I5m?N-5i9mX&Vo`CO|1$%&D7Klx`FgSYC z(s3Ke$BjHL7>+(^>G;x;ds!b8{{Tk(d|K8-ld@jHvi%VkVcu4ts*NJ*$`++0Ot)lihoH)P3&IG%(~v{} z4gx~}6mC(xHKp`BESv0qoRok?{4x)QDTJW)A92`TTd_zy>@MNW1j^Kl7l&anzO zsD>=$yVbThmA_D>t$zYzuKEeG`X3V_Pgcv86t9eU6`=@@R=J9Zc=~NcEbYfPlrUkz zSjc_wI(tbrE$U{}s<;v3UThU*TC9pvPjD0pLykg$a$a}StZwp63-?;`l)oB1L&%xo z=_E=R1VictFwpt9@I`}lTzVZrzL5r_s|8iwJO*)C{S?9|qT{fNA}T8`lMhn*gO<(; z%2y0dR44zirH}Ii2#wU%LO1H`q)QQzU@zc=+~ORTf^t}{ig;fVIq%O9ZVsuR(e)&e z+XYpgZ#{j{disQ2nXe@Dbyzw24=vqRd%lv=pSN_=u)emn$Q$*2(#2B}=;@T0Qg~r; zCSS6uGA95QbaVa#cZNgkZFPYN`9q=fL#v<{y!)UZu90`Xgt;bVzW@B?%fhu|tvGJf z6YkoSyYJ;!Zw}8Yl^WyY#dcgr1-_Cw}S2!|WoQ#WO z33nvbyzJMPyb`YG*RzZodBJint`EI~2pv3-O>U4)R7?;gRyL$-$ZOEKdm4DwcFO0b zyxX6<_1~dRow@6RA4e@Yh zX`+b73dfw8>I>5Y)1(RXQl_MLR;f{&p5a-kz*F;HZiKT@+)9-hbcyVQ(Bv z#;}oQuh(4x3tH^Yf$>j(pZGQ>wJv*`8{jL%9q5PSv0%5 z(}Ih&Qp-i>@)KQcSo#9J3_X&G74(lTU?o1 zm+Y-7(YwU-s+2jnb=S#obvdZYgKmDO(mEBCmVp&M~m<==I0L zHFo0@)wF9mM}cg7Z3Tam>Do8W0=IAR{HzilaiCr9w9bc41B}|l`OZ1;`pmw2!gHc} z(Ny?~?>2{HV6 -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "dat.h" -#include "fns.h" - -static Block *blist; - -int -tempfile(void) -{ - char buf[128]; - int i, fd; - - snprint(buf, sizeof buf, "/tmp/X%d.%.4sacme", getpid(), user); - for(i='A'; i<='Z'; i++){ - buf[5] = i; - if(access(buf, AEXIST) == 0) - continue; - fd = create(buf, ORDWR|ORCLOSE|OCEXEC, 0600); - if(fd >= 0) - return fd; - } - return -1; -} - -Disk* -diskinit() -{ - Disk *d; - - d = emalloc(sizeof(Disk)); - d->fd = tempfile(); - if(d->fd < 0){ - fprint(2, "acme: can't create temp file: %r\n"); - threadexitsall("diskinit"); - } - return d; -} - -static -uint -ntosize(uint n, uint *ip) -{ - uint size; - - if(n > Maxblock) - error("internal error: ntosize"); - size = n; - if(size & (Blockincr-1)) - size += Blockincr - (size & (Blockincr-1)); - /* last bucket holds blocks of exactly Maxblock */ - if(ip) - *ip = size/Blockincr; - return size * sizeof(Rune); -} - -Block* -disknewblock(Disk *d, uint n) -{ - uint i, j, size; - Block *b; - - size = ntosize(n, &i); - b = d->free[i]; - if(b) - d->free[i] = b->next; - else{ - /* allocate in chunks to reduce malloc overhead */ - if(blist == nil){ - blist = emalloc(100*sizeof(Block)); - for(j=0; j<100-1; j++) - blist[j].next = &blist[j+1]; - } - b = blist; - blist = b->next; - b->addr = d->addr; - if(d->addr+size < d->addr){ - error("temp file overflow"); - } - d->addr += size; - } - b->n = n; - return b; -} - -void -diskrelease(Disk *d, Block *b) -{ - uint i; - - ntosize(b->n, &i); - b->next = d->free[i]; - d->free[i] = b; -} - -void -diskwrite(Disk *d, Block **bp, Rune *r, uint n) -{ - int size, nsize; - Block *b; - - b = *bp; - size = ntosize(b->n, nil); - nsize = ntosize(n, nil); - if(size != nsize){ - diskrelease(d, b); - b = disknewblock(d, n); - *bp = b; - } - if(pwrite(d->fd, r, n*sizeof(Rune), b->addr) != n*sizeof(Rune)) - error("write error to temp file"); - b->n = n; -} - -void -diskread(Disk *d, Block *b, Rune *r, uint n) -{ - int tot, nr; - char *p; - - if(n > b->n) - error("internal error: diskread"); - - ntosize(b->n, nil); - n *= sizeof(Rune); - p = (char*)r; - for(tot = 0; tot < n; tot += nr){ - nr = pread(d->fd, p+tot, n-tot, b->addr+tot); - if(nr <= 0) - error("read error from temp file"); - } - if(tot != n) - error("read error from temp file"); -} diff --git a/ecmd.6 b/ecmd.6 deleted file mode 100644 index 84815ee3983d7a0c50b8b614fc605df7150ba649..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 54741 zcmbuo33y#sbvC?D?BjXRl_JSbV(WUk9%b23+AstHmkgYQ*T_F(XDs504u)4&Lt3 zaCS%n|H+1%8aX`no4;Y4$?4Il_Lv80?>+?m)1-fPc7>_|%|28p{lA+X9hsU^PXDb40kfmK zY4ST|lSdZ+dVZgsY9Br*lShjXFll_6eF^!|0dFsq{(rWpv5}UddxtEY9lp8rmlOK` zxs8rZn#pg;)Y;)#%l>aoPE0qI$lsBrv%}l{?+;ef@^JF>`_B1HBYDR3%rwe542Bbs z_sk?oBb|o4ZH#^}fWVxY$7I(4W_2EujSw@OgJSK}C%<*|ldiYl& zT4K!k>7?VJIWjLe^9<(UdCcX;oFCB&V^-&Bt~BPQ^O&oQIX_2qDk8dko@SRZ=SNgA zrV>A#Y(M^rXE#n8of;p>MrWp`#z$L|Gt=Q@_!v@NIjxb>M0+^d^4tTb8VgDqo#bw6 zENCRX!^xhBYhK(~IFXHyhk-zTs4Q%Bl8=K*+RzzJKKOQVf|My+F*=K+k*lPwXeE{7$w`{(RmxYkAU0fC**XwNhIAeNH`__RPQ7;0 zT@R!}y588|1W4}zeM8cHb;wrjZniS|Z!mldlAf6*tFr3Br%g95ytuyMctT#%owN@~ z8q#fMMC@ymepl#E+WTE$>wJZl*vU;vf6b`=bR#r!b=j+X*zF7(!JfiUPZm}kNqUb- zE!_;kwJZlEqE9}(emME~Q_s7*vAW%w$lBAan3RUfYE(>8CI2Z{SCQhqqu}&iWEU@#TM~0L4{OkD(8eQY)&&RWDCPTid5-MHDH>o_|$HKn@y7LgQ_hZ}N z->9JKq5WLeo<%^)L#2X%q)?xdHAY4oJy(Zj_aqt`?0v@a42=|zkwnPD^!1f!hz-V1}nUWL#9ZD^kQ1CJGh;olYF1HuVcFwRiO(= zh4h6~I3}QCyN)KM)SprzS9}o_>mG^&=j?E@^*c{n+31}fze4@pK==VeRC-akq`YuR z=7nn#FEu)n(xfY?24+|xh4xgqE)LK37ki0&Lb6_ z*OuBmZ<%7su^w3?3Yr_tHo}h?a)%i}nuCqIEGf!8`td7}0Q3PReZR!bm3 z6RjDQcS5GbVH6HDaFoETDY0tUibcJgDZQi|;$;NK6uc-X3lR&-LcP2kO6ea6k1&}k z7*bv^BufP&Xw8WQBWS*7=@2Gemex-4UqCV4jUZ$tb5j<6O0z}D5L(HQDoTcEUdfnZ zEEytqe<%4_3<)b)0rtiPG`b_9J0y?!82$Ps)vxukdErHwVJ=W|H{c4ZBwDIJks8#y{R{q93I~sH{a( zBb66p-2~}7Af25{7C`0+C7Dz#Wf+mqz#Mse^W)(F>70=zeI1d>jm(F%`!(husYD7{ zmU&90=_wruM3yX4d9pgm!U*9u)UK2kAA#;`*{>2M>^|$^43HuH4<oOwL<8n zDq&Ho9@2d!l>3Uve5F7|nh8D4D?zFhUdt&KQAq!hsg2+t%HXR6orG%9^+=#>Fa1_jGR%ocX=X*L_w!z1pC>^`KTrL^uo^N zG_LA+&aWE(NNaq0tXVDew;6w=3FYarYOc>|8SP9|54I;J3Oi>TKdX+lIi1Y)&ozGa zSao#f@Zph8qV#0pO!6^>8BhXk!a`B>4k`$toSlU(O1y?)=0}LRHD~14W|%P-xrdMt z!n-K!B;7<6_6MSD3XcARh;wb@E1J47)4L%-DV|P^^lu1ip${N-o$X=4kbaA@!O#yG zJp4=`cxHMmw5Kndp2_*=8~=)F^FYqOIO5I<}{itO3M~3_cOnV_i=ch+-zYPMEMO>AFpnj}KiIs2_Z! z2lJe+0foa5G#A#wKnTb5Hzu$qgajUg2wlB&(mMd)V*~#}fGUB|DcApP+9C=e{vA%n z_J8`y#+jVyw#JXNu!I|cLgmax%9_W;(pl3P=BDKKt^w;TbTaku7+OiIu!`6WY$F&9 zTOdKH9fBOC7G}q@!;{Ts&Yv|tmdDkx@#)Dbsq`by(vO5@VK*d9 zG3KNsIrHg=qOZ_zh}mAyzwpLRGDHPAl~lmucrX5=7-w9p!XnOILSXZ8^Jn}+A^YiydBoEo2+#6HW(@LP<1QzP92dl--ilV0>D zweWb5Doivm%+m=&Iz)4wK%$oSWYdX$P|Xk7MPYA>-ljfSvC@W0czxZ~-d*oe?6 zl4P%Ke|?8*+sKPBn4wmkN5yRoO`cJ!o&}ho*ECA*!qgD0Qi8mPAnIKRvzVYF#V%w; zL8|WiQUBK)+ec<+F-t+BC=8YD*!UBLl-OTS$&Q1blHX%WcH}A9&nQ?;5kHbcsIC}^ z8%~b?yze88ovj%*4@5y>sO&_(NpXc-3&WtWDai&wGNhMU5nezI%|49keFT%Vo+kEf zcHHt{W7jNAYD0V=P$5)y!7M3PuK zB3>ImiC7Z$*Ym&oX`cT&q?O%`be8I!gfQkGQN9pR&D}`30r2ePlEO}w5c_2_Dq%Sk4UINh52#IEo1UBCx z}6u=%VKC>WbGUkae zw!k^ljY10=JFWq#T2IA5Y|oh5D!gjW7~}DO;Y46W9>dP(WSo^`j&gG*Qrp z7-N?L_e?;`3{dNB>8FT*~qmd=~5J!kvI--3UsN5Mf zL5v`48W)NT={Kw@y_^9mNNOh$c`ZFm$~`P*?qQOPJXBMx92sM?c0l~$E#>zS?&!& zdZUy45iQ(o$gy_LA>E zqp=)EIcy`G1X66f5TsNsJRS^(2g-5O9q^hAX4hAe9w>{=ISbNMn%OK| zrkX#TJp7_f?{2KXG41HoOp~QTaj2}o^hs1aqFlMp>(sSMWkWGzxNfb|0VTO=nyXN) z!ClQ`$=5Lzy_MCdJ|v3!GdI!@(t z2MR*kV}5%BwJ@X(1X8RKS@;uBMI9pIWua!**kp!H*js>mKY|{$OS{m7adWdHAvS}R zt}IB_&R6ZXfB2k61x9>=N2#5!y@@6{6C9GsTWPY_JNSV>$Z;tXg(2txXmU#OrwkUy zuPg|fj3rALOMT9CqtJrJ<~Sf#o02GyI`RL_SkrCvQau=`mBEb!HAy@{N&7-q++x0c zGgF|U-Y8FN76@Y?q*T&;sGle7Brf!lCgRxMN&cM1i&0%rqxx|gk6sxFgf^;|1w5PV zo}R|APA=?lAGjN{gTElePIAqt{&Wbzv6v%2q))I+OGypV*iSUa7q(@oC*#aTqORUMV5J9X`%B0@p)6p+q`&trN$Y|keKCz@;jgLc zvG*<&L|f>+Q zsECBINua-xG#>~g^rZCP83>F098+aS>w&zSiMW5`wk;x#Rc~Wd(b|cGkQ+B9u)@NQ z4K{)2N{ZN%BIKUboG5HWp`W}(bj*K8DApXLNI~*!$ez^_?wJu5*)UaR!vlFXh?tGJ z0dYcG^)hz zhIT@w4=(ML(}JZCq17VBM;OyGoE(1M`@hxb=bZpw?NS^n{n+U^K}B1ot+@h~!mxJb z*IW);AmDkhM5f+P!RVf~qYJ z2xDu=f`oCz7!rhsjUPQdm(0`Z2tw%9pF$f~NTIG^aUfp0nF$yO?~y`^RNn@VuodS0fTni&}z=Pj-eLR?v&X*tE|$beSzF+``}n?i@&kS=^w_DOd5jCFDExDCCXvcIheP zCTm$&?ROZtRW|Jt9HzaG&KsNK1jqn=vUz?kV zd5ccKv+z%}u%*Gy^D`hdCkN!^omyira!hX0qt3jB&iq~~(E*se^&bm_I=aEUt0n|@ z=t|)Mp^$#SD${*bya(a5@)ELHCORh~@0@VdMr4y*Ql8>uP0iFau1Y0+FD(y-&q50w z##;~y9maTd%kCW)a4%W>EZj!E_I}8)Mnoz%oQ2N;!rO4c=Skh1^f(o>T?=2N0QW}V zmaVD?#?ZQYE4nknkbaaY%1rs@q|bx(Bz^l`;bT;&JGi^h_A1;TMISFjNLW8&-G*V; z*N0;$6-D2#_P!0J@+BruM|7m}@-czh8_LJk^4aq|)nkFMC`wt(i;^g$_gSi>=u3pU zf`#<6g@_5x#EwlJ8`__K{3{#Vv8(HoTiL_Dt0xIf|9Emg^I!wU4ykpVrMd48IGGwD z{bxpn8oV>!4(=phh5%c9J5|gCR?MV4Fqdv$0kkc?#;$pL>lD~tDk&`xI>|qm0&`|F z$g6B*VmkORI>kXuxeUf#9wA*bAf?JKuZ!=!p4sIT(n6>AB5JK!TuZ~uaPo(bd+~oa zb~BaZ4Gbg{asw9W7;551wEPp}*QV1DYQY2LBxga;lFH}^V_!9#{KK8k{zhXDBWTSW zJgPM|6+&eX3Pq}2nn*2x-LIDI4g^9QbN+<_&NetgWPuRN8}<$u44?a@58vL{JA<8e zWPqYj*^91CN+|GJ_!`x%z>^79YGY_PN}9uh7;$iM8?F37D5I6X4Q9~FM@Oc&wyHA) z{|@7iPgl1zpHSTbKb_V(Jd0@o!}UHBNjyzSBrK){MA0Q3slrc+Lel~ltLrv#%q-fH z3sqhNN}i4M|H=rXPX+>^4e%!^h$$Hegsi3*m?+>-nqWxI!Z!d}O^1_n-+T6WV*!?g z6Fen^7b)V=Nhgt#n$0(<4lnKxq(Zua{%Q-Pr-OmJuPY5*1=LRZ4!GhCAsh6Do2StH@D_7IB>=do0mKO?INL;ssA+1^@4i*3~daA+&=34h2QQ6I%cDT?#lC z+pM}N$oh$jn#F{Orl5H1Oo&H<@%cMK_BJl&p}YNBlZgTdQc5H3bn^`DF@`r08^ z7&XO3X^d+wkuKL1i=17^Y1nOb1r;#mHl4Mzu)-HD$caW#&LO?`l#?&jwxgoK1B^>TcUg%C5p*Mwp}Q9 z4JX5o{b6@w=@lc{G|%aAvzAFkQPqt~pUFhm!VhVKv-fRHHWR{-KBFY#wmV=_@KmyaKwZ5>6mOu+VPxg6JLP6I?? zJqTSC7O!>kUndbCeIbCkoD6g|tg_3Sxa$b03a}h~W<3z%IyNK2B}4#E5mLH{0lT%a zDDt%|QBi(}G7Cg;24)CtLFG3f8Bd5i$zmG9F2_J1Wdq<6P@FHoBuSo5V`j3Vd{9e1 z_egOKA5^hcA)@!~uX}&xrSAQekXBaarx~jOePS;Xo6pA+QT-~EEsgzwFr>5e!C>eD zfL|X13x36FbQ}x)shoex__(WsuK?IMT>lZ{D;3p=4LLtxOn{wpxM&@BAfYA?@Zx;L>n?8{Zmi0V;8x(QovTwj zR92xgAjJ{zfT)ljF&CT;HeA46ZzMe&92u)-gz7)>fxwSGd{bj}b9@TEVK7W- zS0CYZUbj(2yy!{W=YH~%Mpt%(Ujel>bEBN6+E{{Cw8c(_JX^t<7Tj)bv6ETp)=`oS zc5wkmO0#}^xm1gZ)rVpSghKkqbf=}^C1)pyL~L{R z*W29bliudmLyG;(c-^E5XxB|hMQ@^mm%!uC0ul3u5!(goIgqg4{F(^`ytO|k6{bKO zoR=*8t6R5VCvIl;DE22d(^Ow0Jr~+oX}0>ga3>Q@zrU4*9U#*+Rc40W%$i~^mJ%Mc zbrMoop>Py91H=AKK&B3N8%c(=!xD+$?PYK`0lMn7(_HCLTWhDam;>NCAkFr3e?(Nb z7uv8}owIV@#X!7zgBU9h1VU`3V5&bzs*)~Rg0x>K6w-HEnB5SWfNQiNAmmkh$!E+W z9c18c^Upm$25pIfw4TYmKMSQSpQ#Cpl)MLb3l+~xgz?m6(|PxQv2hlxaH9w{h(X!4 z!~5&l**yl<_kgFnP`I6mRgNIl?6M|doI1HKoo^{|p=yMOd;~)J)F48t@ejzXZT=_% z%P`B0Fr;szw>rsVm=?FsIb@)J#5X*imD5-kkVz0+l8FpRk!m?`J!PhLwkEcyFW201+NqVahH*Zcv zu?oRQE{shIle5yHFonEcikpNq$7*Awa>U{>SQHQSVo?@CSsw@#vi;SKN`Gqkej;tt zJ+(j*?xEhg)J^w7uiG=L(UfeFc=pIq0J(JxtjGCbII?}ps%f9P>`<0Sd3yORLN*>h$t4LtHueu z!B~tgWbc91qT7K`y+;;gr>*vVJv_7(V|av>mxe$2J*`|?*C z+h@lno4A^D6axfBc4Jf&EZSeUxTEP7>$Hd)qpvoLgwfj=<_IyUceh>=4uVv*6GSii7U{VwddjFH8<(AIAGATzWZT-?($?njWN-Q*78x=(8a>W55VYhDQUj7^R;+Xo?;GznYR9t3IZ zWi1E)#o%Lmk>e%FkUo)ld{oe)1lQtd$>uS88y9$}XHnKkWDPTARC1~Lo+eU~%<@dc z!`jY7gx1{}>V=(vlBt2IcGMCD-$RyPhvf_1p5O%-Y+p~g*=UD#VE4Cye{_JzX)^yRd;kGH_H0B$zv z-WLd=l!<^REx~o;rx#n8tQ-af1(>U5p;?lm1`*~-8p3-9h`<{GuFp}|S_Fq;LT)r% zXlm(;7+*cK875VN_l3)4fIDh~Xe(FHfYmil;{;8{Z#)QjRbWmOE(xG}zEetm=85!~ zPMmx;PAh%sLJ@DCxZPNISvbO2i)aWL&20%O+gxG)D1MhGZ%%MQe{v14=}YkrWCG_Z zCSgINW=X&;UL0L*5DGZ$A~%F9{cqj=nn$wm5=QDPhyfw48c?qnWHytg0+tVqj<;ct z5n{D5oc!q7=RMR|sJkEj0>pr%_LztCx{{twVwASS&V+%Nnt@7P6t>>2n8?QIe;Mpa zRrMs{l0hLW?z&+Q{&K5TFEgvx;i@4h6$m~Y#x+9Y--HZd?8?HG#1$Raq|FnF!KCjt zQSN*!ugQ-!11=_9(1%YY`;1n*GGp3Nm%FJ%ciZ19{VyV3#MRSPjJT~;%c5po5ZAOV zyOf3W<}&EFyi4MNItfu6GEhSZEu1019OLM(#EUaZmxu0ujG*VwuQ5C4D|**li&S>1~W^zD19qNUg#lwL=z$$tEjL z+C^^bZRQj+{O<(&!YdhzYi2@uuoDS|mLpQ791#{d63TN#6m#?kG*C(Ts0UtkAi~0w z5!VDDdOSrJy69b&K-2ps!P0Owqqa?_u%LN`@_K=kvoKOqF$M7-xbxpBGZWZ{g!I`?%Ki zFEM_#H8WG4nwjn-;%DJG%ZappYqHB3T}Ha?bKhU^MgdVh#CE=6_?(ru)o7tuZmRhy9nDfv8k zICIWLjE@)+#Bk^lYO6?MmOz^-3yA*JSVBriwi5cEkG)+jT*uIrw1!0C#DgfL-!sG4=Y~b)hKbBDsghv{%y1TNqzs1C z>>d#GsSzcpj=l{=gioayV*GJ$ zQ#t=C<4<3zX)@j`b33m#{=sHzvej;3bt^umeB^8UoQzV_yIF~R23>}$$^hQt<2=!nW#`>*+2!k_b3Zz0hWX^oEfM#;_VBlru*|$Iv z=V4gD5^_(olN_hOiwbkmpHy%Ci^dA>eCAV8YVee;ll%pBZT`wtFd>c9!doe@g(K5M zh%4Jn6P&tI55}1i&fRzhYYI=aL>oAVU@-h8f}*du!P+uj#KQ&ECfd03-}uXIT>LED zY;7EgB7=KYo#d}Tu`;3YinKK&Nk1gHsgwM5p+i!&$@B>QyacDaw*eI!9z-F;vHQ1~ za@-_l__zid2!!V0cTf;LJP-)YogE4acM@8N6BO74fqo{m?d#h?p<}=~A1Us+*k9iv zS=II(k~<;A`CZ(YBeXr~{|zdyR4)mHX%&X>>Ivoot0$&L_{q=g-eTCPSjnD+@w75iT80zPR|? z2O6i-k2Oi~VchB1bD>g5U&FKvhED;Yw|Gn5Tj=sy&VQTnt5;-rl&?CG^Y1V|4!iM~ zU+YlLzsvRc1-o9(ar+-}{^6Oi$%)C)P9lC5-b%jCt;w)nhm_}thi;z+WRc_0t5?Uz zWT*x9YRj51F6LZ2AKw(#KWRcg+E?81q{L1zq@&Af|HPQ=${(sqCo!zL*N;so!jS%n z`Ry|R@Y_9>uMs{y+6-9aIR9Sb&s2FAvWlxD&cEOIv*V+1!#HMY&VSJO)rpy`y7h{! zIsYN&>%AeK_e&r5p2?Tr$S}W=^2E|__X3*V8f)fVD5bzRR`6wmeIP7l`(S)6ni*j% z0!(ZOxqk_-NHO=X^e{YfH?a`<{6RuC4m^2=Nsx#1350~)d9u?+7gk{ktxX@Do-vE} zFYPu3rJ-^L8r)|=6-|eTO~?Lv(>e2qH=Qps)p%2<3LR{l6UJ%-_uNlQoE)I3;Ce3* zX9N2KsgSq--ZmQjCSIIu4Du6oREowjtwm^Hjc8%{|7iag58KM1aLP^gN^HoWV7aO z(qxDb1bVP*e59dx=7j=&Q3A7D&=Ezmw6aAHDNq54VdIsNE^p1X z@Slv|qd*lS4CzTh z0hQ*Xgz^4PE&Q0MJ3gF46w>c7wp{d5u+SltM0l=KdY-DE&;-u5vOvmSaASKGKkp+Y zy9>6E_FNWg$Bubd2B^w&xh(t_s94~=cM29?K2oU4XE$wj7B_7u;d3r{9+L*VYQZst zc;*=oNBoRbmv(Y?@&2%3b@scOw+P1Xs7x4#6gXbGo-vf^AWs9y^G^1Gkr5N~wj5l(PXf9^;98NzJmzYTKLG=#T#e?f?^ zVDJJbL#O;X06gdz@DjNPVMk6FJ90<)H_wv!H_xc$IM|CHAW{ zB@5qYGiE%QNx3DKMNeo?9E$39w82tt zV6%l-QiQ;#szOy5)M3qYZ#?#e#%XvrARC{+07s#H7QGadS41`{!Qu-M!r18|0}JMT z9YUdfdmuGCtKv*XMy$hO=?ij+$!UkdXw!wUymFzctf$7j$--1L`9gxo$Du;T3}aa# z&9=RglA}G8nU!A&cQ$2s&tU4qFKaABF5x5Eu(PaXpmHA#1VXC`q*N2|?kGqrMN%Ps zij@gLQHoMhDVh?0=mPc6z|$qt&Ekt(_0##J#_h3--IHFja@G92G-#%0CV|WrNB&GBhc}SDiiJuGTk>;xdzbGNY3aVq9C3h0UbU z)8Jbiqqth`nx29sF)CW3cVPn3tY89yCn&Q}qh_~;x(bezwgQHvAi_goroI!PxQV(8h_xJD z8cEyc73Gh@B6Hn#XfCdOTgwOT4O(r0QqMHC@Ny-sRCI-b8wmz&w-=r5=}_`JsFd&` zvgvq$m=5(!-A$GP_3}b<7)uK;TQWNA&*R3cB2N1Ei9#AqBx31d1X9>3znQBnf@Eda3RfUiM+ld9@YNQLyxmX6;7@Y=wmKS3^lD@{&L2{8x5`wnMQk0;;Q zHbTQ8WW%w)!^wv~bm;FJefms)cBaXnG4;Euji(d=bE?m|Exih>R-RUwqZXzbTl~NZ8$R1 z$1RpS44gxNtBiTlNg?TcZpV@?Q9c3ohuU$!5qkcRlxry20}?Q1Ja`P1Uhb6eMX#Em z-l^IzGNhk0cRrgj&MfINcV6&>uxZO!*o7O4;F~+8frpawG)a`NHi+_gvfx5b4v{(H z_i}rrkjJxfdlI?5fk4C{bKyCp&=mGFD7v#q!Jk++j9dF<&~buD*XXcsPxZgP*r-PROvj3w(-=o3sNmz>Qe6^$lLw z)KM3*L0=*hhSc*y5c7h&ut1i2QJ6CBH-qWZnQ~ltr9%EfI}yGCrwF%a1(ZV+=ti#R zUk+A;!04(>XC?(VEgN*5u2u`yw>~y#Qad^d?=xr5!!kDt3@Fy zycJ0jzXXTNd!S-%!U~v>c{^^Dro-fg^j2m7{@Of(uJIa%V$Z}E55U~Q6IL?O%RL14 z7EDD9+SWg2nYH{|8w&VV-&}GnC=LY3I?4FmZAXG=AE}ZspBfRVPqGhaT&Nzv?D%B> zGP%(#7AEn3`opsFqgcRHe-fx4{ly+%0i?@!aOw+a=5nCxX@EW za z?ka2LBi(-2yw++XHN9l#k{cLxbV0|Ul_j@ED2>DCKp?Uryb+WaA;}`ML@_`oA&SOf z&4n6oU0Ar#h3-P4U$I(6^w?ja%v?xHF2u8=AUOfSL!xBb=r3kIq7daiF+C(zsWDVU z=mC|O;pBHmYwvDsFP zcksg+GPMV=0~(y9x?CrF0)5Cc$j6-Po7A zox#%2TRVRgaEg+e)KEbx!ye#sWIqu8hQ_qdb_c0S%5EH$izuXDvCRA}fC)Gcxf6&b ziFQX413~nnK^q86&r`{MMMAG!D2Bb$Yz<=Co$0-Bj=?xNC9?NQNkvm|$U6x+f8L9} z^F%_(ZwgG1@F!lb#Tjr?oB_WJ8kk0$k7+@Ix2Rh9d6z90pp}qsGgE0~;X-O?M@Ay= zM_e&qK2c_~W>Te+5;SjcHSlgqV>*`#BAwV{qX18^(Yu}GJ=C(&WczKL<|kU@+aVAs zdK}Kb3uOGUh%6AXUSm;Avbcfx-g#<7v35h1u(*WyKC0%eiioYs{vtICilHyjA>JYEBqVJj@-f>6Tws+V4vIT~$oAEW~nx%tHJSCh&|_O{i>kMLEQ(QV4SZ?xUEo)rAQ4 z12v0mmfc|ZI4IPmi>)qg8RdV~Ejj-Z127B6`G=i&mE>_s}mVw~7Sd+(g#yRf!Z?*+!YAD;_p^D*JWRgE3$6YMV_IR!w`? z58sWS`Nkz4-W9>mNh6CmYRd=MMfymUTn#*n^xJ5J98z&XjFi?!q(b@_%esNRWpEzB zJ_SIZh%t3BzlyDyg^D)47q^B@p6;PC?sCCq9Mw(;VQzxfM*f1nC3s!Z=%SI{R|

t^@H&@#l@j(~c(jn*8#TTz=lO!LeN(-hH)B>DIf^3q7ig(;@k>6a<%A*K z&zSL2AwXOb)Lk@Oh}6mA`6nt~%q?zHSP<-rcQ6Cq}n!cJSHtZ$KX1y{0aR-%Mi09~Im|Nlj|W8eMT&-n_s= zO;FZJz6pz(br|WR3bIQ`&KgPOeggd-y#^Z}}xB%J@={8FB|DYaOzQ^yuu5da>SOj1;_IQ#iIKK~51@YAcw~ zstl=+{*n3TTV$hi$Ip+8ePxMlAI;KjB^iF2T#8pwu^zrHAcw+JeOMdd88F(c=*mtX zTtyh2gWg)wetpwR>A#hw`vg&&jPJAQ9!yE8h66xGnuYHG;B1sLXp+9j<)v%Fklt)+ z4;N}AG1g+&lvGHsr^deUU4jI)=|99Bw{WKbG`C?C`vReoM52@=@zd8^nD3XvWPvbO zt%V;DY6vBTRWk$4B|ijUKG0K)pg)$iWJ<9-U@8UHc03eOVC4|vs&lESNx0Onc9 z0wJVU8}^0&0u0Goyx>PZmUy_iMrth`ZheYEH)Lj@o#mBJcItw@+vLP*V@7YT;+ z2UZSiAq%NH_Y8*PB}8)(VJRFTCc@^;GpTA8S(gc+YGHA}PHAC?Fi+lvl7WfKv zzree`ghdZ5HSd83B(pOs@pWLhp%lFDL_&!5D!Nipc4xC2&!-Z`URGhEFI+S4Wj8`G zq+hUN+bp1B>m)S*?{Z0&x?IAd%OxsmtWe(NDxmd(EKgTe6&(<=9(XJ5do@H4OlUpu zHc{+>MPW^M!#ghcQR6H;Q<5(hegiuAxFi4F=XIB(k9-0xB2#$7Oh0w7ev0oAJrP{| z)BzjvdX$Rbb?l0sOaX2KVc9Ui`fnl$W|bIsjvHU?o_s8~ zSz+*E83F7)gUU<}wlI$iVZwrW8TnXPQrVPfI}_fs z=0!wgAxVYwT#HC-Jt$RDM;#JBzbNt3`qYma{0SCpIkrX*VNY8|^c){4cOyUA%gtcR zpeBUbD1H+`0W8+KgXdZjp2>8wAG?mjkPvGH!ry7gW+nK+8_DQ8ygzE1SP>JWBcse( z2&tGL6cb_6r3i3W>{*PA=Hc9ZLJm(P6v0F2?4-mLVIycxXhHuHEH6!hs=!tzb-Wyd zpOHmCUO-iS+@Sh6dYOKN<6%~gS3;kF~87F z0l!GA2T|!o)c5PdoAi5e_J;Ze(%XdgA&N7U&86>rPKJx1fbV7OIxK4U79K2;i7CYv zOeq?*^VpE=C#IiI<(lTjBuUo-DXT-`rDIIWV0Z!8SdLz0%S*mn!ml24{;Q4Os&a+Q z?Jn29!T7cq9l;AF;%DJ%UydS)TQ9C-ok70VKU;CcenM(2rcIF7 zqIYNL?YIklFiN*K*e(e}df2M=Xi0|7jL^1a$3S6HNTZBl+#u^EU!R@;#0v5(t;rp1 z*R~%)%ph(y-uSG+#tu|CRD-dZE1GDRRNyx+o#e0?;b)Bo;uOG8w1S`D^dSC)>&{E3 zW)6;E{x!-E3h=v}5L-}OB0iop0a0C;Rgxinxn(u-(MU+fi-Z<{mF9r!UrGJCgI8MM zmK#M%Nh&b5Nl+(ul`qIsW+y~#P}pU_emE(ta?PlLKP-a|!9G*tleP-kt$n!djbRV| zDk^2+a$2=B3GSd7WV0vbg~g^%s2-tmi|9Be>D3H#Jb4*pUUx}`^iH!C`6y|UN{EJX zA}ce~f2SqHzLLZFD~w{unxy zp<<}m!*gLWF;wi~=bd}G%X$qM%HUqzoF~+1jNIb^A|TtuBxO5N;-#OW-v-0AU}Mza zF%Aya#zOsKZe!;Bw-}$#xN{pb=fBPPc#x8Nm?Js=4&&p=9xkYHpGWqy@Mq-fJ`WlG zaC*|5ymT5n!mkBOT|t5l?IOXD{+E^Ob&w&mY!)PoT|=T+DsaVV+%+UmzCI0e1A~~F zuzSZThJvF(T&Zb`g6D5U66KqPE~+xvfP&ffAoJA31xSo2Y<8 znND)EheBDAEXs-~mK7dlA<8caN;5AO$?{?$%8SKCRU{F`Ld0UJnK_k%c&YL-7+wbj z`2HUAvDM!&f;%VV<0vWjF&Xr6T|q*67Jd=~!^WS0?G=w?%nTkn0*WO8{}9IcuZ7A} z>>|~_;pEOGr?%kJw<8CO9}%Dezkr)>6m?4>l_#mBi7>H zmLc5-5Wg?pa3u=q*-WJ08C*7cXoRotab%~)#IGqqI3gm!s;wJ=v(4z&SO ziy6s_%M%;RsUH4T5$~Y2x#V2{xkGT(gwTqFvsS|B5yZSAzg$THzl_X+LR5iRHQYcE z*So2gDlS|fDI3S75gONwQ&fNN>Cjz*b0LRx^^#USytlA17(M`iDt^kUIO?iDkK_DD zj9=x;dw2?`lZc;%ALLb^4C^jPmAoWar2IogtbZ8(jv(ni5I!pIe)=v89|Q0cU*!Db zK+$z*aXn%(&Ih`=u7>_1o z22(NPmolvAVut6Ee?WA8#6;4L4@B87Jg_M4QIfnkKMCMD#7DwMf8O_z#!B_x+%v#J zl5&2#FqeD^RH>2?;trWrGrT+`7KXZ|{3a2K5x{c%lZgS@WJ6&1TY=ti~80tJ;;gNy# ziHI9ZccPHK$)frSfLmraLzoW*_{~d7xy1|*K}razReqORs!CEzH-3wfVT%roP$R91 zUqUyG=?`IXA?B;|LlPDtCA1uKVo8XQcOgqRb&{`9l?gz$j|*AplaKYOm;UMze(m!h zcsdkWtKp0F}F$&?fp2;t=i z;r7+oFOW3)5kERfseI^q4@l1i_AWeweVs;Q;T#vtjqVSWV#&<-2g5f2(31!3&0>ME z)#fVAoWI2Q&2jvy$8;5|I@jm#OG1BgVge`1(`fACXW=yRweTQ=Jv{C?lv866sj)oc z+5@Grni~N_JsrAlT_!h&)uDT|ehaDCS=?5*J--askxyI71E%0W*LdyA7 zq0dTCMP1LbYsB{plbCXxT&|{RDH1hnZ*rbpx*?!U9ol0YC9bA=99S zLSzkv6n;3!>SbA}6{LiUhbNb$9>3wSAfIKBxiQZoh62qTl__^d1;)x!_ z6p=9Qdm1WQXjv5<6=BgoOISGEg=C%e-9D(n1>&t1VFvo zWA$VvIrDYn}5Lr`9uNJd{E zgM?O_Bq%axf>@h~I4X);(f-aN)E`0BA6MT6t@Z`tqt4L#_$f<~+*qA$z$mc9&Ce&b(9%l|`DOK6*x;Qr3IUJQGu8k=!)TL)@f;9^-xsE`D{(XNe^#n{h|Okx zsmynhW%$bj-&;h*y?or%As;o~s5qNAZhW2ZQUm9^W^SdM>%w2TNIyQBBOPZnyIWj( zlZlR%BQ4($$#w9vjJQ8TA-27o@&ir}gq5i4--D>3<$T{|z%;doYk1kP=kt3!0_4O^ z>NL3=fqFG85KreDQ2GgShUapkW~sq`(0);P{D_&weH|!x`spA+&Npyj5lJFs7M#){ zDS6te=*_D~FId<}iyt8p+TH&%K*@!08h+N1e3XMz`PoLZFT>|K3B{U|^=ZB-?fhGj zMt}3N$=QQ^_=o~KAeKs(UpDI`XVQLKx#_`miL>V0BgEvuGKXh&0I{;KV6HMJ;Nj>6 z%Hr@c5Qw;4e>_)Xl8Xf)ey|csxS$qa zQ`$}w9Nc)Tq8)Ys7HyQs+9;`z9%N=+DQ}~Xs#KSykd9iT+R5Ok(7R|5H}P)~ZY0ILJ3r_HRDR)r zGQQhnd=J8HMcGi3kxF_cEp4Dyo!*aT&Oe45$0v49P7(~qOux7tvpY7um{lZJ&=^c z)WC`O3eQ|16|njE1ggegGe(DWMvMD}Po|zVvNPb=rx5m5_M!lcR9uvt3kez+e|>jO zK=l;QTp+QO6^SLX2KF>iQ4I}@5LbWAt4{}jR}Yz&wp_50ZERvNIDgjo*z?fdbPljg#qdMvQu#LUf zGwC)m;iogUu9SZd7M1oZ za7gEmFtKcme()VB&A$=%@H=0`y z1^XgwFgX7$#;@W9D1H%!%R0>28s3X&4jgQ=ei%oMX8_wggzj`iB%u$NrV8eptgKLL zU92sM6Nb8ZtA_mk{^T~r&IG%nrU@R$PIyI`aak4k`r~Fq_ut76>EAK$9+N&Hle#`3 zGlh>*p{^K0`uFB3O5&O=ita8%bfPC$mw>2_x%YzB3_|hyXJVGF zcrx>;>b>&-As9h6pe^>sw%-c~Ven8XZ3Om4m4RS5W%Ft-2UR6=t41W%B&m}#(v3p6FR{I^P|B;6#tA(Rv>r-S>A>Cr^m$)`AJ&E04 zuwyA>fmM>#9aO1^UuI-@b+@AI^PipQ?;Wy9??iKZDfHa0B(*HCSJVm3uM$``*jbq% z`jv<~i7#j9SXm5W4P?>a#}P}?%8($OQ8yy}UzWL7Fh(8jlES`M!H$-Z=aQ`MV9@gX zN`}Yfjx78EsJN|J7YgZl7TW2kv_$|d7Y)n8VRm9Q7L^PWseFDTPUho8Hhp|Jja7xMg_d7 z1BJpDt^{9@k}r&v`$91Hg|y@gQYBvq#?04b4VUDxGsrUmg-WN&X@5Z(Jm1oO6VqNOpy7L0{m7sO#M(~1{$pjy-~B6gKSffNb@7bwZ{UU9(K zs!-&YQXp8QK(I)GU`#PCdkBXhMt(&IWPumjR|IetV=%1ZoD_;UgdJtER8 zXd(-LLF=(z;%D9j`RoxXuTVqbFJsuh7WXe0wjLe@{4FIlNmx@Zbe-GD#t*h3bm2cD z_EnjydvzMJFgZVOpNdZIBvo>!VBs*?%^jvt>ED!7e4Jn?+{V1nAtKVZkeh|KDOEmx zn@eVRbBG)*A1X@UgBG{FRMnn1+qm;Lqq!XfMza^HXS&^TVRKN;T5Sa65^i0WreAca*Wb2S$}NC2B3Vldjo zhC2qpy%XGGClezew{7`4kaXA`X^UM#F9Q#M4`kY0cNulDdQ`Z3O=bue2RLEGMNrDP zNp2QADsBMEgf;-Bl74~d9Sk3aK6-_Rtd&n+Iv)6@a?U?xe0+ZMgz8wk(0|1EQ*g2)vC&*~a&nb%ZlY~mCDEl;YH)g?~f*>Zf7CsH64@EKP zV`w7`DSy}o?cy`kWa;9}2rsk%*`_rq++?N_t|O7HpExAN+3|h&>%n^OG=#k;?1%I& zHG~o%8W7@E7cL?p4D!NC|5+OB;@-Vco+E?Wj?jj-gn8KzDNe}l3_=zs_CidPvw07r zGDEp6Dt;D*l2BQMlza}9N6FXH3E7IifWOE+rpu(F$I$Q9Fd5C(`)O&KN& zUjc||MOhFQKkOrvmj#iP#Xp0x0x&8s078$S-jp;i0SS4D2o(uMKv?`TkExadsR#z7 zMYq?DN(U{gU-cBAj23fK2+aUZ9veIqpl{}$$`boAIXq?~W&JMa60S#=;vG}9Cp>`z zkv^7Ps{2TU^g7Z`Qp1wAq-DZ$Vlp=uRWZOT#kd?rlQEkHA&f13S@9b_ROBWN-p*l= zd*B(Q0u_c3vpBPng|C$iqKF8KA`;4rh{%fQLE2CoF)A-2!kA-ZQ_{SMB#ddlGY}R< zWU9=t2l65!vX=3$CEIAcgtpoCbx`svyuW;66s?6E;fhW!?#IPe(Kfd_$Gr6IyN_d;D+fg!f|)Q>{@-Bwa+ZCUs>$k{X_yg;nHtnJi^L{UOBH;&S^=|2Le>u6*-r8kMoh=4IhG6_7VHSWxZZ zWYu@xQfYJ_o@qD7qYyuq>ca1TW|qqXy3ZWgpeMZ+diQ3KK~F`ezjPHSFiphLhocKKEp!e`01@UTH>!e%~d= zZzFwS|5F=lW~bVR4>s|8sS|l3@G6VCnBin$<8e=Ftfh?@90%H-J^j4v8HY!Xv_=j_ z=^1&*r{8zZXBuaYj2<4>l`CCv@jT);F|RWB$p>dCkJ_+z1w2ULalGV=k?%Lw9h$*p z$Ytwt*&luQRsY>sf7$ragEJ%9*l24is^C{6qlX5bF+HO?;i2*FcaKHAF1hR<8`Z<( z)9n}xM~UTFH_RM-aqH-89x=X3cd`7o@h~=YM=l+2PQD~p+32}P(QMM|W*+ON+$+lP z=Fuxg@S{^M#0TbXSHdk2W_f9D$%U#+HI(=K`c%sm-nrrvGmWkI1i4&VTl2#Hoj1Jh z4fe<`Y~+<;n?L9`oXGxm7=H}pF>QEIH+phM{J}O)_KrMH3b_*@A6p8!vk1A1&(e6P zU4D559vb8i13Me9$9jd6vE9v49N*+l*q!I`jc0x4_ZmZLZrp2(!LewH$=t)=0CTH* z8tE+hA2ic1eD3%=8++q-+GDs#8+G>PwpG;JH%W@aQ`D8EYv3s4=+sM- zS2PwKoH>F6;U;c0y22vg()Y%__#l2>NPy)G96&YzT6uT0DF2K@ZWiUS8%IR5z8f4s3`x;-_8-&xBG13x{+J{{Rp z6I-dovECJ36YfcPO&M-)`bA^a2s*#Z$4eCtznSiF$j0i{udU|CR z{NB<-3NA%2Uo}^3dG3KzjlQw*DZaz$Qgrg3N!8l^QT$eMsjEU4?_ya#{M{kBP1G+*@Z z(pWc&AtK6R{|?*h^XD}@+vwQ6@V~sU>$=83b9yA3;CZmi(Yv2*PLtj0C|g?;7Tvpq f8%8gioXY#9qH~wWHnQE6J%*lLd3vrU6e0XSj3Ww3 diff --git a/ecmd.c b/ecmd.c deleted file mode 100644 index ebfa87e..0000000 --- a/ecmd.c +++ /dev/null @@ -1,1366 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "dat.h" -#include "edit.h" -#include "fns.h" - -int Glooping; -int nest; -char Enoname[] = "no file name given"; - -Address addr; -File *menu; -Rangeset sel; -extern Text* curtext; -Rune *collection; -int ncollection; - -int append(File*, Cmd*, long); -int pdisplay(File*); -void pfilename(File*); -void looper(File*, Cmd*, int); -void filelooper(Text*, Cmd*, int); -void linelooper(File*, Cmd*); -Address lineaddr(long, Address, int); -int filematch(File*, String*); -File *tofile(String*); -Rune* cmdname(File *f, String *s, int); -void runpipe(Text*, int, Rune*, int, int); - -void -clearcollection(void) -{ - free(collection); - collection = nil; - ncollection = 0; -} - -void -resetxec(void) -{ - Glooping = nest = 0; - clearcollection(); -} - -void -mkaddr(Address *a, File *f) -{ - a->r.q0 = f->curtext->q0; - a->r.q1 = f->curtext->q1; - a->f = f; -} - -int -cmdexec(Text *t, Cmd *cp) -{ - int i; - Addr *ap; - File *f; - Window *w; - Address dot; - - if(t == nil) - w = nil; - else - w = t->w; - if(w==nil && (cp->addr==0 || cp->addr->type!='"') && - !utfrune("bBnqUXY!", cp->cmdc) && - !(cp->cmdc=='D' && cp->text)) - editerror("no current window"); - i = cmdlookup(cp->cmdc); /* will be -1 for '{' */ - f = nil; - if(t && t->w){ - t = &t->w->body; - f = t->file; - f->curtext = t; - } - if(i>=0 && cmdtab[i].defaddr != aNo){ - if((ap=cp->addr)==0 && cp->cmdc!='\n'){ - cp->addr = ap = newaddr(); - ap->type = '.'; - if(cmdtab[i].defaddr == aAll) - ap->type = '*'; - }else if(ap && ap->type=='"' && ap->next==0 && cp->cmdc!='\n'){ - ap->next = newaddr(); - ap->next->type = '.'; - if(cmdtab[i].defaddr == aAll) - ap->next->type = '*'; - } - if(cp->addr){ /* may be false for '\n' (only) */ - static Address none = {0,0,nil}; - if(f){ - mkaddr(&dot, f); - addr = cmdaddress(ap, dot, 0); - }else /* a " */ - addr = cmdaddress(ap, none, 0); - f = addr.f; - t = f->curtext; - } - } - switch(cp->cmdc){ - case '{': - mkaddr(&dot, f); - if(cp->addr != nil) - dot = cmdaddress(cp->addr, dot, 0); - for(cp = cp->cmd; cp; cp = cp->next){ - if(dot.r.q1 > t->file->nc) - editerror("dot extends past end of buffer during { command"); - t->q0 = dot.r.q0; - t->q1 = dot.r.q1; - cmdexec(t, cp); - } - break; - default: - if(i < 0) - editerror("unknown command %c in cmdexec", cp->cmdc); - i = (*cmdtab[i].fn)(t, cp); - return i; - } - return 1; -} - -char* -edittext(Window *w, int q, Rune *r, int nr) -{ - File *f; - - switch(editing){ - case Inactive: - return "permission denied"; - case Inserting: - f = w->body.file; - eloginsert(f, q, r, nr); - return nil; - case Collecting: - collection = runerealloc(collection, ncollection+nr+1); - runemove(collection+ncollection, r, nr); - ncollection += nr; - collection[ncollection] = '\0'; - return nil; - default: - return "unknown state in edittext"; - } -} - -/* string is known to be NUL-terminated */ -Rune* -filelist(Text *t, Rune *r, int nr) -{ - if(nr == 0) - return nil; - r = skipbl(r, nr, &nr); - clearcollection(); - if(r[0] != '<'){ - if((collection = runestrdup(r)) != nil) - ncollection += runestrlen(r); - }else - /* use < command to collect text */ - runpipe(t, '<', r+1, nr-1, Collecting); - return collection; -} - -int -a_cmd(Text *t, Cmd *cp) -{ - return append(t->file, cp, addr.r.q1); -} - -int -b_cmd(Text*, Cmd *cp) -{ - File *f; - - f = tofile(cp->text); - if(nest == 0) - pfilename(f); - curtext = f->curtext; - return TRUE; -} - -int -B_cmd(Text *t, Cmd *cp) -{ - Rune *list, *r, *s; - int nr; - - list = filelist(t, cp->text->r, cp->text->n); - if(list == nil) - editerror(Enoname); - r = list; - nr = runestrlen(r); - r = skipbl(r, nr, &nr); - if(nr == 0) - new(t, t, nil, 0, 0, r, 0); - else while(nr > 0){ - s = findbl(r, nr, &nr); - *s = '\0'; - new(t, t, nil, 0, 0, r, runestrlen(r)); - if(nr > 0) - r = skipbl(s+1, nr-1, &nr); - } - clearcollection(); - return TRUE; -} - -int -c_cmd(Text *t, Cmd *cp) -{ - elogreplace(t->file, addr.r.q0, addr.r.q1, cp->text->r, cp->text->n); - t->q0 = addr.r.q0; - t->q1 = addr.r.q0; - return TRUE; -} - -int -d_cmd(Text *t, Cmd*) -{ - if(addr.r.q1 > addr.r.q0) - elogdelete(t->file, addr.r.q0, addr.r.q1); - t->q0 = addr.r.q0; - t->q1 = addr.r.q0; - return TRUE; -} - -void -D1(Text *t) -{ - if(t->w->body.file->ntext>1 || winclean(t->w, FALSE)) - colclose(t->col, t->w, TRUE); -} - -int -D_cmd(Text *t, Cmd *cp) -{ - Rune *list, *r, *s, *n; - int nr, nn; - Window *w; - Runestr dir, rs; - char buf[128]; - - list = filelist(t, cp->text->r, cp->text->n); - if(list == nil){ - D1(t); - return TRUE; - } - dir = dirname(t, nil, 0); - r = list; - nr = runestrlen(r); - r = skipbl(r, nr, &nr); - do{ - s = findbl(r, nr, &nr); - *s = '\0'; - /* first time through, could be empty string, meaning delete file empty name */ - nn = runestrlen(r); - if(r[0]=='/' || nn==0 || dir.nr==0){ - rs.r = runestrdup(r); - rs.nr = nn; - }else{ - n = runemalloc(dir.nr+1+nn); - runemove(n, dir.r, dir.nr); - n[dir.nr] = '/'; - runemove(n+dir.nr+1, r, nn); - rs = cleanrname((Runestr){n, dir.nr+1+nn}); - } - w = lookfile(rs.r, rs.nr); - if(w == nil){ - snprint(buf, sizeof buf, "no such file %.*S", rs.nr, rs.r); - free(rs.r); - editerror(buf); - } - free(rs.r); - D1(&w->body); - if(nr > 0) - r = skipbl(s+1, nr-1, &nr); - }while(nr > 0); - clearcollection(); - free(dir.r); - return TRUE; -} - -static int -readloader(void *v, uint q0, Rune *r, int nr) -{ - if(nr > 0) - eloginsert(v, q0, r, nr); - return 0; -} - -int -e_cmd(Text *t, Cmd *cp) -{ - Rune *name; - File *f; - int i, isdir, q0, q1, fd, nulls, samename, allreplaced; - char *s, tmp[128]; - Dir *d; - - f = t->file; - q0 = addr.r.q0; - q1 = addr.r.q1; - if(cp->cmdc == 'e'){ - if(winclean(t->w, TRUE)==FALSE) - editerror(""); /* winclean generated message already */ - q0 = 0; - q1 = f->nc; - } - allreplaced = (q0==0 && q1==f->nc); - name = cmdname(f, cp->text, cp->cmdc=='e'); - if(name == nil) - editerror(Enoname); - i = runestrlen(name); - samename = runeeq(name, i, t->file->name, t->file->nname); - s = runetobyte(name, i); - free(name); - fd = open(s, OREAD); - if(fd < 0){ - snprint(tmp, sizeof tmp, "can't open %s: %r", s); - free(s); - editerror(tmp); - } - d = dirfstat(fd); - isdir = (d!=nil && (d->qid.type&QTDIR)); - free(d); - if(isdir){ - close(fd); - snprint(tmp, sizeof tmp, "%s is a directory", s); - free(s); - editerror(tmp); - } - elogdelete(f, q0, q1); - nulls = 0; - loadfile(fd, q1, &nulls, readloader, f); - free(s); - close(fd); - if(nulls) - warning(nil, "%s: NUL bytes elided\n", s); - else if(allreplaced && samename) - f->editclean = TRUE; - return TRUE; -} - -int -f_cmd(Text *t, Cmd *cp) -{ - Rune *name; - String *str; - String empty; - - if(cp->text == nil){ - empty.n = 0; - empty.r = L""; - str = ∅ - }else - str = cp->text; - name = cmdname(t->file, str, TRUE); - free(name); - pfilename(t->file); - return TRUE; -} - -int -g_cmd(Text *t, Cmd *cp) -{ - if(t->file != addr.f){ - warning(nil, "internal error: g_cmd f!=addr.f\n"); - return FALSE; - } - if(rxcompile(cp->re->r) == FALSE) - editerror("bad regexp in g command"); - if(rxexecute(t, nil, addr.r.q0, addr.r.q1, &sel) ^ cp->cmdc=='v'){ - t->q0 = addr.r.q0; - t->q1 = addr.r.q1; - return cmdexec(t, cp->cmd); - } - return TRUE; -} - -int -i_cmd(Text *t, Cmd *cp) -{ - return append(t->file, cp, addr.r.q0); -} - -void -copy(File *f, Address addr2) -{ - long p; - int ni; - Rune *buf; - - buf = fbufalloc(); - for(p=addr.r.q0; p RBUFSIZE) - ni = RBUFSIZE; - bufread(f, p, buf, ni); - eloginsert(addr2.f, addr2.r.q1, buf, ni); - } - fbuffree(buf); -} - -void -move(File *f, Address addr2) -{ - if(addr.f!=addr2.f || addr.r.q1<=addr2.r.q0){ - elogdelete(f, addr.r.q0, addr.r.q1); - copy(f, addr2); - }else if(addr.r.q0 >= addr2.r.q1){ - copy(f, addr2); - elogdelete(f, addr.r.q0, addr.r.q1); - }else if(addr.r.q0==addr2.r.q0 && addr.r.q1==addr2.r.q1){ - ; /* move to self; no-op */ - }else - editerror("move overlaps itself"); -} - -int -m_cmd(Text *t, Cmd *cp) -{ - Address dot, addr2; - - mkaddr(&dot, t->file); - addr2 = cmdaddress(cp->mtaddr, dot, 0); - if(cp->cmdc == 'm') - move(t->file, addr2); - else - copy(t->file, addr2); - return TRUE; -} - -int -p_cmd(Text *t, Cmd*) -{ - return pdisplay(t->file); -} - -int -s_cmd(Text *t, Cmd *cp) -{ - int i, j, k, c, m, n, nrp, didsub; - long p1, op, delta; - String *buf; - Rangeset *rp; - char *err; - Rune *rbuf; - - n = cp->num; - op= -1; - if(rxcompile(cp->re->r) == FALSE) - editerror("bad regexp in s command"); - nrp = 0; - rp = nil; - delta = 0; - didsub = FALSE; - for(p1 = addr.r.q0; p1<=addr.r.q1 && rxexecute(t, nil, p1, addr.r.q1, &sel); ){ - if(sel.r[0].q0 == sel.r[0].q1){ /* empty match? */ - if(sel.r[0].q0 == op){ - p1++; - continue; - } - p1 = sel.r[0].q1+1; - }else - p1 = sel.r[0].q1; - op = sel.r[0].q1; - if(--n>0) - continue; - nrp++; - rp = erealloc(rp, nrp*sizeof(Rangeset)); - rp[nrp-1] = sel; - } - rbuf = fbufalloc(); - buf = allocstring(0); - for(m=0; mn = 0; - buf->r[0] = L'\0'; - sel = rp[m]; - for(i = 0; itext->n; i++) - if((c = cp->text->r[i])=='\\' && itext->n-1){ - c = cp->text->r[++i]; - if('1'<=c && c<='9') { - j = c-'0'; - if(sel.r[j].q1-sel.r[j].q0>RBUFSIZE){ - err = "replacement string too long"; - goto Err; - } - bufread(t->file, sel.r[j].q0, rbuf, sel.r[j].q1-sel.r[j].q0); - for(k=0; kRBUFSIZE){ - err = "right hand side too long in substitution"; - goto Err; - } - bufread(t->file, sel.r[0].q0, rbuf, sel.r[0].q1-sel.r[0].q0); - for(k=0; kfile, sel.r[0].q0, sel.r[0].q1, buf->r, buf->n); - delta -= sel.r[0].q1-sel.r[0].q0; - delta += buf->n; - didsub = 1; - if(!cp->flag) - break; - } - free(rp); - freestring(buf); - fbuffree(rbuf); - if(!didsub && nest==0) - editerror("no substitution"); - t->q0 = addr.r.q0; - t->q1 = addr.r.q1; - return TRUE; - -Err: - free(rp); - freestring(buf); - fbuffree(rbuf); - editerror(err); - return FALSE; -} - -int -u_cmd(Text *t, Cmd *cp) -{ - int n, oseq, flag; - - n = cp->num; - flag = TRUE; - if(n < 0){ - n = -n; - flag = FALSE; - } - oseq = -1; - while(n-->0 && t->file->seq!=0 && t->file->seq!=oseq){ - oseq = t->file->seq; - undo(t, nil, nil, flag, 0, nil, 0); - } - return TRUE; -} - -int -w_cmd(Text *t, Cmd *cp) -{ - Rune *r; - File *f; - - f = t->file; - if(f->seq == seq) - editerror("can't write file with pending modifications"); - r = cmdname(f, cp->text, FALSE); - if(r == nil) - editerror("no name specified for 'w' command"); - putfile(f, addr.r.q0, addr.r.q1, r, runestrlen(r)); - /* r is freed by putfile */ - return TRUE; -} - -int -x_cmd(Text *t, Cmd *cp) -{ - if(cp->re) - looper(t->file, cp, cp->cmdc=='x'); - else - linelooper(t->file, cp); - return TRUE; -} - -int -X_cmd(Text *t, Cmd *cp) -{ - filelooper(t, cp, cp->cmdc=='X'); - return TRUE; -} - -void -runpipe(Text *t, int cmd, Rune *cr, int ncr, int state) -{ - Rune *r, *s; - int n; - Runestr dir; - Window *w; - - r = skipbl(cr, ncr, &n); - if(n == 0) - editerror("no command specified for %c", cmd); - w = nil; - if(state == Inserting){ - w = t->w; - t->q0 = addr.r.q0; - t->q1 = addr.r.q1; - if(cmd == '<' || cmd=='|') - elogdelete(t->file, t->q0, t->q1); - } - s = runemalloc(n+2); - s[0] = cmd; - runemove(s+1, r, n); - n++; - dir.r = nil; - dir.nr = 0; - if(t != nil) - dir = dirname(t, nil, 0); - if(dir.nr==1 && dir.r[0]=='.'){ /* sigh */ - free(dir.r); - dir.r = nil; - dir.nr = 0; - } - editing = state; - if(t!=nil && t->w!=nil) - incref(t->w); /* run will decref */ - run(w, runetobyte(s, n), dir.r, dir.nr, TRUE, nil, nil, TRUE); - free(s); - if(t!=nil && t->w!=nil) - winunlock(t->w); - qunlock(&row); - recvul(cedit); - qlock(&row); - editing = Inactive; - if(t!=nil && t->w!=nil) - winlock(t->w, 'M'); -} - -int -pipe_cmd(Text *t, Cmd *cp) -{ - runpipe(t, cp->cmdc, cp->text->r, cp->text->n, Inserting); - return TRUE; -} - -long -nlcount(Text *t, long q0, long q1, long *pnr) -{ - long nl, start; - Rune *buf; - int i, nbuf; - - buf = fbufalloc(); - nbuf = 0; - i = nl = 0; - start = q0; - while(q0 < q1){ - if(i == nbuf){ - nbuf = q1-q0; - if(nbuf > RBUFSIZE) - nbuf = RBUFSIZE; - bufread(t->file, q0, buf, nbuf); - i = 0; - } - if(buf[i++] == '\n'){ - start = q0+1; - nl++; - } - q0++; - } - fbuffree(buf); - if(pnr != nil) - *pnr = q0 - start; - return nl; -} - -enum { - PosnLine = 0, - PosnChars = 1, - PosnLineChars = 2, -}; - -void -printposn(Text *t, int mode) -{ - long l1, l2, r1, r2; - - if (t != nil && t->file != nil && t->file->name != nil) - warning(nil, "%.*S:", t->file->nname, t->file->name); - switch(mode) { - case PosnChars: - warning(nil, "#%d", addr.r.q0); - if(addr.r.q1 != addr.r.q0) - warning(nil, ",#%d", addr.r.q1); - warning(nil, "\n"); - return; - default: - case PosnLine: - l1 = 1+nlcount(t, 0, addr.r.q0, nil); - l2 = l1+nlcount(t, addr.r.q0, addr.r.q1, nil); - /* check if addr ends with '\n' */ - if(addr.r.q1>0 && addr.r.q1>addr.r.q0 && textreadc(t, addr.r.q1-1)=='\n') - --l2; - warning(nil, "%lud", l1); - if(l2 != l1) - warning(nil, ",%lud", l2); - warning(nil, "\n"); - return; - case PosnLineChars: - l1 = 1+nlcount(t, 0, addr.r.q0, &r1); - l2 = l1+nlcount(t, addr.r.q0, addr.r.q1, &r2); - if(l2 == l1) - r2 += r1; - warning(nil, "%lud+#%lud", l1, r1); - if(l2 != l1) - warning(nil, ",%lud+#%lud", l2, r2); - warning(nil, "\n"); - return; - } -} - -int -eq_cmd(Text *t, Cmd *cp) -{ - int mode; - - switch(cp->text->n){ - case 0: - mode = PosnLine; - break; - case 1: - if(cp->text->r[0] == '#'){ - mode = PosnChars; - break; - } - if(cp->text->r[0] == '+'){ - mode = PosnLineChars; - break; - } - default: - SET(mode); - editerror("newline expected"); - } - printposn(t, mode); - return TRUE; -} - -int -nl_cmd(Text *t, Cmd *cp) -{ - Address a; - File *f; - - f = t->file; - if(cp->addr == 0){ - /* First put it on newline boundaries */ - mkaddr(&a, f); - addr = lineaddr(0, a, -1); - a = lineaddr(0, a, 1); - addr.r.q1 = a.r.q1; - if(addr.r.q0==t->q0 && addr.r.q1==t->q1){ - mkaddr(&a, f); - addr = lineaddr(1, a, 1); - } - } - textshow(t, addr.r.q0, addr.r.q1, 1); - return TRUE; -} - -int -append(File *f, Cmd *cp, long p) -{ - if(cp->text->n > 0) - eloginsert(f, p, cp->text->r, cp->text->n); - f->curtext->q0 = p; - f->curtext->q1 = p; - return TRUE; -} - -int -pdisplay(File *f) -{ - long p1, p2; - int np; - Rune *buf; - - p1 = addr.r.q0; - p2 = addr.r.q1; - if(p2 > f->nc) - p2 = f->nc; - buf = fbufalloc(); - while(p1 < p2){ - np = p2-p1; - if(np>RBUFSIZE-1) - np = RBUFSIZE-1; - bufread(f, p1, buf, np); - buf[np] = L'\0'; - warning(nil, "%S", buf); - p1 += np; - } - fbuffree(buf); - f->curtext->q0 = addr.r.q0; - f->curtext->q1 = addr.r.q1; - return TRUE; -} - -void -pfilename(File *f) -{ - int dirty; - Window *w; - - w = f->curtext->w; - /* same check for dirty as in settag, but we know ncache==0 */ - dirty = !w->isdir && !w->isscratch && f->mod; - warning(nil, "%c%c%c %.*S\n", " '"[dirty], - '+', " ."[curtext!=nil && curtext->file==f], f->nname, f->name); -} - -void -loopcmd(File *f, Cmd *cp, Range *rp, long nrp) -{ - long i; - - for(i=0; icurtext->q0 = rp[i].q0; - f->curtext->q1 = rp[i].q1; - cmdexec(f->curtext, cp); - } -} - -void -looper(File *f, Cmd *cp, int xy) -{ - long p, op, nrp; - Range r, tr; - Range *rp; - - r = addr.r; - op= xy? -1 : r.q0; - nest++; - if(rxcompile(cp->re->r) == FALSE) - editerror("bad regexp in %c command", cp->cmdc); - nrp = 0; - rp = nil; - for(p = r.q0; p<=r.q1; ){ - if(!rxexecute(f->curtext, nil, p, r.q1, &sel)){ /* no match, but y should still run */ - if(xy || op>r.q1) - break; - tr.q0 = op, tr.q1 = r.q1; - p = r.q1+1; /* exit next loop */ - }else{ - if(sel.r[0].q0==sel.r[0].q1){ /* empty match? */ - if(sel.r[0].q0==op){ - p++; - continue; - } - p = sel.r[0].q1+1; - }else - p = sel.r[0].q1; - if(xy) - tr = sel.r[0]; - else - tr.q0 = op, tr.q1 = sel.r[0].q0; - } - op = sel.r[0].q1; - nrp++; - rp = erealloc(rp, nrp*sizeof(Range)); - rp[nrp-1] = tr; - } - loopcmd(f, cp->cmd, rp, nrp); - free(rp); - --nest; -} - -void -linelooper(File *f, Cmd *cp) -{ - long nrp, p; - Range r, linesel; - Address a, a3; - Range *rp; - - nest++; - nrp = 0; - rp = nil; - r = addr.r; - a3.f = f; - a3.r.q0 = a3.r.q1 = r.q0; - a = lineaddr(0, a3, 1); - linesel = a.r; - for(p = r.q0; p= r.q1) - break; - if(linesel.q1 >= r.q1) - linesel.q1 = r.q1; - if(linesel.q1 > linesel.q0) - if(linesel.q0>=a3.r.q1 && linesel.q1>a3.r.q1){ - a3.r = linesel; - nrp++; - rp = erealloc(rp, nrp*sizeof(Range)); - rp[nrp-1] = linesel; - continue; - } - break; - } - loopcmd(f, cp->cmd, rp, nrp); - free(rp); - --nest; -} - -struct Looper -{ - Cmd *cp; - int XY; - Window **w; - int nw; -} loopstruct; /* only one; X and Y can't nest */ - -void -alllooper(Window *w, void *v) -{ - Text *t; - struct Looper *lp; - Cmd *cp; - - lp = v; - cp = lp->cp; -// if(w->isscratch || w->isdir) -// return; - t = &w->body; - /* only use this window if it's the current window for the file */ - if(t->file->curtext != t) - return; -// if(w->nopen[QWevent] > 0) -// return; - /* no auto-execute on files without names */ - if(cp->re==nil && t->file->nname==0) - return; - if(cp->re==nil || filematch(t->file, cp->re)==lp->XY){ - lp->w = erealloc(lp->w, (lp->nw+1)*sizeof(Window*)); - lp->w[lp->nw++] = w; - } -} - -void -alllocker(Window *w, void *v) -{ - if(v) - incref(w); - else - winclose(w); -} - -void -filelooper(Text *t, Cmd *cp, int XY) -{ - int i; - Text *targ; - - if(Glooping++) - editerror("can't nest %c command", "YX"[XY]); - nest++; - - loopstruct.cp = cp; - loopstruct.XY = XY; - if(loopstruct.w) /* error'ed out last time */ - free(loopstruct.w); - loopstruct.w = nil; - loopstruct.nw = 0; - allwindows(alllooper, &loopstruct); - /* - * add a ref to all windows to keep safe windows accessed by X - * that would not otherwise have a ref to hold them up during - * the shenanigans. note this with globalincref so that any - * newly created windows start with an extra reference. - */ - allwindows(alllocker, (void*)1); - globalincref = 1; - /* - * Unlock the window running the X command. - * We'll need to lock and unlock each target window in turn. - */ - if(t && t->w) - winunlock(t->w); - for(i=0; ibody; - if(targ && targ->w) - winlock(targ->w, cp->cmdc); - cmdexec(targ, cp->cmd); - if(targ && targ->w) - winunlock(targ->w); - } - if(t && t->w) - winlock(t->w, cp->cmdc); - allwindows(alllocker, (void*)0); - globalincref = 0; - free(loopstruct.w); - loopstruct.w = nil; - - --Glooping; - --nest; -} - -void -nextmatch(File *f, String *r, long p, int sign) -{ - if(rxcompile(r->r) == FALSE) - editerror("bad regexp in command address"); - if(sign >= 0){ - if(!rxexecute(f->curtext, nil, p, 0x7FFFFFFFL, &sel)) - editerror("no match for regexp"); - if(sel.r[0].q0==sel.r[0].q1 && sel.r[0].q0==p){ - if(++p>f->nc) - p = 0; - if(!rxexecute(f->curtext, nil, p, 0x7FFFFFFFL, &sel)) - editerror("address"); - } - }else{ - if(!rxbexecute(f->curtext, p, &sel)) - editerror("no match for regexp"); - if(sel.r[0].q0==sel.r[0].q1 && sel.r[0].q1==p){ - if(--p<0) - p = f->nc; - if(!rxbexecute(f->curtext, p, &sel)) - editerror("address"); - } - } -} - -File *matchfile(String*); -Address charaddr(long, Address, int); -Address lineaddr(long, Address, int); - -Address -cmdaddress(Addr *ap, Address a, int sign) -{ - File *f = a.f; - Address a1, a2; - - do{ - switch(ap->type){ - case 'l': - case '#': - a = (*(ap->type=='#'?charaddr:lineaddr))(ap->num, a, sign); - break; - - case '.': - mkaddr(&a, f); - break; - - case '$': - a.r.q0 = a.r.q1 = f->nc; - break; - - case '\'': -editerror("can't handle '"); -// a.r = f->mark; - break; - - case '?': - sign = -sign; - if(sign == 0) - sign = -1; - /* fall through */ - case '/': - nextmatch(f, ap->re, sign>=0? a.r.q1 : a.r.q0, sign); - a.r = sel.r[0]; - break; - - case '"': - f = matchfile(ap->re); - mkaddr(&a, f); - break; - - case '*': - a.r.q0 = 0, a.r.q1 = f->nc; - return a; - - case ',': - case ';': - if(ap->left) - a1 = cmdaddress(ap->left, a, 0); - else - a1.f = a.f, a1.r.q0 = a1.r.q1 = 0; - if(ap->type == ';'){ - f = a1.f; - a = a1; - f->curtext->q0 = a1.r.q0; - f->curtext->q1 = a1.r.q1; - } - if(ap->next) - a2 = cmdaddress(ap->next, a, 0); - else - a2.f = a.f, a2.r.q0 = a2.r.q1 = f->nc; - if(a1.f != a2.f) - editerror("addresses in different files"); - a.f = a1.f, a.r.q0 = a1.r.q0, a.r.q1 = a2.r.q1; - if(a.r.q1 < a.r.q0) - editerror("addresses out of order"); - return a; - - case '+': - case '-': - sign = 1; - if(ap->type == '-') - sign = -1; - if(ap->next==0 || ap->next->type=='+' || ap->next->type=='-') - a = lineaddr(1L, a, sign); - break; - default: - error("cmdaddress"); - return a; - } - }while(ap = ap->next); /* assign = */ - return a; -} - -struct Tofile{ - File *f; - String *r; -}; - -void -alltofile(Window *w, void *v) -{ - Text *t; - struct Tofile *tp; - - tp = v; - if(tp->f != nil) - return; - if(w->isscratch || w->isdir) - return; - t = &w->body; - /* only use this window if it's the current window for the file */ - if(t->file->curtext != t) - return; -// if(w->nopen[QWevent] > 0) -// return; - if(runeeq(tp->r->r, tp->r->n, t->file->name, t->file->nname)) - tp->f = t->file; -} - -File* -tofile(String *r) -{ - struct Tofile t; - String rr; - - rr.r = skipbl(r->r, r->n, &rr.n); - t.f = nil; - t.r = &rr; - allwindows(alltofile, &t); - if(t.f == nil) - editerror("no such file\"%S\"", rr.r); - return t.f; -} - -void -allmatchfile(Window *w, void *v) -{ - struct Tofile *tp; - Text *t; - - tp = v; - if(w->isscratch || w->isdir) - return; - t = &w->body; - /* only use this window if it's the current window for the file */ - if(t->file->curtext != t) - return; -// if(w->nopen[QWevent] > 0) -// return; - if(filematch(w->body.file, tp->r)){ - if(tp->f != nil) - editerror("too many files match \"%S\"", tp->r->r); - tp->f = w->body.file; - } -} - -File* -matchfile(String *r) -{ - struct Tofile tf; - - tf.f = nil; - tf.r = r; - allwindows(allmatchfile, &tf); - - if(tf.f == nil) - editerror("no file matches \"%S\"", r->r); - return tf.f; -} - -int -filematch(File *f, String *r) -{ - char *buf; - Rune *rbuf; - Window *w; - int match, i, dirty; - Rangeset s; - - /* compile expr first so if we get an error, we haven't allocated anything */ - if(rxcompile(r->r) == FALSE) - editerror("bad regexp in file match"); - buf = fbufalloc(); - w = f->curtext->w; - /* same check for dirty as in settag, but we know ncache==0 */ - dirty = !w->isdir && !w->isscratch && f->mod; - snprint(buf, BUFSIZE, "%c%c%c %.*S\n", " '"[dirty], - '+', " ."[curtext!=nil && curtext->file==f], f->nname, f->name); - rbuf = bytetorune(buf, &i); - fbuffree(buf); - match = rxexecute(nil, rbuf, 0, i, &s); - free(rbuf); - return match; -} - -Address -charaddr(long l, Address addr, int sign) -{ - if(sign == 0) - addr.r.q0 = addr.r.q1 = l; - else if(sign < 0) - addr.r.q1 = addr.r.q0 -= l; - else if(sign > 0) - addr.r.q0 = addr.r.q1 += l; - if(addr.r.q0<0 || addr.r.q1>addr.f->nc) - editerror("address out of range"); - return addr; -} - -Address -lineaddr(long l, Address addr, int sign) -{ - int n; - int c; - File *f = addr.f; - Address a; - long p; - - a.f = f; - if(sign >= 0){ - if(l == 0){ - if(sign==0 || addr.r.q1==0){ - a.r.q0 = a.r.q1 = 0; - return a; - } - a.r.q0 = addr.r.q1; - p = addr.r.q1-1; - }else{ - if(sign==0 || addr.r.q1==0){ - p = 0; - n = 1; - }else{ - p = addr.r.q1-1; - n = textreadc(f->curtext, p++)=='\n'; - } - while(n < l){ - if(p >= f->nc) - editerror("address out of range"); - if(textreadc(f->curtext, p++) == '\n') - n++; - } - a.r.q0 = p; - } - while(p < f->nc && textreadc(f->curtext, p++)!='\n') - ; - a.r.q1 = p; - }else{ - p = addr.r.q0; - if(l == 0) - a.r.q1 = addr.r.q0; - else{ - for(n = 0; ncurtext, p-1); - if(c != '\n' || ++n != l) - p--; - } - } - a.r.q1 = p; - if(p > 0) - p--; - } - while(p > 0 && textreadc(f->curtext, p-1)!='\n') /* lines start after a newline */ - p--; - a.r.q0 = p; - } - return a; -} - -struct Filecheck -{ - File *f; - Rune *r; - int nr; -}; - -void -allfilecheck(Window *w, void *v) -{ - struct Filecheck *fp; - File *f; - - fp = v; - f = w->body.file; - if(w->body.file == fp->f) - return; - if(runeeq(fp->r, fp->nr, f->name, f->nname)) - warning(nil, "warning: duplicate file name \"%.*S\"\n", fp->nr, fp->r); -} - -Rune* -cmdname(File *f, String *str, int set) -{ - Rune *r, *s; - int n; - struct Filecheck fc; - Runestr newname; - - r = nil; - n = str->n; - s = str->r; - if(n == 0){ - /* no name; use existing */ - if(f->nname == 0) - return nil; - r = runemalloc(f->nname+1); - runemove(r, f->name, f->nname); - return r; - } - s = skipbl(s, n, &n); - if(n == 0) - goto Return; - - if(s[0] == '/'){ - r = runemalloc(n+1); - runemove(r, s, n); - }else{ - newname = dirname(f->curtext, runestrdup(s), n); - n = newname.nr; - r = runemalloc(n+1); /* NUL terminate */ - runemove(r, newname.r, n); - free(newname.r); - } - fc.f = f; - fc.r = r; - fc.nr = n; - allwindows(allfilecheck, &fc); - if(f->nname == 0) - set = TRUE; - - Return: - if(set && !runeeq(r, n, f->name, f->nname)){ - filemark(f); - f->mod = TRUE; - f->curtext->w->dirty = TRUE; - winsetname(f->curtext->w, r, n); - } - return r; -} diff --git a/edit.6 b/edit.6 deleted file mode 100644 index 5c8bc82cca12ac79afab71b6bfe45395d13192a0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24280 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 Uc -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "dat.h" -#include "edit.h" -#include "fns.h" - -static char linex[]="\n"; -static char wordx[]=" \t\n"; -struct cmdtab cmdtab[]={ -/* cmdc text regexp addr defcmd defaddr count token fn */ - '\n', 0, 0, 0, 0, aDot, 0, 0, nl_cmd, - 'a', 1, 0, 0, 0, aDot, 0, 0, a_cmd, - 'b', 0, 0, 0, 0, aNo, 0, linex, b_cmd, - 'c', 1, 0, 0, 0, aDot, 0, 0, c_cmd, - 'd', 0, 0, 0, 0, aDot, 0, 0, d_cmd, - 'e', 0, 0, 0, 0, aNo, 0, wordx, e_cmd, - 'f', 0, 0, 0, 0, aNo, 0, wordx, f_cmd, - 'g', 0, 1, 0, 'p', aDot, 0, 0, g_cmd, - 'i', 1, 0, 0, 0, aDot, 0, 0, i_cmd, - 'm', 0, 0, 1, 0, aDot, 0, 0, m_cmd, - 'p', 0, 0, 0, 0, aDot, 0, 0, p_cmd, - 'r', 0, 0, 0, 0, aDot, 0, wordx, e_cmd, - 's', 0, 1, 0, 0, aDot, 1, 0, s_cmd, - 't', 0, 0, 1, 0, aDot, 0, 0, m_cmd, - 'u', 0, 0, 0, 0, aNo, 2, 0, u_cmd, - 'v', 0, 1, 0, 'p', aDot, 0, 0, g_cmd, - 'w', 0, 0, 0, 0, aAll, 0, wordx, w_cmd, - 'x', 0, 1, 0, 'p', aDot, 0, 0, x_cmd, - 'y', 0, 1, 0, 'p', aDot, 0, 0, x_cmd, - '=', 0, 0, 0, 0, aDot, 0, linex, eq_cmd, - 'B', 0, 0, 0, 0, aNo, 0, linex, B_cmd, - 'D', 0, 0, 0, 0, aNo, 0, linex, D_cmd, - 'X', 0, 1, 0, 'f', aNo, 0, 0, X_cmd, - 'Y', 0, 1, 0, 'f', aNo, 0, 0, X_cmd, - '<', 0, 0, 0, 0, aDot, 0, linex, pipe_cmd, - '|', 0, 0, 0, 0, aDot, 0, linex, pipe_cmd, - '>', 0, 0, 0, 0, aDot, 0, linex, pipe_cmd, -/* deliberately unimplemented: - 'k', 0, 0, 0, 0, aDot, 0, 0, k_cmd, - 'n', 0, 0, 0, 0, aNo, 0, 0, n_cmd, - 'q', 0, 0, 0, 0, aNo, 0, 0, q_cmd, - '!', 0, 0, 0, 0, aNo, 0, linex, plan9_cmd, - */ - 0, 0, 0, 0, 0, 0, 0, 0, -}; - -Cmd *parsecmd(int); -Addr *compoundaddr(void); -Addr *simpleaddr(void); -void freecmd(void); -void okdelim(int); - -Rune *cmdstartp; -Rune *cmdendp; -Rune *cmdp; -Channel *editerrc; - -String *lastpat; -int patset; - -List cmdlist; -List addrlist; -List stringlist; -Text *curtext; -int editing = Inactive; - -String* newstring(int); - -void -editthread(void*) -{ - Cmd *cmdp; - - threadsetname("editthread"); - while((cmdp=parsecmd(0)) != 0){ -// ocurfile = curfile; -// loaded = curfile && !curfile->unread; - if(cmdexec(curtext, cmdp) == 0) - break; - freecmd(); - } - sendp(editerrc, nil); -} - -void -allelogterm(Window *w, void*) -{ - elogterm(w->body.file); -} - -void -alleditinit(Window *w, void*) -{ - textcommit(&w->tag, TRUE); - textcommit(&w->body, TRUE); - w->body.file->editclean = FALSE; -} - -void -allupdate(Window *w, void*) -{ - Text *t; - int i; - File *f; - - t = &w->body; - f = t->file; - if(f->curtext != t) /* do curtext only */ - return; - if(f->elog.type == Null) - elogterm(f); - else if(f->elog.type != Empty){ - elogapply(f); - if(f->editclean){ - f->mod = FALSE; - for(i=0; intext; i++) - f->text[i]->w->dirty = FALSE; - } - } - textsetselect(t, t->q0, t->q1); - textscrdraw(t); - winsettag(w); -} - -void -editerror(char *fmt, ...) -{ - va_list arg; - char *s; - - va_start(arg, fmt); - s = vsmprint(fmt, arg); - va_end(arg); - freecmd(); - allwindows(allelogterm, nil); /* truncate the edit logs */ - sendp(editerrc, s); - threadexits(nil); -} - -void -editcmd(Text *ct, Rune *r, uint n) -{ - char *err; - - if(n == 0) - return; - if(2*n > RBUFSIZE){ - warning(nil, "string too long\n"); - return; - } - - allwindows(alleditinit, nil); - if(cmdstartp) - free(cmdstartp); - cmdstartp = runemalloc(n+2); - runemove(cmdstartp, r, n); - if(r[n] != '\n') - cmdstartp[n++] = '\n'; - cmdstartp[n] = '\0'; - cmdendp = cmdstartp+n; - cmdp = cmdstartp; - if(ct->w == nil) - curtext = nil; - else - curtext = &ct->w->body; - resetxec(); - if(editerrc == nil){ - editerrc = chancreate(sizeof(char*), 0); - lastpat = allocstring(0); - } - threadcreate(editthread, nil, STACK); - err = recvp(editerrc); - editing = Inactive; - if(err != nil){ - if(err[0] != '\0') - warning(nil, "Edit: %s\n", err); - free(err); - } - - /* update everyone whose edit log has data */ - allwindows(allupdate, nil); -} - -int -getch(void) -{ - if(*cmdp == *cmdendp) - return -1; - return *cmdp++; -} - -int -nextc(void) -{ - if(*cmdp == *cmdendp) - return -1; - return *cmdp; -} - -void -ungetch(void) -{ - if(--cmdp < cmdstartp) - error("ungetch"); -} - -long -getnum(int signok) -{ - long n; - int c, sign; - - n = 0; - sign = 1; - if(signok>1 && nextc()=='-'){ - sign = -1; - getch(); - } - if((c=nextc())<'0' || '9'= 0) - ungetch(); - return c; -} - -/* - * Check that list has room for one more element. - */ -void -growlist(List *l) -{ - if(l->listptr==0 || l->nalloc==0){ - l->nalloc = INCR; - l->listptr = emalloc(INCR*sizeof(void*)); - l->nused = 0; - }else if(l->nused == l->nalloc){ - l->listptr = erealloc(l->listptr, (l->nalloc+INCR)*sizeof(void*)); - memset(l->ptr+l->nalloc, 0, INCR*sizeof(void*)); - l->nalloc += INCR; - } -} - -/* - * Remove the ith element from the list - */ -void -dellist(List *l, int i) -{ - l->nused--; - memmove(&l->ptr[i], &l->ptr[i+1], (l->nused-i)*sizeof(void*)); -} - -/* - * Add a new element, whose position is i, to the list - */ -void -inslist(List *l, int i, void *v) -{ - growlist(l); - memmove(&l->ptr[i+1], &l->ptr[i], (l->nused-i)*sizeof(void*)); - l->ptr[i] = v; - l->nused++; -} - -void -listfree(List *l) -{ - free(l->listptr); - free(l); -} - -String* -allocstring(int n) -{ - String *s; - - s = emalloc(sizeof(String)); - s->n = n; - s->nalloc = n+10; - s->r = emalloc(s->nalloc*sizeof(Rune)); - s->r[n] = '\0'; - return s; -} - -void -freestring(String *s) -{ - free(s->r); - free(s); -} - -Cmd* -newcmd(void){ - Cmd *p; - - p = emalloc(sizeof(Cmd)); - inslist(&cmdlist, cmdlist.nused, p); - return p; -} - -String* -newstring(int n) -{ - String *p; - - p = allocstring(n); - inslist(&stringlist, stringlist.nused, p); - return p; -} - -Addr* -newaddr(void) -{ - Addr *p; - - p = emalloc(sizeof(Addr)); - inslist(&addrlist, addrlist.nused, p); - return p; -} - -void -freecmd(void) -{ - int i; - - while(cmdlist.nused > 0) - free(cmdlist.ucharptr[--cmdlist.nused]); - while(addrlist.nused > 0) - free(addrlist.ucharptr[--addrlist.nused]); - while(stringlist.nused>0){ - i = --stringlist.nused; - freestring(stringlist.stringptr[i]); - } -} - -void -okdelim(int c) -{ - if(c=='\\' || ('a'<=c && c<='z') - || ('A'<=c && c<='Z') || ('0'<=c && c<='9')) - editerror("bad delimiter %c\n", c); -} - -void -atnl(void) -{ - int c; - - cmdskipbl(); - c = getch(); - if(c != '\n') - editerror("newline expected (saw %C)", c); -} - -void -Straddc(String *s, int c) -{ - if(s->n+1 >= s->nalloc){ - s->nalloc += 10; - s->r = erealloc(s->r, s->nalloc*sizeof(Rune)); - } - s->r[s->n++] = c; - s->r[s->n] = '\0'; -} - -void -getrhs(String *s, int delim, int cmd) -{ - int c; - - while((c = getch())>0 && c!=delim && c!='\n'){ - if(c == '\\'){ - if((c=getch()) <= 0) - error("bad right hand side"); - if(c == '\n'){ - ungetch(); - c='\\'; - }else if(c == 'n') - c='\n'; - else if(c!=delim && (cmd=='s' || c!='\\')) /* s does its own */ - Straddc(s, '\\'); - } - Straddc(s, c); - } - ungetch(); /* let client read whether delimiter, '\n' or whatever */ -} - -String * -collecttoken(char *end) -{ - String *s = newstring(0); - int c; - - while((c=nextc())==' ' || c=='\t') - Straddc(s, getch()); /* blanks significant for getname() */ - while((c=getch())>0 && utfrune(end, c)==0) - Straddc(s, c); - if(c != '\n') - atnl(); - return s; -} - -String * -collecttext(void) -{ - String *s; - int begline, i, c, delim; - - s = newstring(0); - if(cmdskipbl()=='\n'){ - getch(); - i = 0; - do{ - begline = i; - while((c = getch())>0 && c!='\n') - i++, Straddc(s, c); - i++, Straddc(s, '\n'); - if(c < 0) - goto Return; - }while(s->r[begline]!='.' || s->r[begline+1]!='\n'); - s->r[s->n-2] = '\0'; - s->n -= 2; - }else{ - okdelim(delim = getch()); - getrhs(s, delim, 'a'); - if(nextc()==delim) - getch(); - atnl(); - } - Return: - return s; -} - -int -cmdlookup(int c) -{ - int i; - - for(i=0; cmdtab[i].cmdc; i++) - if(cmdtab[i].cmdc == c) - return i; - return -1; -} - -Cmd* -parsecmd(int nest) -{ - int i, c; - struct cmdtab *ct; - Cmd *cp, *ncp; - Cmd cmd; - - cmd.next = cmd.cmd = 0; - cmd.re = 0; - cmd.flag = cmd.num = 0; - cmd.addr = compoundaddr(); - if(cmdskipbl() == -1) - return 0; - if((c=getch())==-1) - return 0; - cmd.cmdc = c; - if(cmd.cmdc=='c' && nextc()=='d'){ /* sleazy two-character case */ - getch(); /* the 'd' */ - cmd.cmdc='c'|0x100; - } - i = cmdlookup(cmd.cmdc); - if(i >= 0){ - if(cmd.cmdc == '\n') - goto Return; /* let nl_cmd work it all out */ - ct = &cmdtab[i]; - if(ct->defaddr==aNo && cmd.addr) - editerror("command takes no address"); - if(ct->count) - cmd.num = getnum(ct->count); - if(ct->regexp){ - /* x without pattern -> .*\n, indicated by cmd.re==0 */ - /* X without pattern is all files */ - if((ct->cmdc!='x' && ct->cmdc!='X') || - ((c = nextc())!=' ' && c!='\t' && c!='\n')){ - cmdskipbl(); - if((c = getch())=='\n' || c<0) - editerror("no address"); - okdelim(c); - cmd.re = getregexp(c); - if(ct->cmdc == 's'){ - cmd.text = newstring(0); - getrhs(cmd.text, c, 's'); - if(nextc() == c){ - getch(); - if(nextc() == 'g') - cmd.flag = getch(); - } - - } - } - } - if(ct->addr && (cmd.mtaddr=simpleaddr())==0) - editerror("bad address"); - if(ct->defcmd){ - if(cmdskipbl() == '\n'){ - getch(); - cmd.cmd = newcmd(); - cmd.cmd->cmdc = ct->defcmd; - }else if((cmd.cmd = parsecmd(nest))==0) - error("defcmd"); - }else if(ct->text) - cmd.text = collecttext(); - else if(ct->token) - cmd.text = collecttoken(ct->token); - else - atnl(); - }else - switch(cmd.cmdc){ - case '{': - cp = 0; - do{ - if(cmdskipbl()=='\n') - getch(); - ncp = parsecmd(nest+1); - if(cp) - cp->next = ncp; - else - cmd.cmd = ncp; - }while(cp = ncp); - break; - case '}': - atnl(); - if(nest==0) - editerror("right brace with no left brace"); - return 0; - default: - editerror("unknown command %c", cmd.cmdc); - } - Return: - cp = newcmd(); - *cp = cmd; - return cp; -} - -String* -getregexp(int delim) -{ - String *buf, *r; - int i, c; - - buf = allocstring(0); - for(i=0; ; i++){ - if((c = getch())=='\\'){ - if(nextc()==delim) - c = getch(); - else if(nextc()=='\\'){ - Straddc(buf, c); - c = getch(); - } - }else if(c==delim || c=='\n') - break; - if(i >= RBUFSIZE) - editerror("regular expression too long"); - Straddc(buf, c); - } - if(c!=delim && c) - ungetch(); - if(buf->n > 0){ - patset = TRUE; - freestring(lastpat); - lastpat = buf; - }else - freestring(buf); - if(lastpat->n == 0) - editerror("no regular expression defined"); - r = newstring(lastpat->n); - runemove(r->r, lastpat->r, lastpat->n); /* newstring put \0 at end */ - return r; -} - -Addr * -simpleaddr(void) -{ - Addr addr; - Addr *ap, *nap; - - addr.next = 0; - addr.left = 0; - switch(cmdskipbl()){ - case '#': - addr.type = getch(); - addr.num = getnum(1); - break; - case '0': case '1': case '2': case '3': case '4': - case '5': case '6': case '7': case '8': case '9': - addr.num = getnum(1); - addr.type='l'; - break; - case '/': case '?': case '"': - addr.re = getregexp(addr.type = getch()); - break; - case '.': - case '$': - case '+': - case '-': - case '\'': - addr.type = getch(); - break; - default: - return 0; - } - if(addr.next = simpleaddr()) - switch(addr.next->type){ - case '.': - case '$': - case '\'': - if(addr.type!='"') - case '"': - editerror("bad address syntax"); - break; - case 'l': - case '#': - if(addr.type=='"') - break; - /* fall through */ - case '/': - case '?': - if(addr.type!='+' && addr.type!='-'){ - /* insert the missing '+' */ - nap = newaddr(); - nap->type='+'; - nap->next = addr.next; - addr.next = nap; - } - break; - case '+': - case '-': - break; - default: - error("simpleaddr"); - } - ap = newaddr(); - *ap = addr; - return ap; -} - -Addr * -compoundaddr(void) -{ - Addr addr; - Addr *ap, *next; - - addr.left = simpleaddr(); - if((addr.type = cmdskipbl())!=',' && addr.type!=';') - return addr.left; - getch(); - next = addr.next = compoundaddr(); - if(next && (next->type==',' || next->type==';') && next->left==0) - editerror("bad address syntax"); - ap = newaddr(); - *ap = addr; - return ap; -} diff --git a/edit.h b/edit.h deleted file mode 100644 index 2f5fa66..0000000 --- a/edit.h +++ /dev/null @@ -1,99 +0,0 @@ -#pragma varargck argpos editerror 1 - -typedef struct Addr Addr; -typedef struct Address Address; -typedef struct Cmd Cmd; -typedef struct List List; -typedef struct String String; - -struct String -{ - int n; /* excludes NUL */ - Rune *r; /* includes NUL */ - int nalloc; -}; - -struct Addr -{ - char type; /* # (char addr), l (line addr), / ? . $ + - , ; */ - union{ - String *re; - Addr *left; /* left side of , and ; */ - }; - ulong num; - Addr *next; /* or right side of , and ; */ -}; - -struct Address -{ - Range r; - File *f; -}; - -struct Cmd -{ - Addr *addr; /* address (range of text) */ - String *re; /* regular expression for e.g. 'x' */ - union{ - Cmd *cmd; /* target of x, g, {, etc. */ - String *text; /* text of a, c, i; rhs of s */ - Addr *mtaddr; /* address for m, t */ - }; - Cmd *next; /* pointer to next element in {} */ - short num; - ushort flag; /* whatever */ - ushort cmdc; /* command character; 'x' etc. */ -}; - -extern struct cmdtab{ - ushort cmdc; /* command character */ - uchar text; /* takes a textual argument? */ - uchar regexp; /* takes a regular expression? */ - uchar addr; /* takes an address (m or t)? */ - uchar defcmd; /* default command; 0==>none */ - uchar defaddr; /* default address */ - uchar count; /* takes a count e.g. s2/// */ - char *token; /* takes text terminated by one of these */ - int (*fn)(Text*, Cmd*); /* function to call with parse tree */ -}cmdtab[]; - -#define INCR 25 /* delta when growing list */ - -struct List -{ - int nalloc; - int nused; - union{ - void *listptr; - void* *ptr; - uchar* *ucharptr; - String* *stringptr; - }; -}; - -enum Defaddr{ /* default addresses */ - aNo, - aDot, - aAll, -}; - -int nl_cmd(Text*, Cmd*), a_cmd(Text*, Cmd*), b_cmd(Text*, Cmd*); -int c_cmd(Text*, Cmd*), d_cmd(Text*, Cmd*); -int B_cmd(Text*, Cmd*), D_cmd(Text*, Cmd*), e_cmd(Text*, Cmd*); -int f_cmd(Text*, Cmd*), g_cmd(Text*, Cmd*), i_cmd(Text*, Cmd*); -int k_cmd(Text*, Cmd*), m_cmd(Text*, Cmd*), n_cmd(Text*, Cmd*); -int p_cmd(Text*, Cmd*); -int s_cmd(Text*, Cmd*), u_cmd(Text*, Cmd*), w_cmd(Text*, Cmd*); -int x_cmd(Text*, Cmd*), X_cmd(Text*, Cmd*), pipe_cmd(Text*, Cmd*); -int eq_cmd(Text*, Cmd*); - -String *allocstring(int); -void freestring(String*); -String *getregexp(int); -Addr *newaddr(void); -Address cmdaddress(Addr*, Address, int); -int cmdexec(Text*, Cmd*); -void editerror(char*, ...); -int cmdlookup(int); -void resetxec(void); -void Straddc(String*, int); diff --git a/elog.6 b/elog.6 deleted file mode 100644 index df2a9c4aa8a5bc3cef9e330b21f4928620e47c23..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13190 zcmbtbYmgk(bv~_COIq|`XP4a-=rJRNMh}pXj3ElaDX@)s8lepj@5VUH&dzEF&CYE1 z%;>R6Y`_pZAQ?kBlqn}9N+re%gF^t9No>b*VLQZe3NVj=O*vS3VdFT2fT7A1&i9>j zZ+8z?xk$o~)%niro_o%{=icsVZjk-KS*OYk{HNWFjo9DbQ!N?UjLSxprzeakm8UC4 zRcei0TgtLs0^xt^!?`L=Pn_{i<5cVAT6@Bow6{z_f1c`ZmmR-g*WBMcidC&TURJ|P zQv>Cd;A|&(;m`43d%MIvMA=A=?r|b6?NyJ>)BqlpO{Zh`+S z1a6&xjz3C)cigk!?Kv*D<7OjP$Me->yDWK|rqhjfv!a$uo#ngUrseL+{_#dBw)y;e zYLrdW*<}0K+?49LRdDp&PsXKb3+d+60$z>JBpuAUeIZr)9O8>_lHBoBmaQCRE?eed^Zw>T+yGJMM zP4)P1>S?>Y@0kCu$I3+2f;>-MZI`>Rfv%RP_|G=d-w_d?t@ z#xNK_V3xX=Yz$z=T}*C8Fza2+`NphvF}b&XL6e0Cb61xp^9$ygUCc$sEOarMH)xi- zn4B?~Q(a6>AI$C|*vAv(UxN8MD#F>^Ek+i#cG- zRu}U)V-~uYgU0OkIb_VqF3n+M7P^?rjoBUi@y6_)<_X4(y3AJ?vpe{eM>Ah#%@<%f-7?VY9j|5-bbjS12Jf3aUdbK4-cMu|)F0;aiKYcwm!^Y`g{L6Ya^y+_Rkk!6>ZgzNBUrW5>t>_N>QNtZnz z!9qk}-t$7Sb( zPQ|8sL|&jtZxpnf@*|Mhy2tV&IB@b1Y(E*xj}3j9Xiib$@)){oRpMzR=OubPCP~iA zwBo$;LXv}Z0#dFx{|(ZW14SmX2AAlm)jjE~S$2)#fnl;n-|^%nosCX5`0DT<|!-)YhK&%+paH zc6PPiti)_CbSk+%OpcUJt`qciMMo6Scb5R+sXzl&$^|;7=5A>*QYU21ZZV^fH;^`G z=wupRUXcYuzRPqDq=cI3St0Oixu^&^(34@OA_@6OGn0rWIFJ`z-6hiNj~9(}iS!QD zB^q_!&!=7|7|@h(Ba>nWnKKFG00Wgk46CQK(tMY%EfMC;s#n{3MIT22pgz%Ts?Lwg9WgTYw`4?9|^Cc%BTa^ z6U@m+dI(ht!%gK@n=9?E%Y>>uNaV#f+sl5%c8}hODKc_+j)9=)5ibIY+6!g!^I-2tqqf;kBj&${m zsZ7Gpassg_vQ0vvhVC*xU~UL%k{shL{S~cd2zYE`0Olj9-~q z%gI1)lW-1%$R_Hf0=KKYV92T+%PCNEZ4#S7(P2%)@SLKa!TGlZgV<nNMTraQCV&EFvVw8EJAxf}8$q{HkdAbY*(Fv4?jiN+q`(%X2d* zP80)^^qw&T!eB_F#uaJ{EfCu_a&?K5;u4RAlwZl%E(!|}qD>%`gqq5xyaS}ISX;-j zoCZ!XU@Ih+chZq{Af}Ws7zl<;fLL_t#Bw_Mt|CP_!;miH%N0rZeT4xo$qH8nY!5Op6D=)n+CR9oCpw;w?HUm3M7iXSM~+GP;vlJn zn$%9P9i+eO8Op333e&Zt2z&p2QKMwpm=>3f)7NE_S1m4+IiqmieCRWu|6z0j&l`8B zACa>d$_Y`(?6iw=HlPN;Lt;#!gfBvdbKxAwxQO13f8C{+q@4z&bV{@G9*}9LBT7#L zA_-r?A9OlZd=Rv@L?XWqhj*w@!dIy|>HuG6!0f$Hbf*DHI}J$LX`sCDO&WHBbII1r z9;xIsPzx6MUnKL(4q*_7IiT#WK=HUzu{_|%~8Ow zQBqVj@2h>evsy)2C)h#9S~^lzI#LXyzbTi3v{GpS55}?+9A6dmD?$XuqCq%9q04=) zD8E5r&T@abA_+HHx-Wys1VJvA%T19rJlF}YpzJVdUZ{vN2`5Ywt|-ULU2{bpXQE*} z-c~g4R~RM*FjE%5IdKIbVgbzD8MC2NplkTv;7SgQhVnN`d7pO}-!7BGt>@$es^(HK zs!+m}obsFjbe8DHGhd5Vva?K7YLyl*vR84Sm60Ca?O1*b(B~LSm@so;C6w?Sb9yxa z8cm5h_Vi7XjV2aS-Vdfj=(glI$aG5*A*b%bPbA^{txl@wwqz`d9)eh}HEM=yO;P#G z&JLv{yoAQ14*aHhDsyzZn3A+sM9Nx`^1>^r+X*Jf)>cF+X+_FTS`m@8B2qfBPEetx zu4htqYLm*OfzYL43S^oFBBVhdZpMU2!mI1@!PCose^-aS3{4bK})Xs zfflbFgdE%i{@O98{N!!ODz4Ph%uH=R7HSI?xm8j4arkI=f)CSytvZs{K1jK0d<3L_ z=YuV}8lEsGaDizsrN7b1^_W zR6nEghdSIRY)KsjT!rCq;!_gnB|#~DM`GFsZ2|s~DfIUWsdM>K3B%x4jRf9F8CDyz zv9`@;3}y5WJ_n_>sDnYf#m%X9=7od`-RmAxOzRCy6|25$*f>tqI+hEmrBAzL z_yc8Dm6JJ{Erfbdj06{c>aLrjlO|{IhK(-Z7)AGsZGl-@==eIrIM{R>Arv&rj!2%L%0o zExcH9N{>NlLsqGP81atm@Mk{srD$WTvaeNc)bUJFs@5?BI+EN*%;59gGf?OUjD;|r zfeQUViBLl}WGUoyoS{ZK5?oX+ej(b#Al%WLR|Uy!dP@Yjll%n(;_g_A**vEZ9m(&6 z`xp@R%&3r(@b9d~2L3h+Ua-niGWa~)t$@2;wL%-|FB)Z!@k^VRICtMPqrc3=kb6!D zu@rE#x}TK0SzVz>!pF?!0f_v~suMg&53VI*VJNgYFbYCAWZONtitTQA@Lv$-$=L1+ z-FfR=Srg?Na6*@LML9P?XPL8?5qb4v`~3?H$GSS73KjY)_ZqapSvyL7(K~_aro%g- z8(xJzyNRV%-B7wBoS|EmQ>&XFj!xlHMW|O7Emnj=7aj_)df_)L>tBSC zowDrsL|81g1IH9f_>+w0Ll{DvbeHB%r}>}M9ChHo%9w6&0u@HKOA7~n0fm(0@%2Y_9&4VQ&^d&LmCdt*Lx@jkIx>}*R zK!v{49ffeD6>>tqp%Y;NG2yhJrS*ufcgLpCyNrb}jZKB#Wg>LTg~D`2I75vkuWr~7 zM&%nE*k|?c>0Pr*O2R%nZoi#)a%Wd3_y=lgR!Lb_9|e`ks=_p@glXhQ7rHd6(9gLO zI7^pC75X_R!UBRo8Y#3is#?0NA7gB3qa(~Ty2lB%(UFpHt)0jQ)?~rEEhCg<8lBo} zqf;tvbmpO8M&F^4ivf*}&>Gznq>@HQghxoTc@iLPbWZ_g8lA$l(GjxI#bQ*_;uIz= zPOZ`&ptxB)L8Q&4$ zT1-;HkC4AvehPpq{|CUrl^;J%>!m;8Uu}GSNIkPqPWV%fUtixUOqEhUGsd5()C=n- z3hVF{0sPzh1|2Du4^l%P4^-qDM67|NxpXqOL5b2Iy`0SLPepisG!Ixp1q^__Nxr?q zAf-=27EPvpucdymB8gZ(M-BN`>Nh@IIxpHXt+#6GNNx*O1*x~V!Ur;1U3~vQ$5t&k zR%CUDb0X}=MHVKJIV6>FsA_%Yq!av%4*8^vR&Yp>Jt>nf;jOGCzM#k`#X{tshdC!g z46Bd4bBY9?GLVb%?}HbV9~GOxR~UGcHna53o1#-Es?FVUhAQPwjWp!;NU-e1KgmT~ z^;=Uf+?ohqK78J)Xxn(Z)oRqebXy|b^Q|YYkAiZ!F+E+XPk4FY
    BUivkm8+TqD zo`{ezt{V50_f1wO>ZX;zUKwmo&z&!Ph5=2Yh7XJZJ)zA~(&_u1d2yo2V>JrlDzGR^D5}_i!$PWr@8C zkA*N!s(Y*xqI!Mq10ZMC7yG2@s>qcaweE$14-8yf4=njsBkGSUli9@gCw05<_D|g& z4cH@YEvf536mGDrs{iBQ{2ds>M}1u4U1vSWAI12AjEinCnXy{q7v0ur8SA0MTB|;c zuUx(5aJS|1W*J|RCHYvM7=C)?qwkN7*Nwu^z4`Hp!k_>4-hYZth#Pyo2tR?%;E2Lf zd+Lcp4@4_=)f(faTD3lbp9{Utio{%Ny%L{%$6kgP-7cX&`(W-+wKbvw{UlaSC@Y3%D z*F`6eH}=^F@80&rC_LYas#RM%UW!|jwNg^HwcYWZRMy?>txrl~yY_d#b0}J;v1K;O zx1A N8_i$kJM@4S`5&Xhz0Uvu diff --git a/elog.c b/elog.c deleted file mode 100644 index d00fc8d..0000000 --- a/elog.c +++ /dev/null @@ -1,353 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "dat.h" -#include "fns.h" -#include "edit.h" - -static char Wsequence[] = "warning: changes out of sequence\n"; -static int warned = FALSE; - -/* - * Log of changes made by editing commands. Three reasons for this: - * 1) We want addresses in commands to apply to old file, not file-in-change. - * 2) It's difficult to track changes correctly as things move, e.g. ,x m$ - * 3) This gives an opportunity to optimize by merging adjacent changes. - * It's a little bit like the Undo/Redo log in Files, but Point 3) argues for a - * separate implementation. To do this well, we use Replace as well as - * Insert and Delete - */ - -typedef struct Buflog Buflog; -struct Buflog -{ - short type; /* Replace, Filename */ - uint q0; /* location of change (unused in f) */ - uint nd; /* # runes to delete */ - uint nr; /* # runes in string or file name */ -}; - -enum -{ - Buflogsize = sizeof(Buflog)/sizeof(Rune), -}; - -/* - * Minstring shouldn't be very big or we will do lots of I/O for small changes. - * Maxstring is RBUFSIZE so we can fbufalloc() once and not realloc elog.r. - */ -enum -{ - Minstring = 16, /* distance beneath which we merge changes */ - Maxstring = RBUFSIZE, /* maximum length of change we will merge into one */ -}; - -void -eloginit(File *f) -{ - if(f->elog.type != Empty) - return; - f->elog.type = Null; - if(f->elogbuf == nil) - f->elogbuf = emalloc(sizeof(Buffer)); - if(f->elog.r == nil) - f->elog.r = fbufalloc(); - bufreset(f->elogbuf); -} - -void -elogclose(File *f) -{ - if(f->elogbuf){ - bufclose(f->elogbuf); - free(f->elogbuf); - f->elogbuf = nil; - } -} - -void -elogreset(File *f) -{ - f->elog.type = Null; - f->elog.nd = 0; - f->elog.nr = 0; -} - -void -elogterm(File *f) -{ - elogreset(f); - if(f->elogbuf) - bufreset(f->elogbuf); - f->elog.type = Empty; - fbuffree(f->elog.r); - f->elog.r = nil; - warned = FALSE; -} - -void -elogflush(File *f) -{ - Buflog b; - - b.type = f->elog.type; - b.q0 = f->elog.q0; - b.nd = f->elog.nd; - b.nr = f->elog.nr; - switch(f->elog.type){ - default: - warning(nil, "unknown elog type 0x%ux\n", f->elog.type); - break; - case Null: - break; - case Insert: - case Replace: - if(f->elog.nr > 0) - bufinsert(f->elogbuf, f->elogbuf->nc, f->elog.r, f->elog.nr); - /* fall through */ - case Delete: - bufinsert(f->elogbuf, f->elogbuf->nc, (Rune*)&b, Buflogsize); - break; - } - elogreset(f); -} - -void -elogreplace(File *f, int q0, int q1, Rune *r, int nr) -{ - uint gap; - - if(q0==q1 && nr==0) - return; - eloginit(f); - if(f->elog.type!=Null && q0elog.q0){ - if(warned++ == 0) - warning(nil, Wsequence); - elogflush(f); - } - /* try to merge with previous */ - gap = q0 - (f->elog.q0+f->elog.nd); /* gap between previous and this */ - if(f->elog.type==Replace && f->elog.nr+gap+nr 0){ - bufread(f, f->elog.q0+f->elog.nd, f->elog.r+f->elog.nr, gap); - f->elog.nr += gap; - } - f->elog.nd += gap + q1-q0; - runemove(f->elog.r+f->elog.nr, r, nr); - f->elog.nr += nr; - return; - } - } - elogflush(f); - f->elog.type = Replace; - f->elog.q0 = q0; - f->elog.nd = q1-q0; - f->elog.nr = nr; - if(nr > RBUFSIZE) - editerror("internal error: replacement string too large(%d)", nr); - runemove(f->elog.r, r, nr); -} - -void -eloginsert(File *f, int q0, Rune *r, int nr) -{ - int n; - - if(nr == 0) - return; - eloginit(f); - if(f->elog.type!=Null && q0elog.q0){ - if(warned++ == 0) - warning(nil, Wsequence); - elogflush(f); - } - /* try to merge with previous */ - if(f->elog.type==Insert && q0==f->elog.q0 && f->elog.nr+nrelog.r+f->elog.nr, r, nr); - f->elog.nr += nr; - return; - } - while(nr > 0){ - elogflush(f); - f->elog.type = Insert; - f->elog.q0 = q0; - n = nr; - if(n > RBUFSIZE) - n = RBUFSIZE; - f->elog.nr = n; - runemove(f->elog.r, r, n); - r += n; - nr -= n; - } -} - -void -elogdelete(File *f, int q0, int q1) -{ - if(q0 == q1) - return; - eloginit(f); - if(f->elog.type!=Null && q0elog.q0+f->elog.nd){ - if(warned++ == 0) - warning(nil, Wsequence); - elogflush(f); - } - /* try to merge with previous */ - if(f->elog.type==Delete && f->elog.q0+f->elog.nd==q0){ - f->elog.nd += q1-q0; - return; - } - elogflush(f); - f->elog.type = Delete; - f->elog.q0 = q0; - f->elog.nd = q1-q0; -} - -#define tracelog 0 -void -elogapply(File *f) -{ - Buflog b; - Rune *buf; - uint i, n, up, mod; - uint tq0, tq1; - Buffer *log; - Text *t; - int owner; - - elogflush(f); - log = f->elogbuf; - t = f->curtext; - - buf = fbufalloc(); - mod = FALSE; - - owner = 0; - if(t->w){ - owner = t->w->owner; - if(owner == 0) - t->w->owner = 'E'; - } - - /* - * The edit commands have already updated the selection in t->q0, t->q1, - * but using coordinates relative to the unmodified buffer. As we apply the log, - * we have to update the coordinates to be relative to the modified buffer. - * Textinsert and textdelete will do this for us; our only work is to apply the - * convention that an insertion at t->q0==t->q1 is intended to select the - * inserted text. - */ - - /* - * We constrain the addresses in here (with textconstrain()) because - * overlapping changes will generate bogus addresses. We will warn - * about changes out of sequence but proceed anyway; here we must - * keep things in range. - */ - - while(log->nc > 0){ - up = log->nc-Buflogsize; - bufread(log, up, (Rune*)&b, Buflogsize); - switch(b.type){ - default: - fprint(2, "elogapply: 0x%ux\n", b.type); - abort(); - break; - - case Replace: - if(tracelog) - warning(nil, "elog replace %d %d (%d %d)\n", - b.q0, b.q0+b.nd, t->q0, t->q1); - if(!mod){ - mod = TRUE; - filemark(f); - } - textconstrain(t, b.q0, b.q0+b.nd, &tq0, &tq1); - textdelete(t, tq0, tq1, TRUE); - up -= b.nr; - for(i=0; i RBUFSIZE) - n = RBUFSIZE; - bufread(log, up+i, buf, n); - textinsert(t, tq0+i, buf, n, TRUE); - } - if(t->q0 == b.q0 && t->q1 == b.q0) - t->q1 += b.nr; - break; - - case Delete: - if(tracelog) - warning(nil, "elog delete %d %d (%d %d)\n", - b.q0, b.q0+b.nd, t->q0, t->q1); - if(!mod){ - mod = TRUE; - filemark(f); - } - textconstrain(t, b.q0, b.q0+b.nd, &tq0, &tq1); - textdelete(t, tq0, tq1, TRUE); - break; - - case Insert: - if(tracelog) - warning(nil, "elog insert %d %d (%d %d)\n", - b.q0, b.q0+b.nr, t->q0, t->q1); - if(!mod){ - mod = TRUE; - filemark(f); - } - textconstrain(t, b.q0, b.q0, &tq0, &tq1); - up -= b.nr; - for(i=0; i RBUFSIZE) - n = RBUFSIZE; - bufread(log, up+i, buf, n); - textinsert(t, tq0+i, buf, n, TRUE); - } - if(t->q0 == b.q0 && t->q1 == b.q0) - t->q1 += b.nr; - break; - -/* case Filename: - f->seq = u.seq; - fileunsetname(f, epsilon); - f->mod = u.mod; - up -= u.n; - free(f->name); - if(u.n == 0) - f->name = nil; - else - f->name = runemalloc(u.n); - bufread(delta, up, f->name, u.n); - f->nname = u.n; - break; -*/ - } - bufdelete(log, up, log->nc); - } - fbuffree(buf); - elogterm(f); - - /* - * Bad addresses will cause bufload to crash, so double check. - * If changes were out of order, we expect problems so don't complain further. - */ - if(t->q0 > f->nc || t->q1 > f->nc || t->q0 > t->q1){ - if(!warned) - warning(nil, "elogapply: can't happen %d %d %d\n", t->q0, t->q1, f->nc); - t->q1 = min(t->q1, f->nc); - t->q0 = min(t->q0, t->q1); - } - - if(t->w) - t->w->owner = owner; -} diff --git a/exec.6 b/exec.6 deleted file mode 100644 index 962bfa38fa91159e9ffa4ed84ae0f0f41fadb934..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 67246 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