1 extern struct win *windows, *wtab[];
2 struct win
3 {
4   struct win *w_next;
5 };
6 
7 struct auser;
8 
9 struct comm
10 {
11   char *name;
12   int flags;
13 };
14 
15 extern struct comm comms[];
16 
17 extern int WindowByNoN (char *);
18 extern int FindCommnr (char *);
19 extern int AclSetPermCmd (struct auser *, char *, struct comm *);
20 extern int AclSetPermWin (struct auser *, struct auser *, char *, struct win *);
21 
22 
23 int
AclSetPerm(uu,u,mode,s)24   AclSetPerm(uu, u, mode, s)
25     struct auser *uu, *u;
26 char *mode, *s;
27 {
28   struct win *w;
29   int i;
30   char *p, ch;
31 
32   do
33     {
34     }
35   while (0);
36 
37   while (*s)
38     {
39       switch (*s)
40 	{
41 	case '*':
42 	  return AclSetPerm(uu, u, mode, "#?");
43 	case '#':
44 	  if (uu)
45 	    AclSetPermWin(uu, u, mode, (struct win *)1);
46 	  else
47 	    for (w = windows; w; w = w->w_next)
48 	      AclSetPermWin((struct auser *)0, u, mode, w);
49 	  s++;
50 	  break;
51 	case '?':
52 	  if (uu)
53 	    AclSetPermWin(uu, u, mode, (struct win *)0);
54 	  else
55 	    for (i = 0; i <= 174; i++)
56 	      AclSetPermCmd(u, mode, &comms[i]);
57 	  s++;
58 	  break;
59 	default:
60 	  for (p = s; *p && *p != ' ' && *p != '\t' && *p != ','; p++)
61 	    ;
62 	  if ((ch = *p))
63 	    *p++ = '\0';
64 	  if ((i = FindCommnr(s)) != -1)
65 	    AclSetPermCmd(u, mode, &comms[i]);
66 	  else if (((i = WindowByNoN(s)) >= 0) && wtab[i])
67 	    AclSetPermWin((struct auser *)0, u, mode, wtab[i]);
68 	  else
69 	    return -1;
70 	  if (ch)
71 	    p[-1] = ch;
72 	  s = p;
73 	}
74     }
75 
76   return 0;
77 }
78