1 fd04aace 2003-11-23 devnull #include <u.h>
2 fd04aace 2003-11-23 devnull #include <libc.h>
4 fd04aace 2003-11-23 devnull #define NFN 33
5 fd04aace 2003-11-23 devnull static int (*onnot[NFN])(void*, char*);
6 fd04aace 2003-11-23 devnull static Lock onnotlock;
10 fd04aace 2003-11-23 devnull notifier(void *v, char *s)
14 fd04aace 2003-11-23 devnull for(i=0; i<NFN; i++)
15 fd04aace 2003-11-23 devnull if(onnot[i] && ((*onnot[i])(v, s))){
16 fd04aace 2003-11-23 devnull noted(NCONT);
19 fd04aace 2003-11-23 devnull noted(NDFLT);
23 fd04aace 2003-11-23 devnull atnotify(int (*f)(void*, char*), int in)
25 fd04aace 2003-11-23 devnull int i, n, ret;
26 fd04aace 2003-11-23 devnull static int init;
28 fd04aace 2003-11-23 devnull if(!init){
29 fd04aace 2003-11-23 devnull notify(notifier);
30 fd04aace 2003-11-23 devnull init = 1; /* assign = */
33 fd04aace 2003-11-23 devnull lock(&onnotlock);
35 fd04aace 2003-11-23 devnull for(i=0; i<NFN; i++)
36 fd04aace 2003-11-23 devnull if(onnot[i] == 0) {
37 fd04aace 2003-11-23 devnull onnot[i] = f;
43 fd04aace 2003-11-23 devnull for(i=0; i<NFN; i++)
44 fd04aace 2003-11-23 devnull if(onnot[i]){
45 fd04aace 2003-11-23 devnull if(ret==0 && onnot[i]==f){
46 fd04aace 2003-11-23 devnull onnot[i] = 0;
51 fd04aace 2003-11-23 devnull if(n == 0){
52 fd04aace 2003-11-23 devnull init = 0;
53 fd04aace 2003-11-23 devnull notify(0);
56 fd04aace 2003-11-23 devnull unlock(&onnotlock);
57 fd04aace 2003-11-23 devnull return ret;