1 /*------------------------------------------------------------\
7 | Authors : Jacomme Ludovic |
10 \------------------------------------------------------------*/
24 #include "XYA_error.h"
26 static FILE *XyagStreamErr
;
27 static FILE *XyagStreamOut
;
28 static FILE *XyagStreamAll
;
30 static char XyagErrFileName
[40];
31 static char XyagOutFileName
[40];
32 static char XyagAllFileName
[40];
34 static char XyagNormalMode
= 1;
36 static char *XyagErrorBuffer
= (char *) NULL
;
38 static char XyagInformationsBuffer
[XYAG_INFORMATIONS_BUFFER_SIZE
];
39 extern void (* XyagCallbackFileQuitFonction
)();
41 /*------------------------------------------------------------\
42 | XyagExitErrorMessage |
43 \------------------------------------------------------------*/
48 XyagExitErrorMessage(Error
)
53 if (XyagStreamErr
!= (FILE *) 0) {
54 fclose(XyagStreamErr
);
55 unlink(XyagErrFileName
);
58 if (XyagStreamAll
!= (FILE *) 0) {
59 fclose(XyagStreamAll
);
60 unlink(XyagAllFileName
);
63 if ((XyagNormalMode
) &&
64 (XyagStreamOut
!= (FILE *) 0)) {
65 fclose(XyagStreamOut
);
66 unlink(XyagOutFileName
);
70 /*------------------------------------------------------------\
71 | XyagInitializeErrorMessage |
72 \------------------------------------------------------------*/
75 XyagInitializeErrorMessage(Debug
)
78 XyagNormalMode
= !Debug
;
80 if (XyagCallbackFileQuitFonction
!= NULL
)
88 XyagStreamOut = freopen("/dev/null", "w", stdout);
94 sprintf(XyagOutFileName
, "/tmp/%s_out_%ld", XYAG_TOOL_NAME
, (long)getpid());
97 sprintf(XyagErrFileName
, "/tmp/%s_err_%ld", XYAG_TOOL_NAME
, (long)getpid());
98 sprintf(XyagAllFileName
, "/tmp/%s_all_%ld", XYAG_TOOL_NAME
, (long)getpid());
100 // XyagStreamErr = freopen(XyagErrFileName, "w+", stderr);
101 XyagStreamAll
= fopen(XyagAllFileName
, "w+");
102 XyagStreamErr
=stderr
;
103 if (XyagNormalMode
) {
104 XyagStreamOut
= freopen(XyagOutFileName
, "w+", stdout
);
107 XyagStreamOut
= XyagStreamErr
;
110 if ((XyagStreamAll
== NULL
) || (XyagStreamOut
== NULL
) || (XyagStreamErr
== NULL
)) {
111 fprintf(stdout
, "XYAG: Unable to open trace window !\n");
115 if (XyagNormalMode
) {
116 unlink(XyagOutFileName
);
119 unlink(XyagErrFileName
);
121 signal(SIGINT
, XyagExitErrorMessage
);
124 /*------------------------------------------------------------\
125 | XyagFlushErrorMessage |
126 \------------------------------------------------------------*/
129 XyagFlushErrorMessage()
135 fflush(XyagStreamErr
);
136 fseek(XyagStreamErr
, 0L, 0);
138 while ((Data
= fgetc(XyagStreamErr
)) != EOF
) {
139 fputc(Data
, XyagStreamAll
);
142 // fclose(XyagStreamErr);
144 // XyagStreamErr = freopen(XyagErrFileName, "w+", stderr);
146 if (XyagNormalMode
) {
147 fflush(XyagStreamOut
);
148 fseek(XyagStreamOut
, 0L, 0);
150 while ((Data
= fgetc(XyagStreamOut
)) != EOF
) {
151 fputc(Data
, XyagStreamAll
);
154 fclose(XyagStreamOut
);
156 XyagStreamOut
= freopen(XyagOutFileName
, "w+", stdout
);
160 /*------------------------------------------------------------\
161 | XyagGetErrorMessage |
162 \------------------------------------------------------------*/
163 void XyagCleanErrorMessage()
166 XyagFlushErrorMessage();
167 fflush(XyagStreamAll
);
168 rewind(XyagStreamAll
);
172 XyagGetErrorMessage()
181 XyagFlushErrorMessage();
183 fflush(XyagStreamAll
);
185 Length
= ftell(XyagStreamAll
);
187 if (XyagErrorBuffer
!= (char *) NULL
) {
188 mbkfree(XyagErrorBuffer
);
191 XyagErrorBuffer
= mbkalloc(Length
+ 1);
194 while (((Data
= fgetc(XyagStreamAll
)) != EOF
) &&
196 XyagErrorBuffer
[Index
++] = (char) Data
;
199 rewind(XyagStreamAll
);
201 XyagErrorBuffer
[Index
] = '\0';
204 Message
= (char *) NULL
;
207 Message
= XyagErrorBuffer
;
212 /*------------------------------------------------------------\
213 | XyagGetInformations |
214 \------------------------------------------------------------*/
217 XyagGetInformations()
223 Scan
= XyagInformationsBuffer
;
225 if (XyagFigureCgv
!= (cgvfig_list
*) NULL
) {
226 sprintf(Scan
, " FIGURE : %s\n\n",
227 XyagFigureCgv
->NAME
);
230 sprintf(Scan
, " FIGURE : No current figure !\n\n");
233 Scan
= Scan
+ strlen(Scan
);
236 " BOUNDING BOX : \n\n XMIN : %ld\n YMIN : %ld\n XMAX : %ld\n YMAX : %ld\n\n",
237 XyagBoundXmin
/ XYAG_UNIT
, XyagBoundYmin
/ XYAG_UNIT
,
238 XyagBoundXmax
/ XYAG_UNIT
, XyagBoundYmax
/ XYAG_UNIT
);
240 Scan
= Scan
+ strlen(Scan
);
241 return (XyagInformationsBuffer
);