xref: /vim-8.2.3635/src/os_mac.h (revision ed37d9b3)
1 /* vi:set ts=8 sts=4 sw=4 noet:
2  *
3  * VIM - Vi IMproved	by Bram Moolenaar
4  *
5  * Do ":help uganda"  in Vim to read copying and usage conditions.
6  * Do ":help credits" in Vim to see a list of people who contributed.
7  */
8 
9 // Before Including the MacOS specific files,
10 // lets set the OPAQUE_TOOLBOX_STRUCTS to 0 so we
11 // can access the internal structures.
12 // (Until fully Carbon compliant)
13 // TODO: Can we remove this? (Dany)
14 #if 0
15 # define OPAQUE_TOOLBOX_STRUCTS 0
16 #endif
17 
18 // Include MAC_OS_X_VERSION_* macros
19 #ifdef HAVE_AVAILABILITYMACROS_H
20 # include <AvailabilityMacros.h>
21 #endif
22 
23 /*
24  * Macintosh machine-dependent things.
25  *
26  * Include the Mac header files, unless also compiling with X11 (the header
27  * files have many conflicts).
28  */
29 #ifdef FEAT_GUI_MAC
30 # include <Quickdraw.h>	    // Apple calls it QuickDraw.h...
31 # include <ToolUtils.h>
32 # include <LowMem.h>
33 # include <Scrap.h>
34 # include <Sound.h>
35 # include <TextUtils.h>
36 # include <Memory.h>
37 # include <OSUtils.h>
38 # include <Files.h>
39 # include <Script.h>
40 #endif
41 
42 /*
43  * Unix interface
44  */
45 #if defined(__APPLE_CC__) // for Project Builder and ...
46 # include <unistd.h>
47 // Get stat.h or something similar. Comment: How come some OS get in in vim.h
48 # include <sys/stat.h>
49 // && defined(HAVE_CURSE)
50 // The curses.h from MacOS X provides by default some BACKWARD compatibility
51 // definition which can cause us problem later on. So we undefine a few of them.
52 # include <curses.h>
53 # undef reg
54 # undef ospeed
55 // OK defined to 0 in MacOS X 10.2 curses!  Remove it, we define it to be 1.
56 # undef OK
57 #endif
58 #include <signal.h>
59 #include <errno.h>
60 #include <stdio.h>
61 #include <stdlib.h>
62 #include <time.h>
63 #include <dirent.h>
64 
65 /*
66  * MacOS specific #define
67  */
68 
69 // This will go away when CMD_KEY fully tested
70 #define USE_CMD_KEY
71 // On MacOS X use the / not the :
72 // TODO: Should file such as ~/.vimrc reside instead in
73 //       ~/Library/Vim or ~/Library/Preferences/org.vim.vim/ ? (Dany)
74 // When compiled under MacOS X (including CARBON version)
75 // we use the Unix File path style.  Also when UNIX is defined.
76 #define USE_UNIXFILENAME
77 
78 
79 /*
80  * Generic Vim #define for Mac
81  */
82 
83 #define FEAT_SOURCE_FFS
84 #define FEAT_SOURCE_FF_MAC
85 
86 #define USE_EXE_NAME		    // to find  $VIM
87 #define CASE_INSENSITIVE_FILENAME   // ignore case when comparing file names
88 #define SPACE_IN_FILENAME
89 
90 #define USE_FNAME_CASE		// make ":e os_Mac.c" open the file in its
91 				// original case, as "os_mac.c"
92 #define BINARY_FILE_IO
93 #define EOL_DEFAULT EOL_MAC
94 #define HAVE_AVAIL_MEM
95 
96 #ifndef HAVE_CONFIG_H
97 # define HAVE_STRING_H
98 # define HAVE_STRCSPN
99 # define HAVE_MEMSET
100 # define USE_TMPNAM		// use tmpnam() instead of mktemp()
101 # define HAVE_FCNTL_H
102 # define HAVE_QSORT
103 # define HAVE_ST_MODE		// have stat.st_mode
104 # define HAVE_MATH_H
105 
106 # if defined(__DATE__) && defined(__TIME__)
107 #  define HAVE_DATE_TIME
108 # endif
109 # define HAVE_STRFTIME
110 #endif
111 
112 /*
113  * Names for the EXRC, HELP and temporary files.
114  * Some of these may have been defined in the makefile.
115  */
116 
117 #ifndef SYS_VIMRC_FILE
118 # define SYS_VIMRC_FILE "$VIM/vimrc"
119 #endif
120 #ifndef SYS_GVIMRC_FILE
121 # define SYS_GVIMRC_FILE "$VIM/gvimrc"
122 #endif
123 #ifndef SYS_MENU_FILE
124 # define SYS_MENU_FILE	"$VIMRUNTIME/menu.vim"
125 #endif
126 #ifndef SYS_OPTWIN_FILE
127 # define SYS_OPTWIN_FILE "$VIMRUNTIME/optwin.vim"
128 #endif
129 #ifndef VIM_DEFAULTS_FILE
130 # define VIM_DEFAULTS_FILE "$VIMRUNTIME/defaults.vim"
131 #endif
132 #ifndef EVIM_FILE
133 # define EVIM_FILE	"$VIMRUNTIME/evim.vim"
134 #endif
135 
136 #ifdef FEAT_GUI
137 # ifndef USR_GVIMRC_FILE
138 #  define USR_GVIMRC_FILE "~/.gvimrc"
139 # endif
140 # ifndef GVIMRC_FILE
141 #  define GVIMRC_FILE	"_gvimrc"
142 # endif
143 #endif
144 #ifndef USR_VIMRC_FILE
145 # define USR_VIMRC_FILE	"~/.vimrc"
146 #endif
147 
148 #ifndef USR_EXRC_FILE
149 # define USR_EXRC_FILE	"~/.exrc"
150 #endif
151 
152 #ifndef VIMRC_FILE
153 # define VIMRC_FILE	"_vimrc"
154 #endif
155 
156 #ifndef EXRC_FILE
157 # define EXRC_FILE	"_exrc"
158 #endif
159 
160 #ifndef DFLT_HELPFILE
161 # define DFLT_HELPFILE	"$VIMRUNTIME/doc/help.txt"
162 #endif
163 
164 #ifndef FILETYPE_FILE
165 # define FILETYPE_FILE	"filetype.vim"
166 #endif
167 #ifndef FTPLUGIN_FILE
168 # define FTPLUGIN_FILE	"ftplugin.vim"
169 #endif
170 #ifndef INDENT_FILE
171 # define INDENT_FILE	"indent.vim"
172 #endif
173 #ifndef FTOFF_FILE
174 # define FTOFF_FILE	"ftoff.vim"
175 #endif
176 #ifndef FTPLUGOF_FILE
177 # define FTPLUGOF_FILE	"ftplugof.vim"
178 #endif
179 #ifndef INDOFF_FILE
180 # define INDOFF_FILE	"indoff.vim"
181 #endif
182 
183 #ifndef SYNTAX_FNAME
184 # define SYNTAX_FNAME	"$VIMRUNTIME/syntax/%s.vim"
185 #endif
186 
187 #ifdef FEAT_VIMINFO
188 # ifndef VIMINFO_FILE
189 #  define VIMINFO_FILE	"~/.viminfo"
190 # endif
191 #endif // FEAT_VIMINFO
192 
193 #ifndef DFLT_BDIR
194 # define DFLT_BDIR	"."	// default for 'backupdir'
195 #endif
196 
197 #ifndef DFLT_DIR
198 # define DFLT_DIR	"."	// default for 'directory'
199 #endif
200 
201 #ifndef DFLT_VDIR
202 # define DFLT_VDIR	"$VIM/vimfiles/view"	// default for 'viewdir'
203 #endif
204 
205 #define DFLT_ERRORFILE		"errors.err"
206 
207 #ifndef DFLT_RUNTIMEPATH
208 # define DFLT_RUNTIMEPATH	"~/.vim,$VIM/vimfiles,$VIMRUNTIME,$VIM/vimfiles/after,~/.vim/after"
209 #endif
210 #ifndef CLEAN_RUNTIMEPATH
211 # define CLEAN_RUNTIMEPATH	"$VIM/vimfiles,$VIMRUNTIME,$VIM/vimfiles/after"
212 #endif
213 
214 /*
215  * Macintosh has plenty of memory, use large buffers
216  */
217 #define CMDBUFFSIZE 1024	// size of the command processing buffer
218 
219 #ifndef DFLT_MAXMEM
220 # define DFLT_MAXMEM	512	// use up to  512 Kbyte for buffer
221 #endif
222 
223 #ifndef DFLT_MAXMEMTOT
224 # define DFLT_MAXMEMTOT	2048	// use up to 2048 Kbyte for Vim
225 #endif
226 
227 #define WILDCHAR_LIST "*?[{`$"
228 
229 /**************/
230 #define mch_rename(src, dst) rename(src, dst)
231 #define mch_remove(x) unlink((char *)(x))
232 #ifndef mch_getenv
233 # if defined(__APPLE_CC__)
234 #  define mch_getenv(name)  ((char_u *)getenv((char *)(name)))
235 #  define mch_setenv(name, val, x) setenv(name, val, x)
236 # else
237   // vim_getenv() is in pty.c
238 #  define USE_VIMPTY_GETENV
239 #  define mch_getenv(x) vimpty_getenv(x)
240 #  define mch_setenv(name, val, x) setenv(name, val, x)
241 # endif
242 #endif
243 
244 #ifndef HAVE_CONFIG_H
245 # ifdef __APPLE_CC__
246 // Assuming compiling for MacOS X
247 // Trying to take advantage of the prebinding
248 #  define HAVE_TGETENT
249 #  define OSPEED_EXTERN
250 #  define UP_BC_PC_EXTERN
251 # endif
252 #endif
253 
254 // Some "prep work" definition to be able to compile the MacOS X
255 // version with os_unix.c instead of os_mac.c. Based on the result
256 // of ./configure for console MacOS X.
257 
258 #ifndef SIGPROTOARG
259 # define SIGPROTOARG	(int)
260 #endif
261 #ifndef SIGDEFARG
262 # define SIGDEFARG(s)	(s) int s UNUSED;
263 #endif
264 #ifndef SIGDUMMYARG
265 # define SIGDUMMYARG	0
266 #endif
267 #undef  HAVE_AVAIL_MEM
268 #ifndef HAVE_CONFIG_H
269 # define RETSIGTYPE void
270 # define SIGRETURN  return
271 //# define USE_SYSTEM  // Output ship do debugger :(, but not compile
272 # define HAVE_SYS_WAIT_H 1 // Attempt
273 # define HAVE_TERMIOS_H 1
274 # define SYS_SELECT_WITH_SYS_TIME 1
275 # define HAVE_SELECT 1
276 # define HAVE_SYS_SELECT_H 1
277 # define HAVE_PUTENV
278 # define HAVE_SETENV
279 # define HAVE_RENAME
280 #endif
281 
282 #if !defined(HAVE_CONFIG_H)
283 # define HAVE_PUTENV
284 #endif
285 
286 // A Mac constant causing big problem to syntax highlighting
287 #define UNKNOWN_CREATOR '\?\?\?\?'
288