windows-trace-log-to-dbgview-20050820
[openafs.git] / src / WINNT / client_osi / osilog.h
1 /* 
2  * Copyright (C) 1998, 1989 Transarc Corporation - All rights reserved
3  *
4  * (C) COPYRIGHT IBM CORPORATION 1987, 1988
5  * LICENSED MATERIALS - PROPERTY OF IBM
6  *
7  */
8
9 #ifndef _OSI_LOG_H__
10 #define _OSI_LOG_H__ 1
11
12 #include "osi.h"
13 #ifndef DJGPP
14 #include "osisleep.h"
15 #include "osibasel.h"
16 #include "osistatl.h"
17 #endif /* !DJGPP */
18 #include "osifd.h"
19 #include "osiqueue.h"
20
21 #define OSI_LOG_DEFAULTSIZE     1000
22 #define OSI_LOG_STRINGSIZE      128
23 #define OSI_LOG_MAXPARMS        4       /* max # of int parms */
24
25 typedef struct osi_logEntry {
26         long tid;                       /* thread ID */
27         unsigned long micros;           /* microsecond-based time stamp */
28         char *formatp;                  /* format string */
29         long parms[OSI_LOG_MAXPARMS];   /* parms */
30 } osi_logEntry_t;
31
32 typedef struct osi_log {
33         osi_queue_t q;                  /* queue of all logs */
34         char *namep;                    /* name */
35         long alloc;                     /* allocated size */
36         long nused;                     /* number currently in use */
37         long first;                     /* index of first entry */
38         Crit_Sec cs;            /* use this, rather than a higher-level
39                                          * lock, so we can log stuff from
40                                          * osi lock pkg */
41         osi_logEntry_t *datap;          /* data for the log */
42         int stringindex;                /* where to put new strings */
43         int maxstringindex;             /* size of string array */
44         char (*stringsp)[OSI_LOG_STRINGSIZE];   /* string array */
45         int enabled;                    /* true if enabled */
46 } osi_log_t;
47
48 typedef struct osi_logFD {
49         osi_fd_t fd;                    /* FD header */
50         osi_log_t *logp;                /* logp */
51         long first;                     /* first index at time we started */
52         long nused;                     /* nused at tiem we started */
53         long current;                   /* counter we're at */
54 } osi_logFD_t;
55
56 extern long osi_logSize;
57
58 extern osi_log_t *osi_LogCreate(char *, long);
59
60 extern void osi_LogFree(osi_log_t *);
61
62 extern void osi_LogAdd(osi_log_t *, char *, long, long, long, long);
63
64 extern void osi_LogReset(osi_log_t *);
65
66 extern long osi_LogFDCreate(osi_fdType_t *, osi_fd_t **);
67
68 #ifndef DJGPP
69 extern long osi_LogFDGetInfo(osi_fd_t *, osi_remGetInfoParms_t *);
70 #endif
71
72 extern long osi_LogFDClose(osi_fd_t *);
73
74 extern void osi_LogEnable(osi_log_t *);
75
76 extern void osi_LogDisable(osi_log_t *);
77
78 extern void osi_LogPanic(char *filep, long line);
79
80 extern void osi_LogPrint(osi_log_t *logp, FILE_HANDLE handle);
81
82 extern char *osi_LogSaveString(osi_log_t *logp, char *s);
83 extern void osi_InitTraceOption();
84 extern void osi_LogEvent0(char *a,char *b);
85 extern void osi_LogEvent(char *a,char *b,char *c,...);
86 extern char *osi_HexifyString(char *s);
87
88 /* define macros */
89 #define osi_Log0(l,f)           osi_LogAdd((l), (f), 0, 0, 0, 0)
90 #define osi_Log1(l,f,a)         osi_LogAdd((l), (f), (long) (a), 0, 0, 0)
91 #define osi_Log2(l,f,a,b)       osi_LogAdd((l), (f), (long) (a), (long) (b), 0, 0)
92 #define osi_Log3(l,f,a,b,c)     osi_LogAdd((l), (f), (long) (a), (long) (b), (long) (c), 0)
93 #define osi_Log4(l,f,a,b,c,d)   osi_LogAdd((l), (f), (long) (a), (long) (b), (long) (c), (long) (d))
94 #define osi_Log5(l,f,a,b,c,d,e) osi_LogAdd((l), (f), (long) (a), (long) (b), (long) (c), (long) (d), (long) (e))
95
96 #ifdef DEBUG_VERBOSE
97 #define DEBUG_EVENT1(a,b,c) {HANDLE h; char *ptbuf[1],buf[132];\
98         h = RegisterEventSource(NULL, a);\
99         sprintf(buf, b,c);\
100         ptbuf[0] = buf;\
101         ReportEvent(h, EVENTLOG_INFORMATION_TYPE, 0, 0, NULL, 1, 0, (const char **)ptbuf, NULL);\
102         DeregisterEventSource(h);}
103 #define DEBUG_EVENT0(a) {HANDLE h; char *ptbuf[1];\
104         h = RegisterEventSource(NULL, a);\
105         ptbuf[0] = "";\
106         ReportEvent(h, EVENTLOG_INFORMATION_TYPE, 0, 0, NULL, 1, 0,(const char **) ptbuf, NULL);\
107         DeregisterEventSource(h);}
108 #define DEBUG_EVENT2(a,b,c,d) {HANDLE h; char *ptbuf[1],buf[132];\
109         h = RegisterEventSource(NULL, a);\
110         sprintf(buf, b,c,d);\
111         ptbuf[0] = buf;\
112         ReportEvent(h, EVENTLOG_INFORMATION_TYPE, 0, 0, NULL, 1, 0,(const char **) ptbuf, NULL);\
113         DeregisterEventSource(h);}
114 #define DEBUG_EVENT3(a,b,c,d,e) {HANDLE h; char *ptbuf[1],buf[132];\
115         h = RegisterEventSource(NULL, a);\
116         sprintf(buf, b,c,d,e);\
117         ptbuf[0] = buf;\
118         ReportEvent(h, EVENTLOG_INFORMATION_TYPE, 0, 0, NULL, 1, 0,(const char **)ptbuf, NULL);\
119         DeregisterEventSource(h);}
120 #define DEBUG_EVENT4(a,b,c,d,e,f) {HANDLE h; char *ptbuf[1],buf[132];\
121         h = RegisterEventSource(NULL, a);\
122         sprintf(buf, b,c,d,e,f);\
123         ptbuf[0] = buf;\
124         ReportEvent(h, EVENTLOG_INFORMATION_TYPE, 0, 0, NULL, 1, 0,(const char **) ptbuf, NULL);\
125         DeregisterEventSource(h);}
126 #define DEBUG_EVENT5(a,b,c,d,e,f,g) {HANDLE h; char *ptbuf[1],buf[132];\
127         h = RegisterEventSource(NULL, a);\
128         sprintf(buf, b,c,d,e,f,g);\
129         ptbuf[0] = buf;\
130         ReportEvent(h, EVENTLOG_INFORMATION_TYPE, 0, 0, NULL, 1, 0,(const char **) ptbuf, NULL);\
131         DeregisterEventSource(h);}
132 #define DEBUG_EVENT6(a,b,c,d,e,f,g,h) {HANDLE h; char *ptbuf[1],buf[132];\
133         h = RegisterEventSource(NULL, a);\
134         sprintf(buf,b,c,d,e,f,g,h);\
135         ptbuf[0] = buf;\
136         ReportEvent(h, EVENTLOG_INFORMATION_TYPE, 0, 0, NULL, 1, 0,(const char **) ptbuf, NULL);\
137         DeregisterEventSource(h);}
138 #else
139 #define DEBUG_EVENT0(a)
140 #define DEBUG_EVENT1(a,b,c)
141 #define DEBUG_EVENT2(a,b,c,d)
142 #define DEBUG_EVENT3(a,b,c,d,e)
143 #define DEBUG_EVENT4(a,b,c,d,e,f)
144 #define DEBUG_EVENT5(a,b,c,d,e,f,g)
145 #define DEBUG_EVENT6(a,b,c,d,e,f,g,h)
146 #endif
147
148 #endif /*  _OSI_LOG_H__ */