--- /sys/games/lib/fortunes Thu Apr 4 21:52:18 2013 +++ /sys/games/lib/fortunes Mon May 20 14:36:31 2013 @@ -4310,3 +4310,4 @@ I fixed their fix and it does work. - forsyth To maintain backward compatibility, the relationships between the many options are quite complex. - ls(1) OS X Manual Page qemu: could not open serial device 'dev': Success +DSM Terminator [ ABORT ] Finished [ 0 request(s) + 0 call(s) distributed in 5ms] --- /sys/man/1/xd Mon Dec 3 00:42:13 2007 +++ /sys/man/1/xd Tue May 21 00:09:23 2013 @@ -58,12 +58,19 @@ .PD .PP Other options are -.TP \w'\fL-a\fIstyle\fLXX'u +.TP \w'\fL-a\fIstyle\fLX'u .B -c Format as .B 1x but print .SM ASCII +representations or C escape sequences where possible. +.TP +.B -R +Format as +.B 1x +but print +.B Rune representations or C escape sequences where possible. .TP .BI -a style --- /sys/src/cmd/sort.c Thu Apr 25 00:52:51 2013 +++ /sys/src/cmd/sort.c Tue May 21 00:27:55 2013 @@ -71,7 +71,7 @@ int end2; long flags; - uchar mapto[1+0xffff]; /* this is not Runemax to keep this table small */ + uchar mapto[1+255]; void (*dokey)(Key*, uchar*, uchar*, Field*); }; @@ -1292,7 +1292,7 @@ /* * for characters out of range, * the table does not do Rflag. - * ignore is based on mapto[nelem(f->mapto)] + * ignore is based on mapto[nelem(f->mapto)-1] */ if(c != 0 && c < nelem(f->mapto)) { c = f->mapto[c]; --- /sys/src/cmd/xd.c Thu Aug 25 20:13:17 2005 +++ /sys/src/cmd/xd.c Tue May 21 00:09:23 2013 @@ -2,10 +2,11 @@ #include #include -unsigned char odata[16]; -unsigned char data[16]; +uchar odata[16]; +uchar data[32]; int ndata; -unsigned long addr; +int nread; +ulong addr; int repeats; int swizzle; int flush; @@ -14,13 +15,17 @@ void xprint(char *, ...); void initarg(void), swizz(void); enum{ - Narg=10 + Narg=10, + + TNone=0, + TAscii, + TRune, }; typedef struct Arg Arg; typedef void fmtfn(char *); struct Arg { - int ascii; /* 0==none, 1==ascii */ + int chartype; /* TNone, TAscii, TRunes */ int loglen; /* 0==1, 1==2, 2==4, 3==8 */ int base; /* 0==8, 1==10, 2==16 */ fmtfn *fn; /* function to call with data */ @@ -29,7 +34,7 @@ }arg[Narg]; int narg; -fmtfn fmt0, fmt1, fmt2, fmt3, fmtc; +fmtfn fmt0, fmt1, fmt2, fmt3, fmtc, fmtr; fmtfn *fmt[4] = { fmt0, fmt1, @@ -50,6 +55,10 @@ " %.3uo", " %.3ud", " %.2ux", }; +char *rfmt[1][1] = { + " %2.2C", +}; + char *afmt[2][3] = { "%.7luo ", "%.7lud ", "%.7lux ", "%7luo ", "%7lud ", "%7lux ", @@ -113,7 +122,13 @@ while(argv[0][0]){ switch(argv[0][0]){ case 'c': - ap->ascii = 1; + ap->chartype = TAscii; + ap->loglen = 0; + if(argv[0][1] || argv[0][-1]!='-') + goto Usage; + break; + case 'R': + ap->chartype = TRune; ap->loglen = 0; if(argv[0][1] || argv[0][-1]!='-') goto Usage; @@ -150,7 +165,9 @@ } argv[0]++; } - if(ap->ascii) + if(ap->chartype == TRune) + ap->fn = fmtr; + else if(ap->chartype == TAscii) ap->fn = fmtc; else ap->fn = fmt[ap->loglen]; @@ -178,7 +195,7 @@ fprint(2, "xd: too many formats (max %d)\n", Narg); exits("usage"); } - ap->ascii = 0; + ap->chartype = TNone; ap->loglen = 2; ap->base = 2; ap->fn = fmt2; @@ -190,7 +207,7 @@ xd(char *name, int title) { int fd; - int i, star; + int i, star, nsee, nleft; Arg *ap; Biobuf *bp; @@ -209,19 +226,27 @@ xprint("%s\n", name); addr = 0; star = 0; - while((ndata=Bread(bp, data, 16)) >= 0){ - if(ndata < 16) - for(i=ndata; i<16; i++) + nsee = 16; + nleft = 0; + /* read 32 but see only 16 so that runes are happy */ + while((ndata=Bread(bp, data + nleft, 32 - nleft)) >= 0){ + ndata += nleft; + nleft = 0; + nread = ndata; + if(ndata>nsee) + ndata = nsee; + else if(ndata0 && data[0]==odata[0]){ - for(i=1; i<16; i++) + for(i=1; insee){ + nleft = nread - nsee; + memmove(data, data + nsee, nleft); + } } Bterm(bp); return 0; @@ -288,7 +317,7 @@ fmt1(char *f) { int i; - for(i=0; i=0x7F || ' '>c) + xprint(cfmt[2][2], c); + else + xprint(cfmt[0][2], c); + break; + } +} + +void fmtc(char *f) { int i; USED(f); for(i=0; i=0x7F || ' '>data[i]) - xprint(cfmt[2][2], data[i]); - else - xprint(cfmt[0][2], data[i]); - break; + onefmtc(data[i]); +} + +void +fmtr(char *f) +{ + int i, w, cw; + Rune r; + static int nstart; + + USED(f); + if(nstart) + xprint("%*c", 3*nstart, ' '); + for(i=nstart; inread) + onefmtc(data[i++]); + else{ + cw = w; + if(i + w>ndata) + cw = ndata - i; + xprint(rfmt[0][0], r); + xprint("%*c", 3*cw-3, ' '); + i += w; + } } + if(i > ndata) + nstart = i - ndata; + else + nstart = 0; } void