xref: /freebsd/sbin/ipf/libipf/printfieldhdr.c (revision 5ca8e32633c4ffbbcd6762e5888b6a4ba0708c6c)
1 /*
2  * Copyright (C) 2012 by Darren Reed.
3  *
4  * See the IPFILTER.LICENCE file for details on licencing.
5  *
6  * $Id: printfieldhdr.c,v 1.5.2.3 2012/07/22 08:04:24 darren_r Exp $
7  */
8 
9 #include "ipf.h"
10 #include <ctype.h>
11 
12 
13 void
14 printfieldhdr(wordtab_t *words, wordtab_t *field)
15 {
16 	wordtab_t *w;
17 	char *s, *t;
18 
19 	if (field->w_value == -2) {
20 		for (w = words; w->w_word != NULL; ) {
21 			if (w->w_value > 0) {
22 				printfieldhdr(words, w);
23 				w++;
24 				if (w->w_value > 0)
25 					putchar('\t');
26 			} else {
27 				w++;
28 			}
29 		}
30 		return;
31 	}
32 
33 	for (w = words; w->w_word != NULL; w++) {
34 		if (w->w_value == field->w_value) {
35 			if (w->w_word == field->w_word) {
36 				s = strdup(w->w_word);
37 			} else {
38 				s = NULL;
39 			}
40 
41 			if ((w->w_word != field->w_word) || (s == NULL)) {
42 				PRINTF("%s", field->w_word);
43 			} else {
44 				for (t = s; *t != '\0'; t++) {
45 					if (ISALPHA(*t) && ISLOWER(*t))
46 						*t = TOUPPER(*t);
47 				}
48 				PRINTF("%s", s);
49 				free(s);
50 			}
51 		}
52 	}
53 }
54