source: Sophya/trunk/SophyaExt/JThreadsC++/JTCSrc/JTC/Syscall.h@ 1016

Last change on this file since 1016 was 1016, checked in by ansari, 25 years ago

Creation du module JThreadsC++, importation du code des classes
de Thread a la Java de Object Oriented Concepts Inc - Reza 19/5/2000

File size: 5.1 KB
Line 
1// **********************************************************************
2//
3// Copyright (c) 2000
4// Object Oriented Concepts, Inc.
5// Billerica, MA, USA
6//
7// All Rights Reserved
8//
9// **********************************************************************
10
11#ifndef JTC_SYSCALL_H
12#define JTC_SYSCALL_H
13
14#if defined(HAVE_STRSTREAM)
15# include <strstream>
16#else
17# if defined(HAVE_STRSTREA_H)
18# include <strstrea.h>
19# else
20# include <strstream.h>
21# endif
22#endif
23
24#include <JTC/Exception.h>
25
26#define JTC_THROW_EXCEPTION(CODE,MSG) \
27{ \
28 long error = CODE; \
29 char msg[ 512 ]; \
30 msg[sizeof(msg)-1] = '\0'; \
31 JTC_STD(ostrstream) stream(msg, sizeof(msg)-1); \
32 stream << MSG << " == " << error << " [" << __FILE__ \
33 << ':' << __LINE__ << ']' << JTC_STD(ends); \
34 throw JTCSystemCallException(msg, error); \
35}
36
37#define JTC_CAT_WNL(ARG) \
38 " " << (ARG) << ", // " << #ARG << "\n"
39
40#define JTC_CAT(ARG) \
41 " " << (ARG) << " // " << #ARG
42
43#define JTC_FMT_ARG_0 \
44 " ()"
45
46#define JTC_FMT_ARG_1(A1) \
47 "\n (\n" << JTC_CAT(A1) << "\n )"
48
49#define JTC_FMT_ARG_2(A1,A2) \
50 "\n (\n" << JTC_CAT_WNL(A1) << JTC_CAT(A2) \
51 << "\n )"
52
53#define JTC_FMT_ARG_3(A1,A2,A3) \
54 "\n (\n" << JTC_CAT_WNL(A1) << JTC_CAT_WNL(A2) \
55 << JTC_CAT(A3) << "\n )"
56
57#define JTC_FMT_ARG_4(A1,A2,A3,A4) \
58 "\n (\n" << JTC_CAT_WNL(A1) << JTC_CAT_WNL(A2) \
59 << JTC_CAT_WNL(A3) << JTC_CAT(A4) << "\n )"
60
61#define JTC_FMT_ARG_5(A1,A2,A3,A4,A5) \
62 "\n (\n" << JTC_CAT_WNL(A1) << JTC_CAT_WNL(A2) \
63 << JTC_CAT_WNL(A3) << JTC_CAT_WNL(A4) << JTC_CAT(A5) << "\n )"
64
65#define JTC_FMT_ARG_6(A1,A2,A3,A4,A5,A6) \
66 "\n (\n" << JTC_CAT_WNL(A1) << JTC_CAT_WNL(A2) \
67 << JTC_CAT_WNL(A3) << JTC_CAT_WNL(A4) << JTC_CAT_WNL(A5) << JTC_CAT(A6) \
68 << "\n )"
69
70#define JTC_FMT_ARG_7(A1,A2,A3,A4,A5,A6,A7) \
71 "\n (\n" << JTC_CAT_WNL(A1) << JTC_CAT_WNL(A2) \
72 << JTC_CAT_WNL(A3) << JTC_CAT_WNL(A4) << JTC_CAT_WNL(A5) << JTC_CAT_WNL(A6) \
73 << JTC_CAT(A7) << "\n )"
74
75#define JTC_FMT_ARG_8(A1,A2,A3,A4,A5,A6,A7,A8) \
76 "\n (\n" << JTC_CAT_WNL(A1) << JTC_CAT_WNL(A2) \
77 << JTC_CAT_WNL(A3) << JTC_CAT_WNL(A4) << JTC_CAT_WNL(A5) << JTC_CAT_WNL(A6) \
78 << JTC_CAT_WNL(A7) << JTC_CAT(A8) << "\n )"
79
80#define JTC_FMT_ARG_9(A1,A2,A3,A4,A5,A6,A7,A8,A9) \
81 "\n (\n" << JTC_CAT_WNL(A1) << JTC_CAT_WNL(A2) \
82 << JTC_CAT_WNL(A3) << JTC_CAT_WNL(A4) << JTC_CAT_WNL(A5) << JTC_CAT_WNL(A6) \
83 << JTC_CAT_WNL(A7) << JTC_CAT_WNL(A8) << JTC_CAT(A9) << "\n )"
84
85#if defined(WIN32)
86# define ERRNO GetLastError()
87# define DECLARE_ERRNO
88# define ASSIGN_ERRNO
89#else
90# if defined(__hpux) && defined(HAVE_DCE_THREADS)
91# define ERRNO errno
92# else
93# define ERRNO _jtc_syscallError
94# endif
95# define DECLARE_ERRNO int _jtc_syscallError;
96# define ASSIGN_ERRNO _jtc_syscallError =
97#endif
98
99#define JTC_SYSCALL_0(FN,COND) \
100do { \
101 DECLARE_ERRNO \
102 if ((ASSIGN_ERRNO (FN())) COND) \
103 JTC_THROW_EXCEPTION( ERRNO, #FN << JTC_FMT_ARG_0 ) \
104} while(0);
105
106#define JTC_SYSCALL_1(FN,A1,COND) \
107{ \
108 DECLARE_ERRNO \
109 if ((ASSIGN_ERRNO (FN (A1))) COND) \
110 JTC_THROW_EXCEPTION( ERRNO, #FN << JTC_FMT_ARG_1(A1) ) \
111} while(0);
112
113#define JTC_SYSCALL_2(FN,A1,A2,COND) \
114do { \
115 DECLARE_ERRNO \
116 if ((ASSIGN_ERRNO (FN (A1,A2))) COND) \
117 JTC_THROW_EXCEPTION( ERRNO, #FN << JTC_FMT_ARG_2(A1,A2) ) \
118} while(0);
119
120#define JTC_SYSCALL_3(FN,A1,A2,A3,COND) \
121do { \
122 DECLARE_ERRNO \
123 if ((ASSIGN_ERRNO (FN (A1,A2,A3))) COND) \
124 JTC_THROW_EXCEPTION( ERRNO, #FN << JTC_FMT_ARG_3(A1,A2,A3) ) \
125} while(0);
126
127#define JTC_SYSCALL_4(FN,A1,A2,A3,A4,COND) \
128do { \
129 DECLARE_ERRNO \
130 if ((ASSIGN_ERRNO (FN (A1,A2,A3,A4))) COND) \
131 JTC_THROW_EXCEPTION( ERRNO, #FN << JTC_FMT_ARG_4(A1,A2,A3,A4) ) \
132} while(0);
133
134#define JTC_SYSCALL_5(FN,A1,A2,A3,A4,A5,COND) \
135do { \
136 DECLARE_ERRNO \
137 if ((ASSIGN_ERRNO (FN (A1,A2,A3,A4,A5))) COND) \
138 JTC_THROW_EXCEPTION( ERRNO, #FN << JTC_FMT_ARG_5(A1,A2,A3,A4,A5) ) \
139} while(0);
140
141#define JTC_SYSCALL_6(FN,A1,A2,A3,A4,A5,A6,COND) \
142do { \
143 DECLARE_ERRNO \
144 if ((ASSIGN_ERRNO (FN (A1,A2,A3,A4,A5,A6))) COND) \
145 JTC_THROW_EXCEPTION( ERRNO, #FN << JTC_FMT_ARG_6(A1,A2,A3,A4,A5,A6) ) \
146} while(0);
147
148#define JTC_SYSCALL_7(FN,A1,A2,A3,A4,A5,A6,A7,COND) \
149do { \
150 DECLARE_ERRNO \
151 if ((ASSIGN_ERRNO (FN (A1,A2,A3,A4,A5,A6,A7))) COND) \
152 JTC_THROW_EXCEPTION( ERRNO, #FN << \
153 JTC_FMT_ARG_7(A1,A2,A3,A4,A5,A6,A7) ) \
154} while(0);
155
156
157#define JTC_SYSCALL_8(FN,A1,A2,A3,A4,A5,A6,A7,A8,COND) \
158do { \
159 DECLARE_ERRNO \
160 if ((ASSIGN_ERRNO (FN (A1,A2,A3,A4,A5,A6,A7,A8))) COND) \
161 JTC_THROW_EXCEPTION( ERRNO, #FN << \
162 JTC_FMT_ARG_8(A1,A2,A3,A4,A5,A6,A7,A8) ) \
163} while(0);
164
165
166#define JTC_SYSCALL_9(FN,A1,A2,A3,A4,A5,A6,A7,A8,A9,COND) \
167do { \
168 DECLARE_ERRNO \
169 if ((ASSIGN_ERRNO (FN (A1,A2,A3,A4,A5,A6,A7,A8,A9))) COND) \
170 JTC_THROW_EXCEPTION( ERRNO, #FN << \
171 JTC_FMT_ARG_9(A1,A2,A3,A4,A5,A6,A7,A8,A9) ) \
172} while(0);
173
174#endif
Note: See TracBrowser for help on using the repository browser.