annotate src/fftw-3.3.3/kernel/print.c @ 169:223a55898ab9 tip default

Add null config files
author Chris Cannam <cannam@all-day-breakfast.com>
date Mon, 02 Mar 2020 14:03:47 +0000
parents 89f5e221ed7b
children
rev   line source
cannam@95 1 /*
cannam@95 2 * Copyright (c) 2003, 2007-11 Matteo Frigo
cannam@95 3 * Copyright (c) 2003, 2007-11 Massachusetts Institute of Technology
cannam@95 4 *
cannam@95 5 * This program is free software; you can redistribute it and/or modify
cannam@95 6 * it under the terms of the GNU General Public License as published by
cannam@95 7 * the Free Software Foundation; either version 2 of the License, or
cannam@95 8 * (at your option) any later version.
cannam@95 9 *
cannam@95 10 * This program is distributed in the hope that it will be useful,
cannam@95 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
cannam@95 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
cannam@95 13 * GNU General Public License for more details.
cannam@95 14 *
cannam@95 15 * You should have received a copy of the GNU General Public License
cannam@95 16 * along with this program; if not, write to the Free Software
cannam@95 17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
cannam@95 18 *
cannam@95 19 */
cannam@95 20
cannam@95 21
cannam@95 22 #include "ifftw.h"
cannam@95 23 #include <stddef.h>
cannam@95 24 #include <stdarg.h>
cannam@95 25 #include <stdio.h>
cannam@95 26
cannam@95 27 #define BSZ 64
cannam@95 28
cannam@95 29 static void myputs(printer *p, const char *s)
cannam@95 30 {
cannam@95 31 char c;
cannam@95 32 while ((c = *s++))
cannam@95 33 p->putchr(p, c);
cannam@95 34 }
cannam@95 35
cannam@95 36 static void newline(printer *p)
cannam@95 37 {
cannam@95 38 int i;
cannam@95 39
cannam@95 40 p->putchr(p, '\n');
cannam@95 41 for (i = 0; i < p->indent; ++i)
cannam@95 42 p->putchr(p, ' ');
cannam@95 43 }
cannam@95 44
cannam@95 45 static const char *digits = "0123456789abcdef";
cannam@95 46
cannam@95 47 static void putint(printer *p, INT i)
cannam@95 48 {
cannam@95 49 char buf[BSZ];
cannam@95 50 char *f = buf;
cannam@95 51
cannam@95 52 if (i < 0) {
cannam@95 53 p->putchr(p, '-');
cannam@95 54 i = -i;
cannam@95 55 }
cannam@95 56
cannam@95 57 do {
cannam@95 58 *f++ = digits[i % 10];
cannam@95 59 i /= 10;
cannam@95 60 } while (i);
cannam@95 61
cannam@95 62 do {
cannam@95 63 p->putchr(p, *--f);
cannam@95 64 } while (f != buf);
cannam@95 65 }
cannam@95 66
cannam@95 67 static void putulong(printer *p, unsigned long i, int base, int width)
cannam@95 68 {
cannam@95 69 char buf[BSZ];
cannam@95 70 char *f = buf;
cannam@95 71
cannam@95 72 do {
cannam@95 73 *f++ = digits[i % base];
cannam@95 74 i /= base;
cannam@95 75 } while (i);
cannam@95 76
cannam@95 77 while (width > f - buf) {
cannam@95 78 p->putchr(p, '0');
cannam@95 79 --width;
cannam@95 80 }
cannam@95 81
cannam@95 82 do {
cannam@95 83 p->putchr(p, *--f);
cannam@95 84 } while (f != buf);
cannam@95 85 }
cannam@95 86
cannam@95 87 static void vprint(printer *p, const char *format, va_list ap)
cannam@95 88 {
cannam@95 89 const char *s = format;
cannam@95 90 char c;
cannam@95 91 INT ival;
cannam@95 92
cannam@95 93 while ((c = *s++)) {
cannam@95 94 switch (c) {
cannam@95 95 case '%':
cannam@95 96 switch ((c = *s++)) {
cannam@95 97 case 'M': {
cannam@95 98 /* md5 value */
cannam@95 99 md5uint x = va_arg(ap, md5uint);
cannam@95 100 putulong(p, (unsigned long)(0xffffffffUL & x),
cannam@95 101 16, 8);
cannam@95 102 break;
cannam@95 103 }
cannam@95 104 case 'c': {
cannam@95 105 int x = va_arg(ap, int);
cannam@95 106 p->putchr(p, x);
cannam@95 107 break;
cannam@95 108 }
cannam@95 109 case 's': {
cannam@95 110 char *x = va_arg(ap, char *);
cannam@95 111 if (x)
cannam@95 112 myputs(p, x);
cannam@95 113 else
cannam@95 114 goto putnull;
cannam@95 115 break;
cannam@95 116 }
cannam@95 117 case 'd': {
cannam@95 118 int x = va_arg(ap, int);
cannam@95 119 ival = (INT)x;
cannam@95 120 goto putival;
cannam@95 121 }
cannam@95 122 case 'D': {
cannam@95 123 ival = va_arg(ap, INT);
cannam@95 124 goto putival;
cannam@95 125 }
cannam@95 126 case 'v': {
cannam@95 127 /* print optional vector length */
cannam@95 128 ival = va_arg(ap, INT);
cannam@95 129 if (ival > 1) {
cannam@95 130 myputs(p, "-x");
cannam@95 131 goto putival;
cannam@95 132 }
cannam@95 133 break;
cannam@95 134 }
cannam@95 135 case 'o': {
cannam@95 136 /* integer option. Usage: %oNAME= */
cannam@95 137 ival = va_arg(ap, INT);
cannam@95 138 if (ival)
cannam@95 139 p->putchr(p, '/');
cannam@95 140 while ((c = *s++) != '=')
cannam@95 141 if (ival)
cannam@95 142 p->putchr(p, c);
cannam@95 143 if (ival) {
cannam@95 144 p->putchr(p, '=');
cannam@95 145 goto putival;
cannam@95 146 }
cannam@95 147 break;
cannam@95 148 }
cannam@95 149 case 'u': {
cannam@95 150 unsigned x = va_arg(ap, unsigned);
cannam@95 151 putulong(p, (unsigned long)x, 10, 0);
cannam@95 152 break;
cannam@95 153 }
cannam@95 154 case 'x': {
cannam@95 155 unsigned x = va_arg(ap, unsigned);
cannam@95 156 putulong(p, (unsigned long)x, 16, 0);
cannam@95 157 break;
cannam@95 158 }
cannam@95 159 case '(': {
cannam@95 160 /* newline, augment indent level */
cannam@95 161 p->indent += p->indent_incr;
cannam@95 162 newline(p);
cannam@95 163 break;
cannam@95 164 }
cannam@95 165 case ')': {
cannam@95 166 /* decrement indent level */
cannam@95 167 p->indent -= p->indent_incr;
cannam@95 168 break;
cannam@95 169 }
cannam@95 170 case 'p': { /* note difference from C's %p */
cannam@95 171 /* print plan */
cannam@95 172 plan *x = va_arg(ap, plan *);
cannam@95 173 if (x)
cannam@95 174 x->adt->print(x, p);
cannam@95 175 else
cannam@95 176 goto putnull;
cannam@95 177 break;
cannam@95 178 }
cannam@95 179 case 'P': {
cannam@95 180 /* print problem */
cannam@95 181 problem *x = va_arg(ap, problem *);
cannam@95 182 if (x)
cannam@95 183 x->adt->print(x, p);
cannam@95 184 else
cannam@95 185 goto putnull;
cannam@95 186 break;
cannam@95 187 }
cannam@95 188 case 'T': {
cannam@95 189 /* print tensor */
cannam@95 190 tensor *x = va_arg(ap, tensor *);
cannam@95 191 if (x)
cannam@95 192 X(tensor_print)(x, p);
cannam@95 193 else
cannam@95 194 goto putnull;
cannam@95 195 break;
cannam@95 196 }
cannam@95 197 default:
cannam@95 198 A(0 /* unknown format */);
cannam@95 199 break;
cannam@95 200
cannam@95 201 putnull:
cannam@95 202 myputs(p, "(null)");
cannam@95 203 break;
cannam@95 204
cannam@95 205 putival:
cannam@95 206 putint(p, ival);
cannam@95 207 break;
cannam@95 208 }
cannam@95 209 break;
cannam@95 210 default:
cannam@95 211 p->putchr(p, c);
cannam@95 212 break;
cannam@95 213 }
cannam@95 214 }
cannam@95 215 }
cannam@95 216
cannam@95 217 static void print(printer *p, const char *format, ...)
cannam@95 218 {
cannam@95 219 va_list ap;
cannam@95 220 va_start(ap, format);
cannam@95 221 vprint(p, format, ap);
cannam@95 222 va_end(ap);
cannam@95 223 }
cannam@95 224
cannam@95 225 printer *X(mkprinter)(size_t size,
cannam@95 226 void (*putchr)(printer *p, char c),
cannam@95 227 void (*cleanup)(printer *p))
cannam@95 228 {
cannam@95 229 printer *s = (printer *)MALLOC(size, OTHER);
cannam@95 230 s->print = print;
cannam@95 231 s->vprint = vprint;
cannam@95 232 s->putchr = putchr;
cannam@95 233 s->cleanup = cleanup;
cannam@95 234 s->indent = 0;
cannam@95 235 s->indent_incr = 2;
cannam@95 236 return s;
cannam@95 237 }
cannam@95 238
cannam@95 239 void X(printer_destroy)(printer *p)
cannam@95 240 {
cannam@95 241 if (p->cleanup)
cannam@95 242 p->cleanup(p);
cannam@95 243 X(ifree)(p);
cannam@95 244 }