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