blob: dbc0086e0d068d444327bf4790cd2ca5e8bd33f8 [file] [log] [blame]
Bram Moolenaaredf3f972016-08-29 22:49:24 +02001/* vi:set ts=8 sts=4 sw=4 noet:
Bram Moolenaar071d4272004-06-13 20:20:40 +00002 *
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
Bram Moolenaar9bf703d2019-11-30 19:44:38 +01009// Before Including the MacOS specific files,
Dominique Pelleaf4a61a2021-12-27 17:21:41 +000010// let's set the OPAQUE_TOOLBOX_STRUCTS to 0 so we
Bram Moolenaar9bf703d2019-11-30 19:44:38 +010011// can access the internal structures.
12// (Until fully Carbon compliant)
13// TODO: Can we remove this? (Dany)
Bram Moolenaar071d4272004-06-13 20:20:40 +000014#if 0
15# define OPAQUE_TOOLBOX_STRUCTS 0
16#endif
17
Bram Moolenaar9bf703d2019-11-30 19:44:38 +010018// Include MAC_OS_X_VERSION_* macros
Bram Moolenaar2b1b53f2013-11-02 21:04:38 +010019#ifdef HAVE_AVAILABILITYMACROS_H
20# include <AvailabilityMacros.h>
21#endif
22
Bram Moolenaar071d4272004-06-13 20:20:40 +000023/*
Bram Moolenaar071d4272004-06-13 20:20:40 +000024 * Unix interface
25 */
Bram Moolenaar9bf703d2019-11-30 19:44:38 +010026#if defined(__APPLE_CC__) // for Project Builder and ...
Bram Moolenaar071d4272004-06-13 20:20:40 +000027# include <unistd.h>
Bram Moolenaar9bf703d2019-11-30 19:44:38 +010028// Get stat.h or something similar. Comment: How come some OS get in in vim.h
Bram Moolenaar071d4272004-06-13 20:20:40 +000029# include <sys/stat.h>
Bram Moolenaar9bf703d2019-11-30 19:44:38 +010030// && defined(HAVE_CURSE)
31// The curses.h from MacOS X provides by default some BACKWARD compatibility
32// definition which can cause us problem later on. So we undefine a few of them.
Bram Moolenaar071d4272004-06-13 20:20:40 +000033# include <curses.h>
34# undef reg
35# undef ospeed
Bram Moolenaar9bf703d2019-11-30 19:44:38 +010036// OK defined to 0 in MacOS X 10.2 curses! Remove it, we define it to be 1.
Bram Moolenaar071d4272004-06-13 20:20:40 +000037# undef OK
38#endif
39#include <signal.h>
40#include <errno.h>
41#include <stdio.h>
42#include <stdlib.h>
43#include <time.h>
Bram Moolenaar0fd92892006-03-09 22:27:48 +000044#include <dirent.h>
Bram Moolenaar071d4272004-06-13 20:20:40 +000045
46/*
47 * MacOS specific #define
48 */
49
Bram Moolenaar9bf703d2019-11-30 19:44:38 +010050// This will go away when CMD_KEY fully tested
Bram Moolenaar071d4272004-06-13 20:20:40 +000051#define USE_CMD_KEY
Bram Moolenaar9bf703d2019-11-30 19:44:38 +010052// On MacOS X use the / not the :
53// TODO: Should file such as ~/.vimrc reside instead in
54// ~/Library/Vim or ~/Library/Preferences/org.vim.vim/ ? (Dany)
55// When compiled under MacOS X (including CARBON version)
56// we use the Unix File path style. Also when UNIX is defined.
Bram Moolenaard0573012017-10-28 21:11:06 +020057#define USE_UNIXFILENAME
Bram Moolenaar071d4272004-06-13 20:20:40 +000058
59
60/*
Bram Moolenaar24e9b6f2020-03-19 16:28:44 +010061 * Generic Vim #define for Mac
Bram Moolenaar071d4272004-06-13 20:20:40 +000062 */
63
64#define FEAT_SOURCE_FFS
65#define FEAT_SOURCE_FF_MAC
66
Bram Moolenaar9bf703d2019-11-30 19:44:38 +010067#define USE_EXE_NAME // to find $VIM
68#define CASE_INSENSITIVE_FILENAME // ignore case when comparing file names
Bram Moolenaar071d4272004-06-13 20:20:40 +000069#define SPACE_IN_FILENAME
Bram Moolenaar071d4272004-06-13 20:20:40 +000070
Bram Moolenaar9bf703d2019-11-30 19:44:38 +010071#define USE_FNAME_CASE // make ":e os_Mac.c" open the file in its
72 // original case, as "os_mac.c"
Bram Moolenaar071d4272004-06-13 20:20:40 +000073#define BINARY_FILE_IO
74#define EOL_DEFAULT EOL_MAC
Bram Moolenaar071d4272004-06-13 20:20:40 +000075#define HAVE_AVAIL_MEM
76
77#ifndef HAVE_CONFIG_H
Bram Moolenaar071d4272004-06-13 20:20:40 +000078# define HAVE_STRING_H
79# define HAVE_STRCSPN
80# define HAVE_MEMSET
Bram Moolenaar9bf703d2019-11-30 19:44:38 +010081# define USE_TMPNAM // use tmpnam() instead of mktemp()
Bram Moolenaar071d4272004-06-13 20:20:40 +000082# define HAVE_FCNTL_H
83# define HAVE_QSORT
Bram Moolenaar9bf703d2019-11-30 19:44:38 +010084# define HAVE_ST_MODE // have stat.st_mode
Bram Moolenaara7241f52008-06-24 20:39:31 +000085# define HAVE_MATH_H
Bram Moolenaar071d4272004-06-13 20:20:40 +000086
87# if defined(__DATE__) && defined(__TIME__)
88# define HAVE_DATE_TIME
89# endif
90# define HAVE_STRFTIME
91#endif
92
Bram Moolenaar071d4272004-06-13 20:20:40 +000093/*
94 * Names for the EXRC, HELP and temporary files.
95 * Some of these may have been defined in the makefile.
96 */
97
98#ifndef SYS_VIMRC_FILE
Bram Moolenaard0573012017-10-28 21:11:06 +020099# define SYS_VIMRC_FILE "$VIM/vimrc"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000100#endif
101#ifndef SYS_GVIMRC_FILE
Bram Moolenaard0573012017-10-28 21:11:06 +0200102# define SYS_GVIMRC_FILE "$VIM/gvimrc"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000103#endif
104#ifndef SYS_MENU_FILE
Bram Moolenaard0573012017-10-28 21:11:06 +0200105# define SYS_MENU_FILE "$VIMRUNTIME/menu.vim"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000106#endif
107#ifndef SYS_OPTWIN_FILE
Bram Moolenaard0573012017-10-28 21:11:06 +0200108# define SYS_OPTWIN_FILE "$VIMRUNTIME/optwin.vim"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000109#endif
Bram Moolenaar8c08b5b2016-07-28 22:24:15 +0200110#ifndef VIM_DEFAULTS_FILE
Bram Moolenaard0573012017-10-28 21:11:06 +0200111# define VIM_DEFAULTS_FILE "$VIMRUNTIME/defaults.vim"
Bram Moolenaar8c08b5b2016-07-28 22:24:15 +0200112#endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000113#ifndef EVIM_FILE
Bram Moolenaard0573012017-10-28 21:11:06 +0200114# define EVIM_FILE "$VIMRUNTIME/evim.vim"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000115#endif
116
117#ifdef FEAT_GUI
118# ifndef USR_GVIMRC_FILE
Bram Moolenaard0573012017-10-28 21:11:06 +0200119# define USR_GVIMRC_FILE "~/.gvimrc"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000120# endif
121# ifndef GVIMRC_FILE
122# define GVIMRC_FILE "_gvimrc"
123# endif
124#endif
125#ifndef USR_VIMRC_FILE
Bram Moolenaard0573012017-10-28 21:11:06 +0200126# define USR_VIMRC_FILE "~/.vimrc"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000127#endif
128
129#ifndef USR_EXRC_FILE
Bram Moolenaard0573012017-10-28 21:11:06 +0200130# define USR_EXRC_FILE "~/.exrc"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000131#endif
132
133#ifndef VIMRC_FILE
134# define VIMRC_FILE "_vimrc"
135#endif
136
137#ifndef EXRC_FILE
138# define EXRC_FILE "_exrc"
139#endif
140
141#ifndef DFLT_HELPFILE
Bram Moolenaard0573012017-10-28 21:11:06 +0200142# define DFLT_HELPFILE "$VIMRUNTIME/doc/help.txt"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000143#endif
144
145#ifndef FILETYPE_FILE
146# define FILETYPE_FILE "filetype.vim"
147#endif
148#ifndef FTPLUGIN_FILE
149# define FTPLUGIN_FILE "ftplugin.vim"
150#endif
151#ifndef INDENT_FILE
152# define INDENT_FILE "indent.vim"
153#endif
154#ifndef FTOFF_FILE
155# define FTOFF_FILE "ftoff.vim"
156#endif
157#ifndef FTPLUGOF_FILE
158# define FTPLUGOF_FILE "ftplugof.vim"
159#endif
160#ifndef INDOFF_FILE
161# define INDOFF_FILE "indoff.vim"
162#endif
163
164#ifndef SYNTAX_FNAME
Bram Moolenaard0573012017-10-28 21:11:06 +0200165# define SYNTAX_FNAME "$VIMRUNTIME/syntax/%s.vim"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000166#endif
167
168#ifdef FEAT_VIMINFO
169# ifndef VIMINFO_FILE
Bram Moolenaard0573012017-10-28 21:11:06 +0200170# define VIMINFO_FILE "~/.viminfo"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000171# endif
Bram Moolenaar9bf703d2019-11-30 19:44:38 +0100172#endif // FEAT_VIMINFO
Bram Moolenaar071d4272004-06-13 20:20:40 +0000173
174#ifndef DFLT_BDIR
Bram Moolenaar9bf703d2019-11-30 19:44:38 +0100175# define DFLT_BDIR "." // default for 'backupdir'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000176#endif
177
178#ifndef DFLT_DIR
Bram Moolenaar9bf703d2019-11-30 19:44:38 +0100179# define DFLT_DIR "." // default for 'directory'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000180#endif
181
182#ifndef DFLT_VDIR
Bram Moolenaar9bf703d2019-11-30 19:44:38 +0100183# define DFLT_VDIR "$VIM/vimfiles/view" // default for 'viewdir'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000184#endif
185
186#define DFLT_ERRORFILE "errors.err"
Bram Moolenaarab79bcb2004-07-18 21:34:53 +0000187
188#ifndef DFLT_RUNTIMEPATH
Bram Moolenaard0573012017-10-28 21:11:06 +0200189# define DFLT_RUNTIMEPATH "~/.vim,$VIM/vimfiles,$VIMRUNTIME,$VIM/vimfiles/after,~/.vim/after"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000190#endif
Bram Moolenaar07268702018-03-01 21:57:32 +0100191#ifndef CLEAN_RUNTIMEPATH
192# define CLEAN_RUNTIMEPATH "$VIM/vimfiles,$VIMRUNTIME,$VIM/vimfiles/after"
193#endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000194
195/*
196 * Macintosh has plenty of memory, use large buffers
197 */
Bram Moolenaar9bf703d2019-11-30 19:44:38 +0100198#define CMDBUFFSIZE 1024 // size of the command processing buffer
Bram Moolenaar071d4272004-06-13 20:20:40 +0000199
Bram Moolenaar071d4272004-06-13 20:20:40 +0000200#ifndef DFLT_MAXMEM
Bram Moolenaar9bf703d2019-11-30 19:44:38 +0100201# define DFLT_MAXMEM 512 // use up to 512 Kbyte for buffer
Bram Moolenaar071d4272004-06-13 20:20:40 +0000202#endif
203
204#ifndef DFLT_MAXMEMTOT
Bram Moolenaar9bf703d2019-11-30 19:44:38 +0100205# define DFLT_MAXMEMTOT 2048 // use up to 2048 Kbyte for Vim
Bram Moolenaar071d4272004-06-13 20:20:40 +0000206#endif
207
208#define WILDCHAR_LIST "*?[{`$"
209
210/**************/
211#define mch_rename(src, dst) rename(src, dst)
212#define mch_remove(x) unlink((char *)(x))
213#ifndef mch_getenv
Bram Moolenaard0573012017-10-28 21:11:06 +0200214# if defined(__APPLE_CC__)
Bram Moolenaar071d4272004-06-13 20:20:40 +0000215# define mch_getenv(name) ((char_u *)getenv((char *)(name)))
Bram Moolenaar071d4272004-06-13 20:20:40 +0000216# define mch_setenv(name, val, x) setenv(name, val, x)
217# else
Bram Moolenaar9bf703d2019-11-30 19:44:38 +0100218 // vim_getenv() is in pty.c
Bram Moolenaar071d4272004-06-13 20:20:40 +0000219# define USE_VIMPTY_GETENV
220# define mch_getenv(x) vimpty_getenv(x)
221# define mch_setenv(name, val, x) setenv(name, val, x)
222# endif
223#endif
224
225#ifndef HAVE_CONFIG_H
226# ifdef __APPLE_CC__
Bram Moolenaar9bf703d2019-11-30 19:44:38 +0100227// Assuming compiling for MacOS X
228// Trying to take advantage of the prebinding
Bram Moolenaar071d4272004-06-13 20:20:40 +0000229# define HAVE_TGETENT
230# define OSPEED_EXTERN
231# define UP_BC_PC_EXTERN
232# endif
233#endif
234
Bram Moolenaar9bf703d2019-11-30 19:44:38 +0100235// Some "prep work" definition to be able to compile the MacOS X
236// version with os_unix.c instead of os_mac.c. Based on the result
237// of ./configure for console MacOS X.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000238
Bram Moolenaard0573012017-10-28 21:11:06 +0200239#ifndef SIGPROTOARG
240# define SIGPROTOARG (int)
241#endif
242#ifndef SIGDEFARG
243# define SIGDEFARG(s) (s) int s UNUSED;
244#endif
245#ifndef SIGDUMMYARG
246# define SIGDUMMYARG 0
247#endif
248#undef HAVE_AVAIL_MEM
249#ifndef HAVE_CONFIG_H
250# define RETSIGTYPE void
251# define SIGRETURN return
Bram Moolenaar9bf703d2019-11-30 19:44:38 +0100252//# define USE_SYSTEM // Output ship do debugger :(, but not compile
253# define HAVE_SYS_WAIT_H 1 // Attempt
Bram Moolenaard0573012017-10-28 21:11:06 +0200254# define HAVE_TERMIOS_H 1
255# define SYS_SELECT_WITH_SYS_TIME 1
256# define HAVE_SELECT 1
257# define HAVE_SYS_SELECT_H 1
258# define HAVE_PUTENV
259# define HAVE_SETENV
260# define HAVE_RENAME
Bram Moolenaar071d4272004-06-13 20:20:40 +0000261#endif
262
Bram Moolenaard0573012017-10-28 21:11:06 +0200263#if !defined(HAVE_CONFIG_H)
Bram Moolenaar071d4272004-06-13 20:20:40 +0000264# define HAVE_PUTENV
265#endif
266
Bram Moolenaar9bf703d2019-11-30 19:44:38 +0100267// A Mac constant causing big problem to syntax highlighting
Bram Moolenaar071d4272004-06-13 20:20:40 +0000268#define UNKNOWN_CREATOR '\?\?\?\?'