1 #ifndef _melder_h_ 2 #define _melder_h_ 3 /* melder.h 4 * 5 * Copyright (C) 1992-2021 Paul Boersma 6 * 7 * This code is free software; you can redistribute it and/or modify 8 * it under the terms of the GNU General Public License as published by 9 * the Free Software Foundation; either version 2 of the License, or (at 10 * your option) any later version. 11 * 12 * This code is distributed in the hope that it will be useful, but 13 * WITHOUT ANY WARRANTY; without even the implied warranty of 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 15 * See the GNU General Public License for more details. 16 * 17 * You should have received a copy of the GNU General Public License 18 * along with this work. If not, see <http://www.gnu.org/licenses/>. 19 */ 20 21 #include <stdio.h> 22 #include <stdlib.h> 23 #include <string.h> 24 #include <stdarg.h> 25 #include <stddef.h> 26 #include <wchar.h> 27 #include <wctype.h> 28 #ifdef __MINGW32__ 29 #include <sys/types.h> // for off_t 30 #endif 31 //#include <stdbool.h> 32 #include <functional> // std::move, std::forward 33 #include <memory> // unique_ptr 34 #include <new> // placement new 35 #include <algorithm> // std::min 36 #include <limits> // std::numeric_limits<double>::max(), std::numeric_limits<double>::lowest() 37 38 /* 39 Law of Demeter for class functions defined outside class definition. 40 */ 41 #define our this -> 42 /* The single most useful macro in Praat: */ 43 #define my me -> 44 #define thy thee -> 45 #define your you -> 46 #define his him -> 47 #define her she -> 48 #define iam(klas) klas me = (klas) void_me 49 50 #include "melder_assert.h" // Melder_assert 51 #include "melder_int.h" // <stdint.h>, int64, integer_to_uinteger (requires Melder_assert) 52 #include "melder_pointer.h" // NULL 53 #include "melder_real.h" // longdouble, MelderPoint, MelderRealRange 54 #include "NUMmath.h" // <math.h>, NUMpi, undefined 55 #include "complex.h" // <complex>, dcomplex 56 57 #include "melder_alloc.h" // Melder_malloc (requires int64), Melder_free, MelderArray 58 #include "melder_string32.h" // char32, conststring32, autostring32 (requires Melder_malloc, our), Melder_dup 59 #include "melder_kar.h" // Melder_hasInk (requires char32), Melder_toLowerCase 60 #include "melder_str32.h" // str32len, str32cpy, str32cmp_caseInsensitive (requires Melder_toLowerCase) 61 62 #include "enums.h" 63 #include "melder_enums.h" 64 65 #include "melder_tensor.h" // VEC, autoMAT, Melder_VEC 66 #include "melder_colour.h" // MelderColour (requires VEC) 67 #include "melder_ftoa.h" // Melder_double, Melder_pad (require dcomplex, conststring32, MelderColour) 68 #include "melder_console.h" // MelderConsole (requires conststring32) 69 #include "melder_textencoding.h" // str32len_utf8, Melder_32to8 70 #include "melder_atof.h" 71 #include "melder_files.h" // Melder_fopen, MelderFile, MelderDir 72 #include "melder_strvec.h" // STRVEC, autoSTRVEC (requires MelderArray) 73 #include "melder_sort.h" // sort_VEC_inout (requires VEC), sort_STRVEC_inout (requires STRVEC) 74 75 #include "MelderArg.h" // MelderArg (requires Melder_double, MelderFile, Melder_VEC) 76 #include "melder_debug.h" // trace (requires MelderFile, MelderArg), Melder_debug 77 #include "MelderFile.h" // MelderFile_open (requires MelderFile), MelderFile_write (requires MelderArg) 78 #include "MelderString.h" // MelderString_append (requires MelderArg) 79 #include "melder_cat.h" // Melder_cat (requires MelderArg) 80 #include "melder_sprint.h" // Melder_sprint (requires MelderArg) 81 #include "melder_search.h" 82 #include "melder_casual.h" 83 #include "melder_info.h" 84 #include "melder_error.h" // Melder_throw (requires MelderArg), Melder_crash 85 #include "melder_require.h" 86 #include "melder_warning.h" 87 #include "melder_progress.h" 88 #include "melder_play.h" // Melder_record, Melder_play, Melder_beep 89 #include "melder_help.h" 90 #include "melder_ftoi.h" 91 #include "melder_time.h" // stopwatch, sleep, clock 92 #include "melder_audio.h" 93 #include "melder_audiofiles.h" 94 95 /* The following trick uses Melder_debug only because it is the only plain variable known to exist at the moment. */ 96 #define Melder_offsetof(klas,member) (int) ((char *) & ((klas) & Melder_debug) -> member - (char *) & Melder_debug) 97 98 /********** SYSTEM VERSION **********/ 99 100 /* 101 For MacOS, this is set in Melder_init. 102 */ 103 inline int32 Melder_systemVersion; 104 105 /********** ENFORCE INTERACTIVE BEHAVIOUR **********/ 106 107 /* Procedures to enforce interactive behaviour of the Melder_XXXXXX routines. */ 108 109 /* 110 Set in praat_init. 111 True if run from the batch or from an interactive command-line interface. 112 */ 113 inline bool Melder_batch; 114 115 /* 116 True if running a script. 117 */ 118 inline bool Melder_backgrounding; 119 120 void Melder_init (); // inits NUmrandom, alloc, message, Melder_systemVersion 121 122 #include "melder_quantity.h" 123 124 #include "MelderReadText.h" 125 #include "melder_tensorio.h" // requires MelderReadText 126 #include "melder_sysenv.h" 127 #include "abcio_enums.h" 128 #include "abcio.h" // requires MelderReadText 129 130 #include "melder_templates.h" // Melder_ENABLE_IF_ISA, MelderCallback, MelderCompareHook 131 132 #include "NUMspecfunc.h" 133 #include "NUMear.h" 134 #include "NUMinterpol.h" 135 #include "NUMmetrics.h" 136 #include "NUMrandom.h" 137 #include "NUMfilter.h" 138 #include "NUMlinprog.h" 139 140 #include "regularExp.h" 141 #include "PAIRWISE_SUM.h" 142 143 #include "NUM.h" 144 #include "STR.h" 145 #include "VEC.h" 146 #include "MAT.h" 147 #include "STRVEC.h" 148 149 /* End of file melder.h */ 150 #endif 151