From c8b6342d3c2a167dec16931815926e9e4387e7ef Mon Sep 17 00:00:00 2001 From: rsc Date: Thu, 13 Jan 2005 04:49:19 +0000 Subject: Many small edits. --- src/cmd/9660/dump9660.c | 6 +- src/cmd/acid/main.c | 2 +- src/cmd/acme/acme.c | 4 +- src/cmd/bc.y | 2 +- src/cmd/calendar.c | 2 +- src/cmd/dict/dict.h | 3 + src/cmd/dict/mkfile | 2 +- src/cmd/dict/roget.c | 147 ++++++++++++++++++++++++++++++++++++++++++++++++ src/cmd/dict/utils.c | 3 + src/cmd/draw/iconv.c | 102 +++++++++++++++++++++++++++++++++ src/cmd/ed.c | 2 +- src/cmd/grep/main.c | 3 + src/cmd/import.c | 2 +- src/cmd/map/map.c | 3 +- src/cmd/map/mapdemo.rc | 2 +- src/cmd/mk/mkfile.test | 4 +- src/cmd/mk/parse.c | 37 ++++++------ src/cmd/mk/shell.c | 2 + src/cmd/mkfile | 2 +- src/cmd/news.c | 2 +- src/cmd/plumb/plumber.c | 4 +- src/cmd/rc/exec.c | 1 + src/cmd/rm.c | 10 +++- src/cmd/sam/plan9.c | 2 +- src/cmd/sort.c | 2 +- 25 files changed, 306 insertions(+), 45 deletions(-) create mode 100644 src/cmd/dict/roget.c create mode 100644 src/cmd/draw/iconv.c (limited to 'src/cmd') diff --git a/src/cmd/9660/dump9660.c b/src/cmd/9660/dump9660.c index b66e3644..f82ff30f 100644 --- a/src/cmd/9660/dump9660.c +++ b/src/cmd/9660/dump9660.c @@ -21,9 +21,9 @@ void usage(void) { if(mk9660) - fprint(2, "usage: disk/mk9660 [-D:] [-9cjr] [-b bootfile] [-p proto] [-s src] cdimage\n"); + fprint(2, "usage: mk9660 [-D:] [-9cjr] [-b bootfile] [-p proto] [-s src] cdimage\n"); else - fprint(2, "usage: disk/dump9660 [-D:] [-9cjr] [-m maxsize] [-n now] [-p proto] [-s src] cdimage\n"); + fprint(2, "usage: dump9660 [-D:] [-9cjr] [-m maxsize] [-n now] [-p proto] [-s src] cdimage\n"); exits("usage"); } @@ -42,7 +42,7 @@ main(int argc, char **argv) fix = 0; status = nil; memset(&info, 0, sizeof info); - proto = "/sys/lib/sysconfig/proto/allproto"; + proto = unsharp("#9/proto/allproto"); src = "./"; info.volumename = atom("9CD"); diff --git a/src/cmd/acid/main.c b/src/cmd/acid/main.c index 8f3fbb81..415d5e30 100644 --- a/src/cmd/acid/main.c +++ b/src/cmd/acid/main.c @@ -357,7 +357,7 @@ userinit(void) sprint(buf, "#9/acid/%s", mach->name); loadmodule(unsharp(buf)); - p = getenv("home"); + p = getenv("HOME"); if(p != 0) { sprint(buf, "%s/lib/acid", p); silent = 1; diff --git a/src/cmd/acme/acme.c b/src/cmd/acme/acme.c index c3b0fbac..917aefc1 100644 --- a/src/cmd/acme/acme.c +++ b/src/cmd/acme/acme.c @@ -123,9 +123,7 @@ threadmain(int argc, char *argv[]) quotefmtinstall(); cputype = getenv("cputype"); objtype = getenv("objtype"); - home = getenv("home"); - if(home == nil) - home = getenv("HOME"); + home = getenv("HOME"); p = getenv("tabstop"); if(p != nil){ maxtab = strtoul(p, nil, 0); diff --git a/src/cmd/bc.y b/src/cmd/bc.y index 1bd638e2..fdb09de9 100644 --- a/src/cmd/bc.y +++ b/src/cmd/bc.y @@ -961,7 +961,7 @@ main(int argc, char **argv) if(lflag) { argv--; argc++; - argv[1] = "/sys/lib/bclib"; + argv[1] = unsharp("#9/lib/bclib"); } if(cflag) { yyinit(argc, argv); diff --git a/src/cmd/calendar.c b/src/cmd/calendar.c index 6202c5a3..ba86ab36 100644 --- a/src/cmd/calendar.c +++ b/src/cmd/calendar.c @@ -75,7 +75,7 @@ main(int argc, char *argv[]) for(i=0; i +#include +#include +#include +#include "dict.h" + +/* Roget's Thesaurus from project Gutenberg */ + +/* static long Last = 0; */ + +void +rogetprintentry(Entry e, int cmd) +{ + int spc; + char c, *p; + + spc = 0; + p = e.start; + + if(cmd == 'h'){ + while(!isspace(*p) && p < e.end) + p++; + while(strncmp(p, " -- ", 4) != 0 && p < e.end){ + while(isspace(*p) && p < e.end) + p++; + if (*p == '[' || *p == '{'){ + c = (*p == '[')? ']': '}'; + while(*p != c && p < e.end) + p++; + p++; + continue; + } + if (isdigit(*p) || ispunct(*p)){ + while(!isspace(*p) && p < e.end) + p++; + continue; + } + + + if (isspace(*p)) + spc = 1; + else + if (spc){ + outchar(' '); + spc = 0; + } + + while(!isspace(*p) && p < e.end) + outchar(*p++); + } + return; + } + + while(p < e.end && !isspace(*p)) + p++; + while(p < e.end && isspace(*p)) + p++; + + while (p < e.end){ + if (p < e.end -4 && strncmp(p, " -- ", 4) == 0){ /* first line */ + outnl(2); + p += 4; + spc = 0; + } + + if (p < e.end -2 && strncmp(p, "[ ", 4) == 0){ /* twiddle layout */ + outchars(" ["); + continue; + } + + if (p < e.end -4 && strncmp(p, "&c (", 4) == 0){ /* usefull xref */ + if (spc) + outchar(' '); + outchar('/'); + while(p < e.end && *p != '(') + p++; + p++; + while(p < e.end && *p != ')') + outchar(*p++); + p++; + while(p < e.end && isspace(*p)) + p++; + while(p < e.end && isdigit(*p)) + p++; + outchar('/'); + continue; + } + + if (p < e.end -3 && strncmp(p, "&c ", 3) == 0){ /* less usefull xref */ + while(p < e.end && !isdigit(*p)) + p++; + while(p < e.end && isdigit(*p)) + p++; + continue; + } + + if (*p == '\n' && p < (e.end -1)){ /* their newlines */ + spc = 0; + p++; + if (isspace(*p)){ /* their continuation line */ + while (isspace(*p)) + p++; + p--; + } + else{ + outnl(2); + } + } + if (spc && *p != ';' && *p != '.' && + *p != ',' && !isspace(*p)){ /* drop spaces before punct */ + spc = 0; + outchar(' '); + } + if (isspace(*p)) + spc = 1; + else + outchar(*p); + p++; + } + outnl(0); +} + +long +rogetnextoff(long fromoff) +{ + int i; + vlong l; + char *p; + + Bseek(bdict, fromoff, 0); + Brdline(bdict, '\n'); + while ((p = Brdline(bdict, '\n')) != nil){ + l = Blinelen(bdict); + if (!isdigit(*p)) + continue; + for (i = 0; i < l-4; i++) + if (strncmp(p+i, " -- ", 4) == 0) + return Boffset(bdict)-l; + } + return Boffset(bdict); +} + +void +rogetprintkey(void) +{ + Bprint(bout, "No pronunciation key.\n"); +} diff --git a/src/cmd/dict/utils.c b/src/cmd/dict/utils.c index 0920dc27..b5baab92 100644 --- a/src/cmd/dict/utils.c +++ b/src/cmd/dict/utils.c @@ -16,6 +16,9 @@ Dict dicts[] = { {"thesaurus", "Collins Thesaurus", "#9/dict/thesaurus", "#9/dict/thesindex", thesnextoff, thesprintentry, thesprintkey}, + {"roget", "Project Gutenberg Roget's Thesaurus", + "#9/dict/roget", "#9/dict/rogetindex", + rogetnextoff, rogetprintentry, rogetprintkey}, {"ce", "Gendai Chinese->English", "#9/dict/world/sansdata/sandic24.dat", diff --git a/src/cmd/draw/iconv.c b/src/cmd/draw/iconv.c new file mode 100644 index 00000000..5a955200 --- /dev/null +++ b/src/cmd/draw/iconv.c @@ -0,0 +1,102 @@ +#include +#include +#include +#include + +void +usage(void) +{ + fprint(2, "usage: iconv [-u] [-c chanstr] [file]\n"); + exits("usage"); +} + +void +writeuncompressed(int fd, Memimage *m) +{ + char chanstr[32]; + int bpl, y, j; + uchar *buf; + + if(chantostr(chanstr, m->chan) == nil) + sysfatal("can't convert channel descriptor: %r"); + fprint(fd, "%11s %11d %11d %11d %11d ", + chanstr, m->r.min.x, m->r.min.y, m->r.max.x, m->r.max.y); + + bpl = bytesperline(m->r, m->depth); + buf = malloc(bpl); + if(buf == nil) + sysfatal("malloc failed: %r"); + for(y=m->r.min.y; yr.max.y; y++){ + j = unloadmemimage(m, Rect(m->r.min.x, y, m->r.max.x, y+1), buf, bpl); + if(j != bpl) + sysfatal("image unload failed: %r"); + if(write(fd, buf, bpl) != bpl) + sysfatal("write failed: %r"); + } + free(buf); +} + +void +main(int argc, char *argv[]) +{ + char *tostr, *file; + int fd, uncompressed; + ulong tochan; + Memimage *m, *n; + + tostr = nil; + uncompressed = 0; + ARGBEGIN{ + case 'c': + tostr = EARGF(usage()); + break; + case 'u': + uncompressed = 1; + break; + default: + usage(); + }ARGEND + + memimageinit(); + + file = ""; + m = nil; + + switch(argc){ + case 0: + m = readmemimage(0); + break; + case 1: + file = argv[0]; + fd = open(file, OREAD); + if(fd < 0) + sysfatal("can't open %s: %r", file); + m = readmemimage(fd); + close(fd); + break; + default: + usage(); + } + + if(m == nil) + sysfatal("can't read %s: %r", file); + + if(tostr == nil) + tochan = m->chan; + else{ + tochan = strtochan(tostr); + if(tochan == 0) + sysfatal("bad channel descriptor '%s'", tostr); + } + + n = allocmemimage(m->r, tochan); + if(n == nil) + sysfatal("can't allocate new image: %r"); + + memimagedraw(n, n->r, m, m->r.min, nil, ZP, S); + if(uncompressed) + writeuncompressed(1, n); + else + writememimage(1, n); + exits(nil); +} diff --git a/src/cmd/ed.c b/src/cmd/ed.c index d947d899..3af90f6f 100644 --- a/src/cmd/ed.c +++ b/src/cmd/ed.c @@ -146,7 +146,7 @@ main(int argc, char *argv[]) vflag = 0; } if(oflag) { - p1 = "/fd/1"; + p1 = "/dev/stdout"; p2 = savedfile; while(*p2++ = *p1++) ; diff --git a/src/cmd/grep/main.c b/src/cmd/grep/main.c index 004d1b72..e32f89a5 100644 --- a/src/cmd/grep/main.c +++ b/src/cmd/grep/main.c @@ -21,6 +21,9 @@ main(int argc, char *argv[]) flags[ARGC()]++; break; + case 'E': /* ignore, turns gnu grep into egrep */ + break; + case 'e': flags['e']++; lineno = 0; diff --git a/src/cmd/import.c b/src/cmd/import.c index 88d7c532..f084b8e6 100644 --- a/src/cmd/import.c +++ b/src/cmd/import.c @@ -32,7 +32,7 @@ enum void usage(void) { - fprint(2, "usage: %s [-s service] [-n remote-ns] [-fd] [-p remote-prog] remote-system\n", argv0); + fprint(2, "usage: %s [-df] [-s service] [-n remote-ns] [-p remote-prog] remote-system\n", argv0); exits("usage"); } diff --git a/src/cmd/map/map.c b/src/cmd/map/map.c index e8dd3ab3..8d4dbfc2 100644 --- a/src/cmd/map/map.c +++ b/src/cmd/map/map.c @@ -21,7 +21,7 @@ char *mapindex(char *); proj projection; -static char *mapdir = "/lib/map"; /* default map directory */ +static char *mapdir = "#9/map"; /* default map directory */ struct file { char *name; char *color; @@ -150,6 +150,7 @@ main(int argc, char *argv[]) double dd; if(sizeof(short)!=2) abort(); /* getshort() won't work */ + mapdir = unsharp(mapdir); s = getenv("MAP"); if(s) file[0].name = s; diff --git a/src/cmd/map/mapdemo.rc b/src/cmd/map/mapdemo.rc index 033969ab..24be3e1f 100755 --- a/src/cmd/map/mapdemo.rc +++ b/src/cmd/map/mapdemo.rc @@ -9,7 +9,7 @@ fn demo {proj=$1; shift; echo t $type echo 'm -8192 -8192' echo t $proj - $label - MAP=world MAPDIR=/lib/map map $proj $* -s -d 5 + MAP=world MAPDIR=$PLAN9/map map $proj $* -s -d 5 } sleep 5 } diff --git a/src/cmd/mk/mkfile.test b/src/cmd/mk/mkfile.test index b5bd6dbb..8a4e4b96 100644 --- a/src/cmd/mk/mkfile.test +++ b/src/cmd/mk/mkfile.test @@ -1,9 +1,9 @@ -|$PLAN9/bin/rc +MKSHELL=$PLAN9/bin/rc use-rc:V: for(i in a b c) echo $i -|/bin/sh +MKSHELL=/bin/sh use-sh:V: for i in a b c do diff --git a/src/cmd/mk/parse.c b/src/cmd/mk/parse.c index 2d1816b9..48bad3d8 100644 --- a/src/cmd/mk/parse.c +++ b/src/cmd/mk/parse.c @@ -91,18 +91,18 @@ cp = wtos(tail, ' '); print("assign %s to %s\n", head->s, cp); free(cp); */ setvar(head->s, (void *) tail); symlook(head->s, S_WESET, (void *)""); + if(strcmp(head->s, "MKSHELL") == 0){ + if((err = setshell(tail)) != nil){ + SYNERR(hline); + fprint(2, "%s\n", err); + Exit(); + break; + } + } } if(attr) symlook(head->s, S_NOEXPORT, (void *)""); break; - case 'S': - if((err = setshell(tail)) != nil){ - SYNERR(hline); - fprint(2, "%s\n", err); - Exit(); - break; - } - break; default: SYNERR(hline); fprint(2, "expected one of :<=\n"); @@ -144,19 +144,14 @@ rhead(char *line, Word **h, Word **t, int *attr, char **prog) int n; Word *w; - if(*line == '|'){ - sep = 'S'; /* shell */ - p = line+1; - }else{ - p = shellt->charin(line,":=<"); - if(p == 0) - return('?'); - sep = *p; - *p++ = 0; - if(sep == '<' && *p == '|'){ - sep = '|'; - p++; - } + p = shellt->charin(line,":=<"); + if(p == 0) + return('?'); + sep = *p; + *p++ = 0; + if(sep == '<' && *p == '|'){ + sep = '|'; + p++; } *attr = 0; *prog = 0; diff --git a/src/cmd/mk/shell.c b/src/cmd/mk/shell.c index a4ac3f93..dd41ad12 100644 --- a/src/cmd/mk/shell.c +++ b/src/cmd/mk/shell.c @@ -41,6 +41,7 @@ initshell(void) { shellcmd = stow(shells[0]->name); shellt = shells[0]; + setvar("MKSHELL", shellcmd); } void @@ -72,5 +73,6 @@ popshell(void) shellstack = s->next; shellt = s->t; shellcmd = s->w; + setvar("MKSHELL", shellcmd); free(s); } diff --git a/src/cmd/mkfile b/src/cmd/mkfile index 42ca0e9f..c50d4e18 100644 --- a/src/cmd/mkfile +++ b/src/cmd/mkfile @@ -1,6 +1,6 @@ <$PLAN9/src/mkhdr -TARG=`ls *.[cy] | grep -v "\.tab\.c$" | sed 's/\.[cy]//'` +TARG=`ls *.[cy] | egrep -v "\.tab\.c$" | sed 's/\.[cy]//'` <$PLAN9/src/mkmany diff --git a/src/cmd/news.c b/src/cmd/news.c index c6a99a30..bdffaa39 100644 --- a/src/cmd/news.c +++ b/src/cmd/news.c @@ -101,7 +101,7 @@ read_dir(int update) n_count = 0; n_list = malloc(NINC*sizeof(File)); na = NINC; - home = getenv("home"); + home = getenv("HOME"); if(home) { sprint(newstime, TFILE, home); d = dirstat(newstime); diff --git a/src/cmd/plumb/plumber.c b/src/cmd/plumb/plumber.c index 53847cd4..2debf49b 100644 --- a/src/cmd/plumb/plumber.c +++ b/src/cmd/plumb/plumber.c @@ -43,9 +43,7 @@ threadmain(int argc, char *argv[]) }ARGEND user = getuser(); - home = getenv("home"); - if(home == nil) - home = getenv("HOME"); + home = getenv("HOME"); if(user==nil || home==nil) error("can't initialize $user or $home: %r"); if(plumbfile == nil){ diff --git a/src/cmd/rc/exec.c b/src/cmd/rc/exec.c index 9ab7c29d..dfd4e370 100644 --- a/src/cmd/rc/exec.c +++ b/src/cmd/rc/exec.c @@ -90,6 +90,7 @@ var *newvar(char *name, var *next) v->changed=0; v->fnchanged=0; v->next=next; + v->changefn = 0; return v; } /* diff --git a/src/cmd/rm.c b/src/cmd/rm.c index e76fdb0a..f71fe989 100644 --- a/src/cmd/rm.c +++ b/src/cmd/rm.c @@ -1,4 +1,5 @@ #include +#include #include #define rmdir p9rmdir @@ -16,6 +17,13 @@ err(char *f) } } +int +issymlink(char *name) +{ + struct stat s; + return lstat(name, &s) >= 0 && S_ISLNK(s.st_mode); +} + /* * f is a non-empty directory. Remove its contents and then it. */ @@ -48,7 +56,7 @@ rmdir(char *f) ndir = 0; for(i=0; i= nelem(file)-20) { -- cgit v1.2.3