My Project
Macros | Functions | Variables
reporter.cc File Reference
#include "misc/auxiliary.h"
#include "reporter/reporter.h"
#include "resources/feResource.h"
#include "resources/feFopen.h"
#include "omalloc/omalloc.h"
#include <stdlib.h>
#include <stdio.h>
#include "misc/mylimits.h"
#include <stdarg.h>
#include <sys/stat.h>
#include <ctype.h>
#include <unistd.h>

Go to the source code of this file.

Macros

#define fePutChar(c)   fputc((unsigned char)(c),stdout)
 
#define INITIAL_PRINT_BUFFER   24*1024L
 
#define MAX_FILE_BUFFER   4*4096
 
#define warn_str   "// ** "
 

Functions

void StringAppend (const char *fmt,...)
 
void StringAppendS (const char *st)
 
void StringSetS (const char *st)
 
char * StringEndS ()
 
void WerrorS_batch (const char *s)
 
void Werror (const char *fmt,...)
 
void WarnS (const char *s)
 
void Warn (const char *fmt,...)
 
void SPrintStart ()
 
static void SPrintS (const char *s)
 
char * SPrintEnd ()
 
void PrintS (const char *s)
 
void PrintLn ()
 
void Print (const char *fmt,...)
 
void PrintNSpaces (const int n)
 
const char * eati (const char *s, int *i)
 
void feStringAppendResources (int warn)
 

Variables

STATIC_VAR long feBufferLength =0
 
STATIC_VAR char * feBuffer =NULL
 
STATIC_VAR long feBufferLength_save [8]
 
STATIC_VAR char * feBuffer_save [8]
 
STATIC_VAR int feBuffer_cnt =0
 
STATIC_VAR char * feBufferStart_save [8]
 
VAR char * feErrors =NULL
 
VAR int feErrorsLen =0
 
VAR BOOLEAN feWarn = TRUE
 
VAR BOOLEAN feOut = TRUE
 
const char feNotImplemented [] ="not implemented"
 
VAR int feProt = FALSE
 
VAR FILE * feProtFile
 
STATIC_VAR char * feBufferStart
 
VAR void(* WarnS_callback )(const char *s) = NULL
 
STATIC_VAR char * sprint = NULL
 
STATIC_VAR char * sprint_backup = NULL
 

Macro Definition Documentation

◆ fePutChar

#define fePutChar (   c)    fputc((unsigned char)(c),stdout)

Definition at line 30 of file reporter.cc.

◆ INITIAL_PRINT_BUFFER

#define INITIAL_PRINT_BUFFER   24*1024L

Definition at line 34 of file reporter.cc.

◆ MAX_FILE_BUFFER

#define MAX_FILE_BUFFER   4*4096

Definition at line 38 of file reporter.cc.

◆ warn_str

#define warn_str   "// ** "

Function Documentation

◆ eati()

const char* eati ( const char *  s,
int *  i 
)

Definition at line 373 of file reporter.cc.

374 {
375  int l=0;
376 
377  if (*s >= '0' && *s <= '9')
378  {
379  *i = 0;
380  while (*s >= '0' && *s <= '9')
381  {
382  *i *= 10;
383  *i += *s++ - '0';
384  l++;
385  if ((l>=MAX_INT_LEN)||((*i) <0))
386  {
387  s-=l;
388  Werror("`%s` greater than %d(max. integer representation)",
389  s,MAX_INT_VAL);
390  return s;
391  }
392  }
393  }
394  else *i = 1;
395  return s;
396 }
int l
Definition: cfEzgcd.cc:100
int i
Definition: cfEzgcd.cc:132
const CanonicalForm int s
Definition: facAbsFact.cc:51
const int MAX_INT_VAL
Definition: mylimits.h:12
const int MAX_INT_LEN
Definition: mylimits.h:13
void Werror(const char *fmt,...)
Definition: reporter.cc:189

◆ feStringAppendResources()

void feStringAppendResources ( int  warn)

Definition at line 398 of file reporter.cc.

399 {
400  int i = 0;
401  char* r;
402  StringAppend("%-10s:\t%s\n", "argv[0]", feArgv0);
403  while (feResourceConfigs[i].key != NULL)
404  {
405  r = feResource(feResourceConfigs[i].key, warn);
406  StringAppend("%-10s:\t%s\n", feResourceConfigs[i].key,
407  (r != NULL ? r : ""));
408  i++;
409  }
410 }
VAR char * feArgv0
Definition: feResource.cc:19
VAR feResourceConfig_s feResourceConfigs[]
Definition: feResource.cc:54
static char * feResource(feResourceConfig config, int warn)
Definition: feResource.cc:258
#define NULL
Definition: omList.c:12
void StringAppend(const char *fmt,...)
Definition: reporter.cc:61

◆ Print()

void Print ( const char *  fmt,
  ... 
)

Definition at line 315 of file reporter.cc.

316 {
317  if (sprint != NULL)
318  {
319  va_list ap;
320  va_start(ap, fmt);
322  int ls = strlen(fmt);
323  if (fmt != NULL && ls > 0)
324  {
325  char* ns;
326  int l = strlen(sprint);
327  ns = (char*) omAlloc(sizeof(char)*(ls + l + 512));
328  if (l > 0) strcpy(ns, sprint);
329 
330 #ifdef HAVE_VSNPRINTF
331  l = vsnprintf(&(ns[l]), ls+511, fmt, ap);
332  assume(l != -1);
333 #else
334  vsprintf(&(ns[l]), fmt, ap);
335 #endif
336  omCheckAddr(ns);
337  omFree(sprint);
338  sprint = ns;
339  }
340  va_end(ap);
341  return;
342  }
343  else if (feOut)
344  {
345  va_list ap;
346  va_start(ap, fmt);
347  int l;
348  long ls=strlen(fmt);
349  char *s=(char *)omAlloc(ls+512);
350 #ifdef HAVE_VSNPRINTF
351  l = vsnprintf(s, ls+511, fmt, ap);
352  if ((l==-1)||(s[l]!='\0')||(l!=(int)strlen(s)))
353  {
354  printf("Print problem: l=%d, fmt=>>%s<<\n",l,fmt);
355  }
356 #else
357  vsprintf(s, fmt, ap);
358 #endif
359  PrintS(s);
360  omFree(s);
361  va_end(ap);
362  }
363 }
#define assume(x)
Definition: mod2.h:387
Definition: ap.h:40
#define omCheckAddr(addr)
Definition: omAllocDecl.h:328
#define omAlloc(size)
Definition: omAllocDecl.h:210
#define omFree(addr)
Definition: omAllocDecl.h:261
void PrintS(const char *s)
Definition: reporter.cc:284
STATIC_VAR char * sprint
Definition: reporter.cc:244
VAR BOOLEAN feOut
Definition: reporter.cc:50

◆ PrintLn()

void PrintLn ( )

Definition at line 310 of file reporter.cc.

311 {
312  PrintS("\n");
313 }

◆ PrintNSpaces()

void PrintNSpaces ( const int  n)

Definition at line 364 of file reporter.cc.

365 {
366  int l=n-1;
367  while(l>=0) { PrintS(" "); l--; }
368 }

◆ PrintS()

void PrintS ( const char *  s)

Definition at line 284 of file reporter.cc.

285 {
286  if (sprint != NULL)
287  {
288  SPrintS(s);
289  return;
290  }
291  else if (feOut) /* do not print when option --no-out was given */
292  {
293 
294  if (PrintS_callback!=NULL)
295  {
297  }
298  else
299  {
300  fwrite(s,1,strlen(s),stdout);
301  fflush(stdout);
302  if (feProt&SI_PROT_O)
303  {
304  fwrite(s,1,strlen(s),feProtFile);
305  }
306  }
307  }
308 }
VAR void(* PrintS_callback)(const char *s)
Definition: feFopen.cc:22
VAR int feProt
Definition: reporter.cc:56
static void SPrintS(const char *s)
Definition: reporter.cc:256
VAR FILE * feProtFile
Definition: reporter.cc:57
#define SI_PROT_O
Definition: reporter.h:54

◆ SPrintEnd()

char* SPrintEnd ( )

Definition at line 273 of file reporter.cc.

274 {
275  char* ns = sprint;
278  omCheckAddr(ns);
279  return ns;
280 }
STATIC_VAR char * sprint_backup
Definition: reporter.cc:245

◆ SPrintS()

static void SPrintS ( const char *  s)
inlinestatic

Definition at line 256 of file reporter.cc.

257 {
259  if ((s == NULL)||(*s == '\0')) return;
260  int ls = strlen(s);
261 
262  char* ns;
263  int l = strlen(sprint);
264  ns = (char*) omAlloc((l + ls + 1)*sizeof(char));
265  if (l > 0) strcpy(ns, sprint);
266 
267  strcpy(&(ns[l]), s);
268  omFree(sprint);
269  sprint = ns;
271 }

◆ SPrintStart()

void SPrintStart ( )

Definition at line 246 of file reporter.cc.

247 {
248  if (sprint!=NULL)
249  {
250  if (sprint_backup!=NULL) WerrorS("internal error: SPrintStart");
251  else sprint_backup=sprint;
252  }
253  sprint = omStrDup("");
254 }
void WerrorS(const char *s)
Definition: feFopen.cc:24
#define omStrDup(s)
Definition: omAllocDecl.h:263

◆ StringAppend()

void StringAppend ( const char *  fmt,
  ... 
)

Definition at line 61 of file reporter.cc.

62 {
63  va_list ap;
64  char *s = feBufferStart; /*feBuffer + strlen(feBuffer);*/
65  int vs;
66  long more;
67  va_start(ap, fmt);
68  if ((more=feBufferStart-feBuffer+strlen(fmt)+100)>feBufferLength)
69  {
70  more = ((more + (8*1024-1))/(8*1024))*(8*1024);
71  int l=s-feBuffer;
73  more);
74 #if (!defined(SING_NDEBUG)) && (!defined(OM_NDEBUG))
76 #endif
77  feBufferLength=more;
78  s=feBuffer+l;
79 #ifndef BSD_SPRINTF
81 #endif
82  }
83 #ifdef BSD_SPRINTF
84  vsprintf(s, fmt, ap);
85  while (*s!='\0') s++;
87 #else
88 #ifdef HAVE_VSNPRINTF
89  vs = vsnprintf(s, feBufferLength - (feBufferStart - feBuffer), fmt, ap);
90  if (vs == -1)
91  {
92  assume(0);
94  }
95  else
96  {
97  feBufferStart += vs;
98  }
99 #else
100  feBufferStart += vsprintf(s, fmt, ap);
101 #endif
102 #endif
104  va_end(ap);
105 }
#define omReallocSize(addr, o_size, size)
Definition: omAllocDecl.h:220
#define omCheckAddrSize(addr, size)
Definition: omAllocDecl.h:327
void omMarkAsStaticAddr(void *addr)
STATIC_VAR char * feBuffer
Definition: reporter.cc:40
STATIC_VAR char * feBufferStart
Definition: reporter.cc:59
STATIC_VAR long feBufferLength
Definition: reporter.cc:39

◆ StringAppendS()

void StringAppendS ( const char *  st)

Definition at line 107 of file reporter.cc.

108 {
109  if (*st!='\0')
110  {
111  /* feBufferStart is feBuffer + strlen(feBuffer);*/
112  int l=strlen(st);
113  long more;
114  int ll=feBufferStart-feBuffer;
115  if ((more=ll+2+l)>feBufferLength)
116  {
117  more = ((more + (8*1024-1))/(8*1024))*(8*1024);
119  more);
120  feBufferLength=more;
122  }
123  strncat(feBufferStart, st,l);
124  feBufferStart +=l;
125  }
126 }
#define omreallocSize(addr, o_size, size)
Definition: omAllocDecl.h:231

◆ StringEndS()

char* StringEndS ( )

Definition at line 151 of file reporter.cc.

152 {
153  char *r=feBuffer;
154  feBuffer_cnt--;
155  assume(feBuffer_cnt >=0);
159  if (strlen(r)<1024)
160  {
161  // if the used buffer is a "small block",
162  // substitue the "large" initial block by a small one
163  char *s=omStrDup(r); omFree(r); r=s;
164  }
165  return r;
166 }
STATIC_VAR char * feBufferStart_save[8]
Definition: reporter.cc:44
STATIC_VAR char * feBuffer_save[8]
Definition: reporter.cc:42
STATIC_VAR long feBufferLength_save[8]
Definition: reporter.cc:41
STATIC_VAR int feBuffer_cnt
Definition: reporter.cc:43

◆ StringSetS()

void StringSetS ( const char *  st)

Definition at line 128 of file reporter.cc.

129 {
136  feBuffer_cnt++;
137  assume(feBuffer_cnt<8);
138  int l=strlen(st);
139  long more;
140  if (l>feBufferLength)
141  {
142  more = ((l + (4*1024-1))/(4*1024))*(4*1024);
144  more);
145  feBufferLength=more;
146  }
147  strcpy(feBuffer,st);
149 }
void * ADDRESS
Definition: auxiliary.h:119
#define omAlloc0(size)
Definition: omAllocDecl.h:211
#define INITIAL_PRINT_BUFFER
Definition: reporter.cc:34

◆ Warn()

void Warn ( const char *  fmt,
  ... 
)

Definition at line 227 of file reporter.cc.

228 {
229  va_list ap;
230  va_start(ap, fmt);
231  char *s=(char *)omAlloc(256);
232 #ifdef HAVE_VSNPRINTF
233  vsnprintf(s, 256, fmt, ap);
234 #else
235  vsprintf(s, fmt, ap);
236 #endif
237  WarnS(s);
238  omFreeSize(s,256);
239  va_end(ap);
240 }
#define omFreeSize(addr, size)
Definition: omAllocDecl.h:260
void WarnS(const char *s)
Definition: reporter.cc:202

◆ WarnS()

void WarnS ( const char *  s)

Definition at line 202 of file reporter.cc.

203 {
204  #define warn_str "// ** "
205  if (feWarn) /* ignore warnings if option --no-warn was given */
206  {
207  if (WarnS_callback==NULL)
208  {
209  fwrite(warn_str,1,6,stdout);
210  fwrite(s,1,strlen(s),stdout);
211  fwrite("\n",1,1,stdout);
212  fflush(stdout);
213  if (feProt&SI_PROT_O)
214  {
215  fwrite(warn_str,1,6,feProtFile);
216  fwrite(s,1,strlen(s),feProtFile);
217  fwrite("\n",1,1,feProtFile);
218  }
219  }
220  else
221  {
222  WarnS_callback(s);
223  }
224  }
225 }
VAR void(* WarnS_callback)(const char *s)
Definition: reporter.cc:200
VAR BOOLEAN feWarn
Definition: reporter.cc:49
#define warn_str

◆ Werror()

void Werror ( const char *  fmt,
  ... 
)

Definition at line 189 of file reporter.cc.

190 {
191  va_list ap;
192  va_start(ap, fmt);
193  char *s=(char *)omAlloc(256);
194  vsprintf(s, fmt, ap);
195  WerrorS(s);
196  omFreeSize(s,256);
197  va_end(ap);
198 }

◆ WerrorS_batch()

void WerrorS_batch ( const char *  s)

Definition at line 168 of file reporter.cc.

169 {
170  if (feErrors==NULL)
171  {
172  feErrors=(char *)omAlloc(256);
173  feErrorsLen=256;
174  *feErrors = '\0';
175  }
176  else
177  {
178  if (((int)(strlen((char *)s)+ 20 +strlen(feErrors)))>=feErrorsLen)
179  {
181  feErrorsLen+=256;
182  }
183  }
184  strcat(feErrors, "Singular error: ");
185  strcat(feErrors, (char *)s);
187 }
#define TRUE
Definition: auxiliary.h:100
VAR short errorreported
Definition: feFopen.cc:23
VAR int feErrorsLen
Definition: reporter.cc:48
VAR char * feErrors
Definition: reporter.cc:47

Variable Documentation

◆ feBuffer

STATIC_VAR char* feBuffer =NULL

Definition at line 40 of file reporter.cc.

◆ feBuffer_cnt

STATIC_VAR int feBuffer_cnt =0

Definition at line 43 of file reporter.cc.

◆ feBuffer_save

STATIC_VAR char* feBuffer_save[8]

Definition at line 42 of file reporter.cc.

◆ feBufferLength

STATIC_VAR long feBufferLength =0

Definition at line 39 of file reporter.cc.

◆ feBufferLength_save

STATIC_VAR long feBufferLength_save[8]

Definition at line 41 of file reporter.cc.

◆ feBufferStart

STATIC_VAR char* feBufferStart

Definition at line 59 of file reporter.cc.

◆ feBufferStart_save

STATIC_VAR char* feBufferStart_save[8]

Definition at line 44 of file reporter.cc.

◆ feErrors

VAR char* feErrors =NULL

Definition at line 47 of file reporter.cc.

◆ feErrorsLen

VAR int feErrorsLen =0

Definition at line 48 of file reporter.cc.

◆ feNotImplemented

const char feNotImplemented[] ="not implemented"

Definition at line 54 of file reporter.cc.

◆ feOut

VAR BOOLEAN feOut = TRUE

Definition at line 50 of file reporter.cc.

◆ feProt

VAR int feProt = FALSE

Definition at line 56 of file reporter.cc.

◆ feProtFile

VAR FILE* feProtFile

Definition at line 57 of file reporter.cc.

◆ feWarn

VAR BOOLEAN feWarn = TRUE

Definition at line 49 of file reporter.cc.

◆ sprint

STATIC_VAR char* sprint = NULL

Definition at line 244 of file reporter.cc.

◆ sprint_backup

STATIC_VAR char* sprint_backup = NULL

Definition at line 245 of file reporter.cc.

◆ WarnS_callback

VAR void(* WarnS_callback) (const char *s) ( const char *  s) = NULL

Definition at line 200 of file reporter.cc.