1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
|
/********************************************************************
* Description: rcs_print.hh
*
* Derived from a work by Fred Proctor & Will Shackleford
*
* Author:
* License: LGPL Version 2
* System: Linux
*
* Copyright (c) 2004 All rights reserved.
*
* Last change:
********************************************************************/
#ifndef RCS_PRNT_HH
#define RCS_PRNT_HH
#ifdef __cplusplus
extern "C" {
#endif
#include <stdarg.h> /* va_list */
#ifdef __cplusplus
}
#endif
#ifdef __cplusplus
class LinkedList;
extern LinkedList *get_rcs_print_list();
/* Returns the address of the linked list where messages may have been
stored. */
#endif
#ifdef __cplusplus
extern "C" {
#endif
extern void clean_print_list(void);
/* Deletes the linked list where messages may have been stored. */
extern void output_print_list(int output_func(const char *));
extern int count_characters_in_print_list(void);
extern int count_lines_in_print_list(void);
extern void convert_print_list_to_lines(void);
extern void update_lines_table(void);
extern int rcs_vprint(const char *_fmt, va_list va_args, int save_string);
/* Prints a message using the _fmt format string and the _va_args using
the vprintf conventions. */
extern int rcs_print(const char *_fmt, ...) __attribute__((format(printf,1,2)));
/*
Prints a message using the _fmt format string and optional additional
arguments using the printf conventions. */
extern int rcs_print_debug(long, const char *_fmt, ...) __attribute__((format(printf,2,3)));
/*
Prints a message using the _fmt format string and optional additional
arguments using the printf conventions if the corresponding flag to
_flag_to_check is set. (See set_rcs_print_flag().) */
#ifdef DO_NOT_USE_RCS_PRINT_ERROR_NEW
extern int rcs_print_error(const char *_fmt, ...) __attribute__((format(printf,1,2)));
#else
extern int set_print_rcs_error_info(const char *file, int line);
extern int print_rcs_error_new(const char *_fmt, ...) __attribute__((format(printf,1,2)));
#define rcs_print_error set_print_rcs_error_info( __FILE__, __LINE__); print_rcs_error_new
#endif
extern void set_rcs_print_flag(long flags_to_set);
/* An internal 32 bit integer contains a set of flags that are checked
whenever an rcs_print_debug or rcs_print_error occurs to determine if
the message should be printed or not. Programmers can define their own
flags in the most significant byte or turn on or off several NODE or
CMS/NML debug messages.
See the Print MODE flags defined below for messages that can be turned
on or off. */
extern void clear_rcs_print_flag(long flags_to_set);
/* Clears a flag set with set_rcs_print_flag. */
extern char *strip_control_characters(char *_dest, char *_src);
/* Removes new lines, carriage returns and tabs from the _src string and
stores the result in the _dest string if the _dest pointer does not
equal NULL. If the _dest pointer equals NULL the new string is stored
in an internal array.
Returns the dest pointer or the address of the internal array where
the new string was stored. */
extern int separate_words(char **_dest, int _max, char *_src);
extern int rcs_puts(const char *);
/* Prints the string _str and adds a new line character at the end
following the puts convention. */
extern int rcs_fputs(const char *);
extern char **get_rcs_lines_table(void);
extern int get_rcs_print_list_size(void);
typedef void (*RCS_PRINT_NOTIFY_FUNC_PTR) (void);
extern void set_rcs_print_notify(RCS_PRINT_NOTIFY_FUNC_PTR);
extern int set_rcs_print_file(const char *_file_name);
extern void close_rcs_printing(void);
#ifdef __cplusplus
}
#endif
/* Print MODE flags. */
#define PRINT_RCS_ERRORS 0x00000001 /* 1 */
#define PRINT_NODE_CONSTRUCTORS 0x00000002 /* 2 */
#define PRINT_NODE_DESTRUCTORS 0x00000004 /* 4 */
#define PRINT_CMS_CONSTRUCTORS 0x00000008 /* 8 */
#define PRINT_CMS_DESTRUCTORS 0x00000010 /* 16 */
#define PRINT_NML_CONSTRUCTORS 0x00000020 /* 32 */
#define PRINT_NML_DESTRUCTORS 0x00000040 /* 64 */
#define PRINT_COMMANDS_RECIEVED 0x00000100 /* 256 */
#define PRINT_COMMANDS_SENT 0x00000200 /* 512 */
#define PRINT_STATUS_RECIEVED 0x00000400 /* 1024 */
#define PRINT_STATUS_SENT 0x00000800 /* 2048 */
#define PRINT_NODE_CYCLES 0x00001000 /* 4096 */
#define PRINT_NODE_MISSED_CYCLES 0x00002000 /* 8192 */
#define PRINT_NODE_CYCLE_TIMES 0x00004000 /* 16384 */
#define PRINT_NODE_PROCESS_TIMES 0x00008000 /* 32768 */
#define PRINT_NEW_WM 0x00010000 /* 65536 */
#define PRINT_NODE_ABORT 0x00020000 /* 131072 */
#define PRINT_CMS_CONFIG_INFO 0x00040000 /* 262144 */
#define PRINT_SOCKET_READ_SIZE 0x00080000 /* 524288 */
#define PRINT_SOCKET_WRITE_SIZE 0x00100000 /* 1048576 */
#define PRINT_INTERFACE_LOADING 0x00200000 /* 2097152 */
#define PRINT_RPC_SERVER_CALL 0x00400000 /* 4194304 */
#define PRINT_SEMAPHORE_ACTIVITY 0x00800000 /* 8388608 */
#define PRINT_SOCKET_CONNECT 0x01000000 /* 16777216 */
#define PRINT_SERVER_THREAD_ACTIVITY 0x02000000 // 33554432
#define PRINT_SERVER_SUBSCRIPTION_ACTIVITY 0x04000000 // 67108864
#define PRINT_SHARED_MEMORY_ACTIVITY 0x08000000
#define PRINT_ALL_SOCKET_REQUESTS 0x10000000
#define PRINT_EVERYTHING 0xFFFFFFFF /* 4294967295 */
#ifdef __cplusplus
enum RCS_PRINT_DESTINATION_TYPE {
#else
typedef enum {
#endif
RCS_PRINT_TO_STDOUT,
RCS_PRINT_TO_STDERR,
RCS_PRINT_TO_NULL,
RCS_PRINT_TO_LIST,
RCS_PRINT_TO_FILE,
RCS_PRINT_TO_MESSAGE_BOX, /* Only available for Windows */
RCS_PRINT_TO_LOGGER /* Only available for VXWORKS */
#ifdef __cplusplus
};
#else
} RCS_PRINT_DESTINATION_TYPE;
#endif
#ifdef __cplusplus
extern "C" {
#endif
extern void set_rcs_print_destination(RCS_PRINT_DESTINATION_TYPE);
/* Changes where the output of the rcs_print functions is directed. The
following choices are available:
RCS_PRINT_TO_STDOUT Print to stdout.
RCS_PRINT_TO_LOGGER Currently prints to stdout, except under VxWorks
where it uses the logMsg function, which is non-blocking.
RCS_PRINT_TO_STDERR Print to stderr
RCS_PRINT_TO_NULL Make all rcs_print functions return without doing
anything.
RCS_PRINT_TO_LIST Store all rcs_print messages in a linked list, so
that later they can be displayed in a separate window, or used in some
other way. The current list sizing mode defaults to a maximum size of
256 with excess nodes being deleted from the head. */
extern RCS_PRINT_DESTINATION_TYPE get_rcs_print_destination(void);
extern int rcs_print_sys_error(int error_source, const char *_fmt, ...) __attribute__((format(printf,2,3)));
#ifdef __cplusplus
enum RCS_PRINT_ERROR_SOURCE_TYPE {
#else
typedef enum {
#endif
ERRNO_ERROR_SOURCE = 1,
GETLASTERROR_ERROR_SOURCE,
WSAGETLASTERROR_ERROR_SOURCE
#ifdef __cplusplus
};
#else
} RCS_PRINT_ERROR_SOURCE_TYPE;
#endif
#ifdef __cplusplus
};
#endif
extern int max_rcs_errors_to_print;
extern int rcs_errors_printed;
extern char last_error_bufs[4][100];
extern int last_error_buf_filled;
#endif
|