1*9a747e4fSDavid du Colombier #include <plan9.h>
2*9a747e4fSDavid du Colombier #include <fcall.h>
3*9a747e4fSDavid du Colombier
4*9a747e4fSDavid du Colombier static char *modes[] =
5*9a747e4fSDavid du Colombier {
6*9a747e4fSDavid du Colombier "---",
7*9a747e4fSDavid du Colombier "--x",
8*9a747e4fSDavid du Colombier "-w-",
9*9a747e4fSDavid du Colombier "-wx",
10*9a747e4fSDavid du Colombier "r--",
11*9a747e4fSDavid du Colombier "r-x",
12*9a747e4fSDavid du Colombier "rw-",
13*9a747e4fSDavid du Colombier "rwx",
14*9a747e4fSDavid du Colombier };
15*9a747e4fSDavid du Colombier
16*9a747e4fSDavid du Colombier static void
rwx(long m,char * s)17*9a747e4fSDavid du Colombier rwx(long m, char *s)
18*9a747e4fSDavid du Colombier {
19*9a747e4fSDavid du Colombier strncpy(s, modes[m], 3);
20*9a747e4fSDavid du Colombier }
21*9a747e4fSDavid du Colombier
22*9a747e4fSDavid du Colombier int
dirmodeconv(va_list * arg,Fconv * f)23*9a747e4fSDavid du Colombier dirmodeconv(va_list *arg, Fconv *f)
24*9a747e4fSDavid du Colombier {
25*9a747e4fSDavid du Colombier static char buf[16];
26*9a747e4fSDavid du Colombier ulong m;
27*9a747e4fSDavid du Colombier
28*9a747e4fSDavid du Colombier m = va_arg(*arg, ulong);
29*9a747e4fSDavid du Colombier
30*9a747e4fSDavid du Colombier if(m & DMDIR)
31*9a747e4fSDavid du Colombier buf[0]='d';
32*9a747e4fSDavid du Colombier else if(m & DMAPPEND)
33*9a747e4fSDavid du Colombier buf[0]='a';
34*9a747e4fSDavid du Colombier else
35*9a747e4fSDavid du Colombier buf[0]='-';
36*9a747e4fSDavid du Colombier if(m & DMEXCL)
37*9a747e4fSDavid du Colombier buf[1]='l';
38*9a747e4fSDavid du Colombier else
39*9a747e4fSDavid du Colombier buf[1]='-';
40*9a747e4fSDavid du Colombier rwx((m>>6)&7, buf+2);
41*9a747e4fSDavid du Colombier rwx((m>>3)&7, buf+5);
42*9a747e4fSDavid du Colombier rwx((m>>0)&7, buf+8);
43*9a747e4fSDavid du Colombier buf[11] = 0;
44*9a747e4fSDavid du Colombier
45*9a747e4fSDavid du Colombier strconv(buf, f);
46*9a747e4fSDavid du Colombier return 0;
47*9a747e4fSDavid du Colombier }
48