xref: /openbsd-src/usr.bin/sort/sort.h (revision 81fe1d2f1c5fc1ae84678e6731d38725e040e97e)
1*81fe1d2fSmillert /*	$OpenBSD: sort.h,v 1.10 2015/12/31 16:09:31 millert Exp $	*/
2671ba900Smillert 
3671ba900Smillert /*-
479428148Smillert  * Copyright (C) 2009 Gabor Kovesdan <gabor@FreeBSD.org>
579428148Smillert  * Copyright (C) 2012 Oleg Moskalenko <mom040267@gmail.com>
679428148Smillert  * All rights reserved.
7671ba900Smillert  *
8671ba900Smillert  * Redistribution and use in source and binary forms, with or without
9671ba900Smillert  * modification, are permitted provided that the following conditions
10671ba900Smillert  * are met:
11671ba900Smillert  * 1. Redistributions of source code must retain the above copyright
12671ba900Smillert  *    notice, this list of conditions and the following disclaimer.
13671ba900Smillert  * 2. Redistributions in binary form must reproduce the above copyright
14671ba900Smillert  *    notice, this list of conditions and the following disclaimer in the
15671ba900Smillert  *    documentation and/or other materials provided with the distribution.
16671ba900Smillert  *
1779428148Smillert  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
18671ba900Smillert  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19671ba900Smillert  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
2079428148Smillert  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
21671ba900Smillert  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22671ba900Smillert  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23671ba900Smillert  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24671ba900Smillert  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25671ba900Smillert  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26671ba900Smillert  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27671ba900Smillert  * SUCH DAMAGE.
28671ba900Smillert  */
29671ba900Smillert 
3079428148Smillert #if !defined(__BSD_SORT_H__)
3179428148Smillert #define	__BSD_SORT_H__
3279428148Smillert 
33671ba900Smillert #include <errno.h>
3479428148Smillert #include <stdbool.h>
35671ba900Smillert #include <stdio.h>
3679428148Smillert #include <wchar.h>
37671ba900Smillert 
3879428148Smillert #include <sys/types.h>
3979428148Smillert #include <md5.h>
40671ba900Smillert 
4179428148Smillert #define	VERSION	"2.3-OpenBSD"
42671ba900Smillert 
4379428148Smillert /*
4479428148Smillert  * If true, we output some debug information.
45671ba900Smillert  */
4679428148Smillert extern bool debug_sort;
47671ba900Smillert 
4879428148Smillert /*
4979428148Smillert  * MD5 context for random hash function
50671ba900Smillert  */
5179428148Smillert extern MD5_CTX md5_ctx;
5279428148Smillert 
5379428148Smillert /*
5479428148Smillert  * sort.c
5579428148Smillert  */
5679428148Smillert 
5779428148Smillert /*
5879428148Smillert  * This structure holds main sort options which are NOT affecting the sort ordering.
5979428148Smillert  */
6079428148Smillert struct sort_opts {
6179428148Smillert 	wint_t		field_sep;
6279428148Smillert 	int		sort_method;
6379428148Smillert 	bool		cflag;
6479428148Smillert 	bool		csilentflag;
6579428148Smillert 	bool		kflag;
6679428148Smillert 	bool		mflag;
6779428148Smillert 	bool		sflag;
6879428148Smillert 	bool		uflag;
6979428148Smillert 	bool		zflag;
7079428148Smillert 	bool		tflag;
7179428148Smillert 	bool		complex_sort;
72671ba900Smillert };
73671ba900Smillert 
7479428148Smillert /*
7579428148Smillert  * Key value structure forward declaration
76671ba900Smillert  */
7779428148Smillert struct key_value;
78671ba900Smillert 
7979428148Smillert /*
8079428148Smillert  * Cmp function
81671ba900Smillert  */
8279428148Smillert typedef int (*cmpcoll_t)(struct key_value *kv1, struct key_value *kv2, size_t offset);
8379428148Smillert 
8479428148Smillert /*
8579428148Smillert  * This structure holds "sort modifiers" - options which are affecting the sort ordering.
8679428148Smillert  */
8779428148Smillert struct sort_mods {
8879428148Smillert 	cmpcoll_t	func;
8979428148Smillert 	bool		bflag;
9079428148Smillert 	bool		dflag;
9179428148Smillert 	bool		fflag;
9279428148Smillert 	bool		gflag;
9379428148Smillert 	bool		iflag;
9479428148Smillert 	bool		Mflag;
9579428148Smillert 	bool		nflag;
9679428148Smillert 	bool		rflag;
9779428148Smillert 	bool		Rflag;
9879428148Smillert 	bool		Vflag;
9979428148Smillert 	bool		hflag;
100671ba900Smillert };
101671ba900Smillert 
10279428148Smillert extern bool need_hint;
103671ba900Smillert 
10479428148Smillert extern struct sort_opts sort_opts_vals;
10579428148Smillert 
10679428148Smillert extern struct sort_mods * const default_sort_mods;
10779428148Smillert 
10879428148Smillert #endif /* __BSD_SORT_H__ */
109