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