File: errarg.cc

package info (click to toggle)
plotutils 2.4.1-15
  • links: PTS
  • area: main
  • in suites: etch, etch-m68k
  • size: 11,072 kB
  • ctags: 6,952
  • sloc: ansic: 76,305; cpp: 12,402; sh: 8,475; yacc: 2,604; makefile: 894; lex: 144
file content (105 lines) | stat: -rw-r--r-- 1,502 bytes parent folder | download | duplicates (13)
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
// -*- C++ -*-
/* Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc.
     Written by James Clark (jjc@jclark.com) */

#include <stdio.h>
#include <assert.h>
#include "errarg.h"
#include "lib.h"		// for our_itoa()

errarg::errarg(const char *p) : type(STRING)
{
  s = p ? p : "(null)";
}

errarg::errarg() : type(EMPTY)
{
}

errarg::errarg(unsigned char cc) : type(CHAR)
{
  c = cc;
}

errarg::errarg(int nn) : type(INTEGER)
{
  n = nn;
}

errarg::errarg(char cc) : type(CHAR)
{
  c = cc;
}

errarg::errarg(double dd) : type(DOUBLE)
{
  d = dd;
}

int
errarg::empty() const
{
  return type == EMPTY;
}

void
errarg::print() const
{
  switch (type) {
  case INTEGER:
    fputs(our_itoa(n), stderr);
    break;
  case CHAR:
    putc(c, stderr);
    break;
  case STRING:
    fputs(s, stderr);
    break;
  case DOUBLE:
    fprintf(stderr, "%g", d);
    break;
  case EMPTY:
    break;
  }
}

errarg empty_errarg;

void
errprint(const char *format, 
	 const errarg &arg1,
	 const errarg &arg2,
	 const errarg &arg3)
{
  char c;

  assert(format != 0);
  while ((c = *format++) != '\0') 
    {
      if (c == '%') 
	{
	  c = *format++;
	  switch(c) {
	  case '%':
	    fputc('%', stderr);
	    break;
	  case '1':
	    assert(!arg1.empty());
	    arg1.print();
	    break;
	  case '2':
	    assert(!arg2.empty());
	    arg2.print();
	    break;
	  case '3':
	    assert(!arg3.empty());
	    arg3.print();
	    break;
	  default:
	    assert(0);
	  }
	}
      else
	putc(c, stderr);
    }
}