| extern struct win *windows, *wtab[]; |
| struct win |
| { |
| struct win *w_next; |
| }; |
| |
| struct auser; |
| |
| struct comm |
| { |
| char *name; |
| int flags; |
| }; |
| |
| extern struct comm comms[]; |
| |
| extern int WindowByNoN (char *); |
| extern int FindCommnr (char *); |
| extern int AclSetPermCmd (struct auser *, char *, struct comm *); |
| extern int AclSetPermWin (struct auser *, struct auser *, char *, struct win *); |
| |
| |
| int |
| AclSetPerm(uu, u, mode, s) |
| struct auser *uu, *u; |
| char *mode, *s; |
| { |
| struct win *w; |
| int i; |
| char *p, ch; |
| |
| do |
| { |
| } |
| while (0); |
| |
| while (*s) |
| { |
| switch (*s) |
| { |
| case '*': |
| return AclSetPerm(uu, u, mode, "#?"); |
| case '#': |
| if (uu) |
| AclSetPermWin(uu, u, mode, (struct win *)1); |
| else |
| for (w = windows; w; w = w->w_next) |
| AclSetPermWin((struct auser *)0, u, mode, w); |
| s++; |
| break; |
| case '?': |
| if (uu) |
| AclSetPermWin(uu, u, mode, (struct win *)0); |
| else |
| for (i = 0; i <= 174; i++) |
| AclSetPermCmd(u, mode, &comms[i]); |
| s++; |
| break; |
| default: |
| for (p = s; *p && *p != ' ' && *p != '\t' && *p != ','; p++) |
| ; |
| if ((ch = *p)) |
| *p++ = '\0'; |
| if ((i = FindCommnr(s)) != -1) |
| AclSetPermCmd(u, mode, &comms[i]); |
| else if (((i = WindowByNoN(s)) >= 0) && wtab[i]) |
| AclSetPermWin((struct auser *)0, u, mode, wtab[i]); |
| else |
| return -1; |
| if (ch) |
| p[-1] = ch; |
| s = p; |
| } |
| } |
| |
| return 0; |
| } |