xref: /dflybsd-src/usr.bin/sort/sort.h (revision a98f7024a73d3aaccc56d8f7c0082a60a274a0a5)
150fc853eSJohn Marino /*	$FreeBSD: head/usr.bin/sort/sort.h 264744 2014-04-21 22:52:18Z pfg $	*/
27572dc55SJohn Marino 
37572dc55SJohn Marino /*-
450fc853eSJohn Marino  * Copyright (C) 2009 Gabor Kovesdan <gabor@FreeBSD.org>
550fc853eSJohn Marino  * Copyright (C) 2012 Oleg Moskalenko <mom040267@gmail.com>
67572dc55SJohn Marino  * All rights reserved.
77572dc55SJohn Marino  *
87572dc55SJohn Marino  * Redistribution and use in source and binary forms, with or without
97572dc55SJohn Marino  * modification, are permitted provided that the following conditions
107572dc55SJohn Marino  * are met:
117572dc55SJohn Marino  * 1. Redistributions of source code must retain the above copyright
127572dc55SJohn Marino  *    notice, this list of conditions and the following disclaimer.
137572dc55SJohn Marino  * 2. Redistributions in binary form must reproduce the above copyright
147572dc55SJohn Marino  *    notice, this list of conditions and the following disclaimer in the
157572dc55SJohn Marino  *    documentation and/or other materials provided with the distribution.
167572dc55SJohn Marino  *
1750fc853eSJohn Marino  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
187572dc55SJohn Marino  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
197572dc55SJohn Marino  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
2050fc853eSJohn Marino  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
217572dc55SJohn Marino  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
227572dc55SJohn Marino  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
237572dc55SJohn Marino  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
247572dc55SJohn Marino  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
257572dc55SJohn Marino  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
267572dc55SJohn Marino  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
277572dc55SJohn Marino  * SUCH DAMAGE.
287572dc55SJohn Marino  */
297572dc55SJohn Marino 
3050fc853eSJohn Marino #if !defined(__BSD_SORT_H__)
3150fc853eSJohn Marino #define	__BSD_SORT_H__
327572dc55SJohn Marino 
337572dc55SJohn Marino #include <errno.h>
3450fc853eSJohn Marino #include <stdbool.h>
357572dc55SJohn Marino #include <stdio.h>
3650fc853eSJohn Marino #include <sysexits.h>
3750fc853eSJohn Marino #include <wchar.h>
387572dc55SJohn Marino 
3950fc853eSJohn Marino #include <sys/types.h>
406d7e22ecSzrj #if defined(SORT_RANDOM)
41*a98f7024Szrj #include <openssl/md5.h>
426d7e22ecSzrj #endif
437572dc55SJohn Marino 
4450fc853eSJohn Marino #define	VERSION	"2.3-FreeBSD"
457572dc55SJohn Marino 
4650fc853eSJohn Marino #ifdef WITHOUT_NLS
4750fc853eSJohn Marino #define	getstr(n)	 nlsstr[n]
4850fc853eSJohn Marino #else
4950fc853eSJohn Marino #include <nl_types.h>
507572dc55SJohn Marino 
5150fc853eSJohn Marino extern nl_catd catalog;
5250fc853eSJohn Marino #define	getstr(n)	 catgets(catalog, 1, n, nlsstr[n])
5350fc853eSJohn Marino #endif
547572dc55SJohn Marino 
5550fc853eSJohn Marino extern const char *nlsstr[];
567572dc55SJohn Marino 
5750fc853eSJohn Marino #if defined(SORT_THREADS)
5850fc853eSJohn Marino #define	MT_SORT_THRESHOLD (10000)
5950fc853eSJohn Marino extern unsigned int ncpu;
6050fc853eSJohn Marino extern size_t nthreads;
6150fc853eSJohn Marino #endif
627572dc55SJohn Marino 
6350fc853eSJohn Marino /*
6450fc853eSJohn Marino  * If true, we output some debug information.
657572dc55SJohn Marino  */
6650fc853eSJohn Marino extern bool debug_sort;
677572dc55SJohn Marino 
6850fc853eSJohn Marino /*
6950fc853eSJohn Marino  * MD5 context for random hash function
707572dc55SJohn Marino  */
716d7e22ecSzrj #if defined(SORT_RANDOM)
7250fc853eSJohn Marino extern MD5_CTX md5_ctx;
736d7e22ecSzrj #endif
7450fc853eSJohn Marino 
7550fc853eSJohn Marino /*
7650fc853eSJohn Marino  * sort.c
7750fc853eSJohn Marino  */
7850fc853eSJohn Marino 
7950fc853eSJohn Marino /*
8050fc853eSJohn Marino  * This structure holds main sort options which are NOT affecting the sort ordering.
8150fc853eSJohn Marino  */
8250fc853eSJohn Marino struct sort_opts
8350fc853eSJohn Marino {
8450fc853eSJohn Marino 	wint_t		field_sep;
8550fc853eSJohn Marino 	int		sort_method;
8650fc853eSJohn Marino 	bool		cflag;
8750fc853eSJohn Marino 	bool		csilentflag;
8850fc853eSJohn Marino 	bool		kflag;
8950fc853eSJohn Marino 	bool		mflag;
9050fc853eSJohn Marino 	bool		sflag;
9150fc853eSJohn Marino 	bool		uflag;
9250fc853eSJohn Marino 	bool		zflag;
9350fc853eSJohn Marino 	bool		tflag;
9450fc853eSJohn Marino 	bool		complex_sort;
957572dc55SJohn Marino };
967572dc55SJohn Marino 
9750fc853eSJohn Marino /*
9850fc853eSJohn Marino  * Key value structure forward declaration
997572dc55SJohn Marino  */
10050fc853eSJohn Marino struct key_value;
1017572dc55SJohn Marino 
10250fc853eSJohn Marino /*
10350fc853eSJohn Marino  * Cmp function
1047572dc55SJohn Marino  */
10550fc853eSJohn Marino typedef int (*cmpcoll_t)(struct key_value *kv1, struct key_value *kv2, size_t offset);
10650fc853eSJohn Marino 
10750fc853eSJohn Marino /*
10850fc853eSJohn Marino  * This structure holds "sort modifiers" - options which are affecting the sort ordering.
10950fc853eSJohn Marino  */
11050fc853eSJohn Marino struct sort_mods
11150fc853eSJohn Marino {
11250fc853eSJohn Marino 	cmpcoll_t	func;
11350fc853eSJohn Marino 	bool		bflag;
11450fc853eSJohn Marino 	bool		dflag;
11550fc853eSJohn Marino 	bool		fflag;
11650fc853eSJohn Marino 	bool		gflag;
11750fc853eSJohn Marino 	bool		iflag;
11850fc853eSJohn Marino 	bool		Mflag;
11950fc853eSJohn Marino 	bool		nflag;
12050fc853eSJohn Marino 	bool		rflag;
1216d7e22ecSzrj #if defined(SORT_RANDOM)
12250fc853eSJohn Marino 	bool		Rflag;
1236d7e22ecSzrj #endif
12450fc853eSJohn Marino 	bool		Vflag;
12550fc853eSJohn Marino 	bool		hflag;
1267572dc55SJohn Marino };
1277572dc55SJohn Marino 
12850fc853eSJohn Marino extern bool need_hint;
1297572dc55SJohn Marino 
13050fc853eSJohn Marino extern struct sort_opts sort_opts_vals;
1317572dc55SJohn Marino 
13250fc853eSJohn Marino extern struct sort_mods * const default_sort_mods;
1337572dc55SJohn Marino 
13450fc853eSJohn Marino #endif /* __BSD_SORT_H__ */
135