URI: 
       tupdate lucida - plan9port - [fork] Plan 9 from user space
  HTML git clone git://src.adamsgaard.dk/plan9port
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
   DIR commit 17157e4aa85baea6c1503e2c95d98ed66a1596f1
   DIR parent 7bd7fd2f4f6fb39400f6f64feb7ec9cba89cf3a3
  HTML Author: rsc <devnull@localhost>
       Date:   Mon, 20 Mar 2006 02:25:59 +0000
       
       update lucida
       
       Diffstat:
         M LICENSE                             |      13 +++----------
         M bin/9c                              |       1 +
         M dist/deb.html                       |       5 +++++
         M dist/mkfilelist                     |       2 +-
         M man/fonts                           |       2 +-
         M src/cmd/draw/img.c                  |       2 ++
         M src/cmd/page/filter.c               |       1 +
         M src/cmd/page/gfx.c                  |       4 ++++
         M src/cmd/page/gs.c                   |      16 +++++++---------
         M src/cmd/page/mkfile                 |       2 +-
         M src/cmd/page/nrotate.c              |       1 +
         M src/cmd/page/page.c                 |      59 ++-----------------------------
         M src/cmd/page/page.h                 |       5 ++---
         M src/cmd/page/pdf.c                  |       9 +++++----
         M src/cmd/page/ps.c                   |       3 ++-
         M src/cmd/page/rotate.c               |      29 +++++++++++++++++++++++++++++
         M src/cmd/page/util.c                 |       1 +
         M src/cmd/page/view.c                 |      82 +++++++++++++++++++++++++++++--
         M src/cmd/rc/lex.c                    |       2 +-
         M src/cmd/sam/io.c                    |       4 +++-
         M src/cmd/sam/sam.c                   |       6 +++++-
         M src/cmd/sam/sam.h                   |       1 +
         M src/cmd/upas/smtp/smtp.c            |       5 +++--
         M src/mkfile                          |       1 +
       
       24 files changed, 160 insertions(+), 96 deletions(-)
       ---
   DIR diff --git a/LICENSE b/LICENSE
       t@@ -6,16 +6,9 @@ under simpler BSD-like boilerplates.  See the LICENSE files in those
        directories.  There are other exceptions, also marked with LICENSE files
        in their directories.
        
       -The bitmap fonts in the font/lucida directory are copyright B&H Inc. and Y&Y Inc.
       -and distributed under the following exception to the Lucent license:
       -
       -   No right is granted to create derivative works of or
       -   to redistribute (other than with the Plan 9 Operating System)
       -   the screen imprinter fonts identified in subdirectory
       -   font/lucida.  This directory contains material copyrights by
       -   B&H Inc. and Y&Y Inc.
       -
       -(Of course, X11 already distributes non-Unicode versions of these fonts.)
       +The bitmap fonts in the font/luc, font/lucm, font/lucsans, and font/pelm
       +directory are copyright B&H Inc. and distributed under more restricted
       +terms under agreement with B&H.  See the NOTICE file in those directories.
        
        ===================================================================
        
   DIR diff --git a/bin/9c b/bin/9c
       t@@ -15,6 +15,7 @@ usegcc()
                        -Wno-sign-compare \
                        -Wno-unknown-pragmas \
                        -fno-omit-frame-pointer \
       +                -fno-inline-functions-called-once \
                "
                # want to put -fno-optimize-sibling-calls here but
                # that option only works with gcc3+ it seems
   DIR diff --git a/dist/deb.html b/dist/deb.html
       t@@ -26,6 +26,11 @@ Edit ./^$/,s/<Table/<table border=0 cellspacing=0 cellpadding=0 width=100%/g
            <table border=0 cellspacing=0 cellpadding=0 width=100%><tr height=20><td></table>
        
            Here are packages built for the Debian distribution of Linux.
       +    <br>
       +    Newer packages can be had by adding
       +    <pre>
       +    deb http://swtch.com/debian/ testing main</pre> to your 
       +    <tt>/etc/apt/sources.list</tt>.
        
            <table border=0 cellspacing=0 cellpadding=0 width=100%><tr height=10><td></table>
            <table border=0 cellspacing=0 cellpadding=0 width=100%>
   DIR diff --git a/dist/mkfilelist b/dist/mkfilelist
       t@@ -67,7 +67,7 @@ awk -vplan9'='$PLAN9 '
        
                /^font\/(big5|gb|jis|naga10|shinonome)/ { cat("font-asian") }
                /^font\/LICENSE/ { cat("font-bh") }
       -        /^font\/(lucida|lucidasans|lucm|pelm)\// { cat("font-bh") }
       +        /^font\/(luc|lucsans|lucm|pelm)\// { cat("font-bh") }
                /^font\/(MAP|fixed|misc|sample|smiley)/ { cat("font-core") }
                /^font\/(palatino|times|special)/ { cat("font-proof") }
                /^font\// { cat("font-core") }
   DIR diff --git a/man/fonts b/man/fonts
       t@@ -1,4 +1,4 @@
       -# mkfile rules to get fonts in Lucida Sans.
       +# mkfile rules to set fonts
        # if you want to use Times, change these next lines to
        # MAN=mantimes
        # FONTS=''
   DIR diff --git a/src/cmd/draw/img.c b/src/cmd/draw/img.c
       t@@ -50,6 +50,7 @@ main(int argc, char **argv)
        
                if((image=readimage(display, fd, 0)) == nil)
                        sysfatal("readimage: %r");
       +        sleep(1000);
        
                drawresizewindow(Rect(0,0,Dx(image->r),Dy(image->r)));
        
       t@@ -60,6 +61,7 @@ main(int argc, char **argv)
                        case Ekeyboard:
                                if(e.kbdc == 'q' || e.kbdc == 0x7F)
                                        exits(nil);
       +                        eresized(0);
                                break;
                        case Emouse:
                                break;
   DIR diff --git a/src/cmd/page/filter.c b/src/cmd/page/filter.c
       t@@ -1,6 +1,7 @@
        #include <u.h>
        #include <libc.h>
        #include <draw.h>
       +#include <cursor.h>
        #include <event.h>
        #include <bio.h>
        #include "page.h"
   DIR diff --git a/src/cmd/page/gfx.c b/src/cmd/page/gfx.c
       t@@ -5,6 +5,7 @@
        #include <u.h>
        #include <libc.h>
        #include <draw.h>
       +#include <cursor.h>
        #include <event.h>
        #include <bio.h>
        #include "page.h"
       t@@ -71,6 +72,8 @@ static Image*        convert(Graphic*);
        static Image*        gfxdrawpage(Document *d, int page);
        static char*        gfxpagename(Document*, int);
        static int        spawnrc(char*, uchar*, int);
       +static void        waitrc(void);
       +static int        spawnpost(int);
        static int        addpage(Document*, char*);
        static int        rmpage(Document*, int);
        static int        genaddpage(Document*, char*, uchar*, int);
       t@@ -97,6 +100,7 @@ initgfx(Biobuf *b, int argc, char **argv, uchar *buf, int nbuf)
                int i;
        
                USED(b);
       +
                doc = emalloc(sizeof(*doc));
                gfx = emalloc(sizeof(*gfx));
                gfx->g = nil;
   DIR diff --git a/src/cmd/page/gs.c b/src/cmd/page/gs.c
       t@@ -7,6 +7,7 @@
        #include <u.h>
        #include <libc.h>
        #include <draw.h>
       +#include <cursor.h>
        #include <event.h>
        #include <bio.h>
        #include "page.h"
       t@@ -134,7 +135,7 @@ spawnmonitor(int fd)
        }
        
        int 
       -spawngs(GSInfo *g)
       +spawngs(GSInfo *g, char *safer)
        {
                char *args[16];
                char tb[32], gb[32];
       t@@ -158,7 +159,7 @@ spawngs(GSInfo *g)
                nargs = 0;
                args[nargs++] = "gs";
                args[nargs++] = "-dNOPAUSE";
       -        args[nargs++] = "-dSAFER";
       +        args[nargs++] = safer;
                args[nargs++] = "-sDEVICE=plan9";
                args[nargs++] = "-sOutputFile=/fd/3";
                args[nargs++] = "-dQUIET";
       t@@ -268,14 +269,11 @@ setdim(GSInfo *gs, Rectangle bbox, int ppi, int landscape)
                if(!Dx(bbox))
                        bbox = Rect(0, 0, 612, 792);        /* 8½×11 */
        
       -        switch(landscape){
       -        case 0:
       -                pbox = bbox;
       -                break;
       -        case 1:
       +        if(landscape)
                        pbox = Rect(bbox.min.y, bbox.min.x, bbox.max.y, bbox.max.x);
       -                break;
       -        }
       +        else
       +                pbox = bbox;
       +
                gscmd(gs, "/PageSize [%d %d]\n", Dx(pbox), Dy(pbox));
                gscmd(gs, "/Margins [%d %d]\n", -pbox.min.x, -pbox.min.y);
                gscmd(gs, "currentdevice putdeviceprops pop\n");
   DIR diff --git a/src/cmd/page/mkfile b/src/cmd/page/mkfile
       t@@ -14,7 +14,7 @@ OFILES=\
                util.$O\
                view.$O\
        
       -<$PLAN9/src//mkone
       +<$PLAN9/src/mkone
        
        pdfprolog.c: pdfprolog.ps
                cat pdfprolog.ps | sed 's/.*/"&\\n"/g' >pdfprolog.c
   DIR diff --git a/src/cmd/page/nrotate.c b/src/cmd/page/nrotate.c
       t@@ -15,6 +15,7 @@
        #include <libc.h>
        #include <bio.h>
        #include <draw.h>
       +#include <cursor.h>
        #include <event.h>
        #include "page.h"
        
   DIR diff --git a/src/cmd/page/page.c b/src/cmd/page/page.c
       t@@ -1,6 +1,7 @@
        #include <u.h>
        #include <libc.h>
        #include <draw.h>
       +#include <cursor.h>
        #include <event.h>
        #include <bio.h>
        #include "page.h"
       t@@ -19,43 +20,6 @@ int wctlfd = -1;
        int stdinfd;
        int truecolor;
        int imagemode;
       -int notewatcher;
       -int notegp;
       -
       -int
       -watcher(void *v, char *x)
       -{
       -        USED(v);
       -
       -        if(strcmp(x, "die") != 0)
       -                postnote(PNGROUP, notegp, x);
       -        _exits(0);
       -        return 0;
       -}
       -
       -int
       -bell(void *u, char *x)
       -{
       -        if(x && strcmp(x, "hangup") == 0)
       -                _exits(0);
       -
       -        if(x && strstr(x, "die") == nil)
       -                fprint(2, "postnote %d: %s\n", getpid(), x);
       -
       -        /* alarms come from the gs monitor */
       -        if(x && strstr(x, "alarm")){
       -                postnote(PNGROUP, getpid(), "die (gs error)");
       -                postnote(PNPROC, notewatcher, "die (gs error)");
       -        }
       -
       -        /* function mentions u so that it's in the stack trace */
       -        if((u == nil || u != x) && doabort)
       -                abort();
       -
       -/*        fprint(2, "exiting %d\n", getpid()); */
       -        wexits("note");
       -        return 0;
       -}
        
        static int
        afmt(Fmt *fmt)
       t@@ -128,23 +92,7 @@ main(int argc, char **argv)
                        usage();
                }ARGEND;
        
       -        notegp = getpid();
       -
       -        switch(notewatcher = fork()){
       -        case -1:
       -                sysfatal("fork\n");
       -                exits(0);
       -        default:
       -                break;
       -        case 0:
       -                atnotify(watcher, 1);
       -                for(;;)
       -                        sleep(1000);
       -                _exits(0);
       -        }
       -
                rfork(RFNOTEG);
       -        atnotify(bell, 1);
        
                readstdin = 0;
                if(imagemode == 0 && argc == 0){
       t@@ -159,6 +107,8 @@ main(int argc, char **argv)
        
                fmtinstall('R', Rfmt);
                fmtinstall('P', Pfmt);
       +        if(mknewwindow)
       +                newwin();
        
                if(readstdin){
                        b = nil;
       t@@ -229,8 +179,5 @@ main(int argc, char **argv)
        void
        wexits(char *s)
        {
       -        if(s && *s && strcmp(s, "note") != 0 && mknewwindow)
       -                sleep(10*1000);
       -        postnote(PNPROC, notewatcher, "die");
                exits(s);
        }
   DIR diff --git a/src/cmd/page/page.h b/src/cmd/page/page.h
       t@@ -1,5 +1,3 @@
       -#include <cursor.h>
       -
        typedef struct Document Document;
        
        struct Document {
       t@@ -44,6 +42,7 @@ extern int mknewwindow;
        
        void rot180(Image*);
        Image *rot90(Image*);
       +Image *rot270(Image*);
        Image *resample(Image*, Image*);
        
        /* ghostscript interface shared by ps, pdf */
       t@@ -57,7 +56,7 @@ struct GSInfo {
        };
        void        waitgs(GSInfo*);
        int        gscmd(GSInfo*, char*, ...);
       -int        spawngs(GSInfo*);
       +int        spawngs(GSInfo*, char*);
        void        setdim(GSInfo*, Rectangle, int, int);
        int        spawnwriter(GSInfo*, Biobuf*);
        Rectangle        screenrect(void);
   DIR diff --git a/src/cmd/page/pdf.c b/src/cmd/page/pdf.c
       t@@ -7,6 +7,7 @@
        #include <u.h>
        #include <libc.h>
        #include <draw.h>
       +#include <cursor.h>
        #include <event.h>
        #include <bio.h>
        #include "page.h"
       t@@ -97,14 +98,14 @@ initpdf(Biobuf *b, int argc, char **argv, uchar *buf, int nbuf)
                d->pagename = pdfpagename;
                d->fwdonly = 0;
        
       -        if(spawngs(&pdf->gs) < 0)
       +        if(spawngs(&pdf->gs, "-dDELAYSAFER") < 0)
                        return nil;
        
                gscmd(&pdf->gs, "%s", pdfprolog);
                waitgs(&pdf->gs);
        
                setdim(&pdf->gs, Rect(0,0,0,0), ppi, 0);
       -        gscmd(&pdf->gs, "(%s) (r) file pdfopen begin\n", fn);
       +        gscmd(&pdf->gs, "(%s) (r) file { DELAYSAFER { .setsafe } if } stopped pop pdfopen begin\n", fn);
                gscmd(&pdf->gs, "pdfpagecount PAGE==\n");
                p = Brdline(&pdf->gs.gsrd, '\n');
                npage = atoi(p);
       t@@ -121,11 +122,10 @@ initpdf(Biobuf *b, int argc, char **argv, uchar *buf, int nbuf)
                pdf->pagebbox = emalloc(sizeof(Rectangle)*npage);
                for(i=0; i<npage; i++) {
                        gscmd(&pdf->gs, "%d pdfgetpage\n", i+1);
       -                pdf->pagebbox[i] = pdfbbox(&pdf->gs);
       +                pdf->pagebbox[i] = pdfbbox(pdf);
                        if(Dx(pdf->pagebbox[i]) <= 0)
                                pdf->pagebbox[i] = bbox;
                }
       -
                return d;
        }
        
       t@@ -149,6 +149,7 @@ static char*
        pdfpagename(Document *d, int page)
        {
                static char str[15];
       +        
                USED(d);
                sprint(str, "p %d", page+1);
                return str;
   DIR diff --git a/src/cmd/page/ps.c b/src/cmd/page/ps.c
       t@@ -7,6 +7,7 @@
        #include <u.h>
        #include <libc.h>
        #include <draw.h>
       +#include <cursor.h>
        #include <event.h>
        #include <bio.h>
        #include <ctype.h>
       t@@ -348,7 +349,7 @@ Keepreading:
                d->fwdonly = ps->clueless = dumb;
                d->docname = argv[0];
        
       -        if(spawngs(&ps->gs) < 0)
       +        if(spawngs(&ps->gs, "-dSAFER") < 0)
                        return nil;
        
                if(!cantranslate)
   DIR diff --git a/src/cmd/page/rotate.c b/src/cmd/page/rotate.c
       t@@ -15,6 +15,7 @@
        #include <libc.h>
        #include <bio.h>
        #include <draw.h>
       +#include <cursor.h>
        #include <event.h>
        #include "page.h"
        
       t@@ -54,6 +55,7 @@ moveup(Image *im, Image *tmp, int a, int b, int c, int axis)
                drawop(tmp, tmp->r, im, nil, im->r.min, S);
        
                switch(axis){
       +        default:
                case Xaxis:
                        range = Rect(a, im->r.min.y,  c, im->r.max.y);
                        dr0 = range;
       t@@ -88,6 +90,7 @@ interlace(Image *im, Image *tmp, int axis, int n, Image *mask, int gran)
                r0 = im->r;
                r1 = im->r;
                switch(axis) {
       +        default:
                case Xaxis:
                        r0.max.x = n;
                        r1.min.x = n;
       t@@ -245,6 +248,31 @@ rot90(Image *im)
                return(tmp);
        }
        
       +/* rotates an image 270 degrees clockwise */
       +Image *
       +rot270(Image *im)
       +{
       +        Image *tmp;
       +        int i, j, dx, dy;
       +
       +        dx = Dx(im->r);
       +        dy = Dy(im->r);
       +        tmp = xallocimage(display, Rect(0, 0, dy, dx), im->chan, 0, DCyan);
       +        if(tmp == nil) {
       +                fprint(2, "out of memory during rot270: %r\n");
       +                wexits("memory");
       +        }
       +
       +        for(i = 0; i < dy; i++) {
       +                for(j = 0; j < dx; j++) {
       +                        drawop(tmp, Rect(i, j, i+1, j+1), im, nil, Pt(dx-(j+1), i), S);
       +                }
       +        }
       +        freeimage(im);
       +
       +        return(tmp);
       +}
       +
        /* from resample.c -- resize from → to using interpolation */
        
        
       t@@ -288,6 +316,7 @@ kaiser(double x, double tau, double alpha)
                return i0(alpha*sqrt(1-(x*x/(tau*tau))))/i0(alpha);
        }
        
       +
        void
        resamplex(uchar *in, int off, int d, int inx, uchar *out, int outx)
        {
   DIR diff --git a/src/cmd/page/util.c b/src/cmd/page/util.c
       t@@ -1,6 +1,7 @@
        #include <u.h>
        #include <libc.h>
        #include <draw.h>
       +#include <cursor.h>
        #include <event.h>
        #include <bio.h>
        #include "page.h"
   DIR diff --git a/src/cmd/page/view.c b/src/cmd/page/view.c
       t@@ -6,6 +6,7 @@
        #include <libc.h>
        #include <draw.h>
        #include <cursor.h>
       +#include <cursor.h>
        #include <event.h>
        #include <bio.h>
        #include <plumb.h>
       t@@ -16,7 +17,7 @@
        Document *doc;
        Image *im;
        int page;
       -int upside = 0;
       +int angle = 0;
        int showbottom = 0;                /* on the next showpage, move the image so the bottom is visible. */
        
        Rectangle ulrange;        /* the upper left corner of the image must be in this rectangle */
       t@@ -156,8 +157,17 @@ showpage(int page, Menu *m)
                        im = tmp;
                }
        
       -        if(upside)
       +        switch(angle){
       +        case 90:
       +                im = rot90(im);
       +                break;
       +        case 180:
                        rot180(im);
       +                break;
       +        case 270:
       +                im = rot270(im);
       +                break;
       +        }
        
                esetcursor(nil);
                if(showbottom){
       t@@ -390,7 +400,7 @@ viewer(Document *dd)
                                        esetcursor(&reading);
                                        rot180(im);
                                        esetcursor(nil);
       -                                upside = !upside;
       +                                angle = (angle+180) % 360;
                                        redraw(screen);
                                        flushimage(display, 1);
                                        break;
       t@@ -589,6 +599,7 @@ viewer(Document *dd)
                                                esetcursor(&reading);
                                                im = rot90(im);
                                                esetcursor(nil);
       +                                        angle = (angle+90) % 360;
                                                redraw(screen);
                                                flushimage(display, 1);
                                                break;
       t@@ -598,7 +609,7 @@ viewer(Document *dd)
                                                esetcursor(&reading);
                                                rot180(im);
                                                esetcursor(nil);
       -                                        upside = !upside;
       +                                        angle = (angle+180) % 360;
                                                redraw(screen);
                                                flushimage(display, 1);
                                                break;
       t@@ -978,6 +989,67 @@ rdenv(char *name)
                return v;
        }
        
       +void
       +newwin(void)
       +{
       +        char *srv, *mntsrv;
       +        char spec[100];
       +        int srvfd, cons, pid;
       +
       +        switch(rfork(RFFDG|RFPROC|RFNAMEG|RFENVG|RFNOTEG|RFNOWAIT)){
       +        case -1:
       +                fprint(2, "page: can't fork: %r\n");
       +                wexits("no fork");
       +        case 0:
       +                break;
       +        default:
       +                wexits(0);
       +        }
       +
       +        srv = rdenv("/env/wsys");
       +        if(srv == 0){
       +                mntsrv = rdenv("/mnt/term/env/wsys");
       +                if(mntsrv == 0){
       +                        fprint(2, "page: can't find $wsys\n");
       +                        wexits("srv");
       +                }
       +                srv = malloc(strlen(mntsrv)+10);
       +                sprint(srv, "/mnt/term%s", mntsrv);
       +                free(mntsrv);
       +                pid  = 0;                        /* can't send notes to remote processes! */
       +        }else
       +                pid = getpid();
       +        srvfd = open(srv, ORDWR);
       +        free(srv);
       +        if(srvfd == -1){
       +                fprint(2, "page: can't open %s: %r\n", srv);
       +                wexits("no srv");
       +        }
       +        sprint(spec, "new -pid %d", pid);
       +        if(mount(srvfd, -1, "/mnt/wsys", 0, spec) == -1){
       +                fprint(2, "page: can't mount /mnt/wsys: %r (spec=%s)\n", spec);
       +                wexits("no mount");
       +        }
       +        close(srvfd);
       +        unmount("/mnt/acme", "/dev");
       +        bind("/mnt/wsys", "/dev", MBEFORE);
       +        cons = open("/dev/cons", OREAD);
       +        if(cons==-1){
       +        NoCons:
       +                fprint(2, "page: can't open /dev/cons: %r");
       +                wexits("no cons");
       +        }
       +        dup(cons, 0);
       +        close(cons);
       +        cons = open("/dev/cons", OWRITE);
       +        if(cons==-1)
       +                goto NoCons;
       +        dup(cons, 1);
       +        dup(cons, 2);
       +        close(cons);
       +//        wctlfd = open("/dev/wctl", OWRITE);
       +}
       +
        Rectangle
        screenrect(void)
        {
       t@@ -1011,7 +1083,7 @@ zerox(void)
                        case 0: 
                                dup(pfd[1], 0);
                                close(pfd[0]);
       -                        execl("/bin/page", "page", "-w", 0);
       +                        execl("/bin/page", "page", "-w", nil);
                                wexits("cannot exec in zerox: %r\n");
                        default:
                                close(pfd[1]);
   DIR diff --git a/src/cmd/rc/lex.c b/src/cmd/rc/lex.c
       t@@ -113,7 +113,7 @@ int nextis(int c){
        }
        char *addtok(char *p, int val){
                if(p==0) return 0;
       -        if(p==&tok[NTOK]){
       +        if(p==&tok[NTOK-1]){
                        *p=0;
                        yyerror("token buffer too short");
                        return 0;
   DIR diff --git a/src/cmd/sam/io.c b/src/cmd/sam/io.c
       t@@ -226,7 +226,7 @@ connectto(char *machine, char **argv)
                // count args
                for(av = argv; *av; av++)
                        ;
       -        av = malloc(sizeof(char*)*((av-argv) + 5));
       +        av = malloc(sizeof(char*)*((av-argv) + 10));
                if(av == nil){
                        dprint("out of memory\n");
                        exits("fork/exec");
       t@@ -234,6 +234,8 @@ connectto(char *machine, char **argv)
                ac = 0;
                av[ac++] = RX;
                av[ac++] = machine;
       +        if(rxopt)
       +                av[ac++] = rxopt;
                av[ac++] = rsamname;
                av[ac++] = "-R";
                while(*argv)
   DIR diff --git a/src/cmd/sam/sam.c b/src/cmd/sam/sam.c
       t@@ -30,6 +30,7 @@ Disk        *disk;
        long        seq;
        
        char *winsize;
       +char *rxopt;
        
        Rune        baddir[] = { '<', 'b', 'a', 'd', 'd', 'i', 'r', '>', '\n'};
        
       t@@ -56,6 +57,9 @@ main(int volatile argc, char **volatile argv)
                case 'R':
                        Rflag++;
                        break;
       +        case 'O':
       +                rxopt = EARGF(usage());
       +                break;
                case 't':
                        samterm = EARGF(usage());
                        break;
       t@@ -118,7 +122,7 @@ main(int volatile argc, char **volatile argv)
        void
        usage(void)
        {
       -        dprint("usage: sam [-d] [-t samterm] [-s sam name] -r machine\n");
       +        dprint("usage: sam [-d] [-t samterm] [-s sam name] [-r machine] [file ...]\n");
                exits("usage");
        }
        
   DIR diff --git a/src/cmd/sam/sam.h b/src/cmd/sam/sam.h
       t@@ -348,6 +348,7 @@ extern char        SH[];
        extern char        SHPATH[];
        extern char        RX[];
        extern char        RXPATH[];
       +extern char        *rxopt;
        
        /*
         * acme globals
   DIR diff --git a/src/cmd/upas/smtp/smtp.c b/src/cmd/upas/smtp/smtp.c
       t@@ -754,6 +754,8 @@ getreply(void)
                reply = s_reset(reply);
                for(;;){
                        line = getcrnl(reply);
       +                if(debug)
       +                        Bflush(&berr);
                        if(line == 0)
                                return -1;
                        if(!isdigit(line[0]) || !isdigit(line[1]) || !isdigit(line[2]))
       t@@ -761,8 +763,6 @@ getreply(void)
                        if(line[3] != '-')
                                break;
                }
       -        if(debug)
       -                Bflush(&berr);
                rv = atoi(line)/100;
                return rv;
        }
       t@@ -999,6 +999,7 @@ getcrnl(String *s)
                        case '\r':
                                c = Bgetc(&bin);
                                if(c == '\n'){
       +                case '\n':
                                        s_putc(s, c);
                                        if(debug)
                                                Bputc(&berr, c);
   DIR diff --git a/src/mkfile b/src/mkfile
       t@@ -24,6 +24,7 @@ MKDIRS=\
        
        mkmk.sh:VD:
                (
       +                echo '# AUTOMATICALLY GENERATED - DO NOT EDIT'
                        echo cd lib9
                        echo 'echo cd `pwd`'
                        (cd lib9; mk -n -a install)