Files
Arquivotheca.SunOS-4.1.4/usr.lib/libsunwindow/notify/ntfy_dump.c
seta75D ff309bfe1c Init
2021-10-11 18:37:13 -03:00

172 lines
4.6 KiB
C

#ifndef lint
#ifdef sccs
static char sccsid[] = "@(#)ntfy_dump.c 1.1 94/10/31 Copyr 1985 Sun Micro";
#endif
#endif
/*
* Copyright (c) 1986 by Sun Microsystems, Inc.
*/
/*
* Ntfy_dump.c - Calls to dump notifier state.
*/
#include <sunwindow/ntfy.h>
#include <sunwindow/ndet.h>
#include <sunwindow/ndis.h>
#include <stdio.h> /* For output */
typedef struct ntfy_dump_data {
Notify_dump_type type;
Notify_client nclient;
FILE *file;
NTFY_CLIENT *client_latest;
} Ntfy_dump_data;
static NTFY_ENUM ntfy_dump();
extern void
notify_dump(nclient, type, file)
Notify_client nclient;
Notify_dump_type type;
FILE *file;
{
Ntfy_dump_data data;
/* Set up enumeration record */
data.nclient = nclient;
if (file == (FILE *)1)
file = stdout;
if (file == (FILE *)2)
file = stderr;
data.file = file;
if (type == NOTIFY_ALL || type == NOTIFY_DETECT) {
(void) fprintf(file, "DETECTOR CONDITIONS:\n");
data.type = NOTIFY_DETECT;
data.client_latest = NTFY_CLIENT_NULL;
(void) ntfy_enum_conditions(ndet_clients, ntfy_dump,
(NTFY_ENUM_DATA)&data);
}
if (type == NOTIFY_ALL || type == NOTIFY_DISPATCH) {
(void) fprintf(file, "DISPATCH CONDITIONS:\n");
data.type = NOTIFY_DISPATCH;
data.client_latest = NTFY_CLIENT_NULL;
(void) ntfy_enum_conditions(ndis_clients, ntfy_dump,
(NTFY_ENUM_DATA)&data);
}
return;
}
static NTFY_ENUM
ntfy_dump(client, cond, context)
register NTFY_CLIENT *client;
register NTFY_CONDITION *cond;
NTFY_ENUM_DATA context;
{
register Ntfy_dump_data *data = (Ntfy_dump_data *)context;
if (data->nclient && client->nclient != data->nclient)
return (NTFY_ENUM_NEXT);
if (data->client_latest != client) {
(void) fprintf(data->file, "Client handle %lx, prioritizer %lx",
client->nclient, client->prioritizer);
if (data->type == NOTIFY_DISPATCH &&
client->flags & NCLT_EVENT_PROCESSING)
(void) fprintf(data->file,
" (in middle of dispatch):\n");
else
(void) fprintf(data->file, ":\n");
data->client_latest = client;
}
(void) fprintf(data->file, "\t");
switch (cond->type) {
case NTFY_INPUT:
(void) fprintf(data->file,
"input pending on fd %ld", cond->data.fd);
break;
case NTFY_OUTPUT:
(void) fprintf(data->file, "output completed on fd %ld",
cond->data.fd);
break;
case NTFY_EXCEPTION:
(void) fprintf(data->file, "exception occured on fd %ld",
cond->data.fd);
break;
case NTFY_SYNC_SIGNAL:
(void) fprintf(data->file, "signal (synchronous) %ld",
cond->data.signal);
break;
case NTFY_ASYNC_SIGNAL:
(void) fprintf(data->file, "signal (asynchronous) %ld",
cond->data.signal);
break;
case NTFY_REAL_ITIMER:
(void) fprintf(data->file, "interval timer (real time) ");
if (data->type == NOTIFY_DETECT) {
(void) fprintf(data->file, "waiting (%lx)",
cond->data.ntfy_itimer);
} else
(void) fprintf(data->file, "expired");
break;
case NTFY_VIRTUAL_ITIMER:
(void) fprintf(data->file, "interval timer (virtual time) ");
if (data->type == NOTIFY_DETECT) {
(void) fprintf(data->file, "waiting (%lx)",
cond->data.ntfy_itimer);
} else
(void) fprintf(data->file, "expired");
break;
case NTFY_WAIT3:
if (data->type == NOTIFY_DETECT)
(void) fprintf(data->file, "wait3 pid %ld",
cond->data.pid);
else
(void) fprintf(data->file, "wait3 pid %ld",
cond->data.wait3->pid);
break;
case NTFY_SAFE_EVENT:
(void) fprintf(data->file, "event (safe) %lx", cond->data.event);
break;
case NTFY_IMMEDIATE_EVENT:
(void) fprintf(data->file, "event (immediate) %lx",
cond->data.event);
break;
case NTFY_DESTROY:
(void) fprintf(data->file, "destroy status %lx",
cond->data.status);
break;
default:
(void) fprintf(data->file, "UNKNOWN %lx", cond->data.an_u_int);
break;
}
/* Copy function list, if appropriate */
if (cond->func_count > 1) {
(void) fprintf(data->file, "\n\t\tfunctions: %lx %lx %lx %lx",
cond->callout.functions[0],
cond->callout.functions[1],
cond->callout.functions[2],
cond->callout.functions[3],
cond->callout.functions[4]);
(void) fprintf(data->file,
"\n\t\tfunc count %ld, func next %ld\n",
cond->func_count, cond->func_next);
} else
(void) fprintf(data->file, ", func: %lx\n",
cond->callout.function);
if (data->type == NOTIFY_DISPATCH) {
if (cond->arg && cond->release)
(void) fprintf(data->file,
"\targ: %lx, release func: %lx\n",
cond->arg, cond->release);
else if (cond->arg)
(void) fprintf(data->file, "\targ: %lx\n", cond->arg);
else if (cond->release)
(void) fprintf(data->file, "\trelease func: %lx\n",
cond->release);
}
return(NTFY_ENUM_NEXT);
}