diff options
author | Bram Moolenaar <Bram@vim.org> | 2004-12-19 22:46:22 +0000 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2004-12-19 22:46:22 +0000 |
commit | 1cd871b5341bf43ee99e136844e3131014880f92 (patch) | |
tree | 6bd9573dbc14de3c4ec85e424cbec9c8d1ee0ed8 /src | |
parent | 46c9c73de8def79baf8f0a34a12549f6c14944f3 (diff) | |
download | vim-git-1cd871b5341bf43ee99e136844e3131014880f92.tar.gz |
updated for version 7.0023v7.0023
Diffstat (limited to 'src')
58 files changed, 1558 insertions, 997 deletions
diff --git a/src/INSTALLpc.txt b/src/INSTALLpc.txt index 1e7d3297a..051463986 100644 --- a/src/INSTALLpc.txt +++ b/src/INSTALLpc.txt @@ -29,7 +29,7 @@ Summary: ren Make_bc3.mak Makefile; make 16 bit, Borland C++ and Turbo C++ ren Make_tcc.mak Makefile; make 16 bit, Turbo C make -f Make_djg.mak 32 bit, DJGPP 2.0 -make -f Make_bc5.mak 32 bit, Borland C++ 5.0 (edit it to +make -f Make_bc5.mak 32 bit, Borland C++ 5.x (edit it to define DOS) Warning: Be sure to use the right make.exe. Microsoft C make doesn't work; @@ -58,9 +58,11 @@ warning (about an argument to signal()). Make_bc5.mak is for those that have Borland C++ 5.0 or later. At the top of the file, there are some variables you can change to make either a 32-bit Windows exe (GUI or console mode), or a 16-bit MS-DOS version. +NOTE: multi-byte support is broken in the Borland libraries, not everything +will work properly! Esp. handling multi-byte file names. -If you get all kinds of strange error messages when compiling, try adding <CR> -characters at the end of each line. +If you get all kinds of strange error messages when compiling, try adding +changing the file format from "unix" to "dos". 2. Win32 (Windows NT and Windows 95) diff --git a/src/Make_bc5.mak b/src/Make_bc5.mak index 271820d8e..75b0f1d05 100644 --- a/src/Make_bc5.mak +++ b/src/Make_bc5.mak @@ -53,6 +53,9 @@ # of Ruby will cause a compile error on these systems. # DYNAMIC_RUBY no or yes: use yes to load the Ruby DLL dynamically (no) # MBYTE no or yes: set to yes for multi-byte support (yes) +# NOTE: multi-byte support is broken in the Borland libraries, +# not everything will work properly! Esp. handling multi-byte +# file names. # IME no or yes: set to yes for multi-byte IME support (yes) # DYNAMIC_IME no or yes: set to yes to load imm32.dll dynamically (yes) # GETTEXT no or yes: set to yes for multi-language support (yes) diff --git a/src/Make_cyg.mak b/src/Make_cyg.mak index b8692300a..f2e4c5a2c 100644 --- a/src/Make_cyg.mak +++ b/src/Make_cyg.mak @@ -1,6 +1,6 @@ # # Makefile for VIM on Win32, using Cygnus gcc -# Last updated by Dan Sharp. Last Change: 2004 Jul 01 +# Last updated by Dan Sharp. Last Change: 2004 Dec 17 # # This compiles Vim as a Windows application. If you want Vim to run as a # Cygwin application use the Makefile (just like on Unix). @@ -25,7 +25,7 @@ # DYNAMIC_IME no or yes: set to yes to load imm32.dll dynamically (yes) # OLE no or yes: set to yes to make OLE gvim (no) # DEBUG no or yes: set to yes if you wish a DEBUGging build (no) -# CPUNR i386 through pentium4: select -mcpu argument to compile with (i386) +# CPUNR No longer supported, use ARCH. # ARCH i386 through pentium4: select -march argument to compile with (i386) # USEDLL no or yes: set to yes to use the Runtime library DLL (no) # For USEDLL=yes the cygwin1.dll is required to run Vim. @@ -67,12 +67,6 @@ ifndef ARCH ARCH = i386 endif -ifndef CPUNR -# Setting -march implicitly sets -mcpu to the same value, -# so reflect that in the defaults here. -CPUNR = $(ARCH) -endif - ifndef WINVER WINVER = 0x0400 endif @@ -96,7 +90,7 @@ endif DEFINES = -DWIN32 -DHAVE_PATHDEF -DFEAT_$(FEATURES) \ -DWINVER=$(WINVER) -D_WIN32_WINNT=$(WINVER) -INCLUDES = -mcpu=$(CPUNR) -march=$(ARCH) -Iproto +INCLUDES = -march=$(ARCH) -Iproto #>>>>> name of the compiler and linker, name of lib directory CC = gcc @@ -260,7 +254,7 @@ ifeq ($(OPTIMIZE), SIZE) OPTFLAG = -Os else ifeq ($(OPTIMIZE), MAXSPEED) -OPTFLAG = -O3 -fomit-frame-pointer -freg-struct-return -malign-double +OPTFLAG = -O3 -fomit-frame-pointer -freg-struct-return else OPTFLAG = -O2 endif @@ -428,7 +422,7 @@ uninstal.exe: uninstal.c $(CC) $(CFLAGS) -o uninstal.exe uninstal.c $(LIBS) $(OUTDIR): - mkdir $(OUTDIR) + mkdir -p $(OUTDIR) tags: command /c ctags *.c $(INCL) diff --git a/src/Make_ming.mak b/src/Make_ming.mak index 2c8755cac..4074a88ea 100644 --- a/src/Make_ming.mak +++ b/src/Make_ming.mak @@ -31,9 +31,7 @@ GUI=yes # FEATURES=[TINY | SMALL | NORMAL | BIG | HUGE] # set to TINY to make minimal version (few features) FEATURES=BIG -# set to one of i386, i486, i586, i686 as the *target* processor -CPUNR=i686 -# set to same choices as 'CPUNR', but will prevent running on 'lower' cpus: +# set to one of i386, i486, i586, i686 as the minimum target processor ARCH=i386 # set to yes to cross-compile from unix; no=native Windows CROSS=no @@ -242,7 +240,7 @@ endif #>>>>> end of choices ########################################################################### -CFLAGS = -Iproto $(DEFINES) -pipe -w -march=$(ARCH) -mcpu=$(CPUNR) -Wall +CFLAGS = -Iproto $(DEFINES) -pipe -w -march=$(ARCH) -Wall ifdef GETTEXT DEFINES +=-DHAVE_GETTEXT -DHAVE_LOCALE_H @@ -334,7 +332,7 @@ CFLAGS += -Os else ifeq ($(OPTIMIZE), MAXSPEED) CFLAGS += -O3 -CFLAGS += -fomit-frame-pointer -freg-struct-return -malign-double +CFLAGS += -fomit-frame-pointer -freg-struct-return else # SPEED CFLAGS += -O2 endif @@ -549,7 +547,7 @@ $(OUTDIR)/vimrc.o: $(OUTDIR)/vimres.res $(WINDRES) $(OUTDIR)/vimres.res $(OUTDIR)/vimrc.o $(OUTDIR): - mkdir $(OUTDIR) + mkdir -p $(OUTDIR) $(OUTDIR)/ex_docmd.o: ex_docmd.c $(INCL) ex_cmds.h $(CC) -c $(CFLAGS) ex_docmd.c -o $(OUTDIR)/ex_docmd.o diff --git a/src/Make_mvc.mak b/src/Make_mvc.mak index 63a99f220..90dd888f3 100644 --- a/src/Make_mvc.mak +++ b/src/Make_mvc.mak @@ -637,7 +637,7 @@ $(VIM): $(OUTDIR) $(OBJ) $(GUI_OBJ) $(OLE_OBJ) $(OLE_IDL) $(MZSCHEME_OBJ) $(PERL $(VIM).exe: $(VIM) $(OUTDIR): - if not exist $(OUTDIR)/nul mkdir $(OUTDIR) + if not exist $(OUTDIR)/nul mkdir $(OUTDIR) install.exe: dosinst.c $(CC) /nologo -DNDEBUG -DWIN32 dosinst.c kernel32.lib shell32.lib ole32.lib advapi32.lib uuid.lib diff --git a/src/Make_vms.mms b/src/Make_vms.mms index f1ce93a29..53793539b 100644 --- a/src/Make_vms.mms +++ b/src/Make_vms.mms @@ -2,9 +2,9 @@ # Makefile for Vim on OpenVMS # # Maintainer: Zoltan Arpadffy <arpadffy@polarhome.com> -# Last change: 2004 May 04 +# Last change: 2004 Dec 16 # -# This has script been tested on VMS 6.2 to 7.3 on DEC Alpha and VAX +# This has script been tested on VMS 6.2 to 7.3 on DEC Alpha, VAX and IA64 # with MMS and MMK # # The following could be built: @@ -454,4 +454,282 @@ ruby_env : -@ ! .ENDIF - +buffer.obj : buffer.c vim.h [.auto]config.h feature.h os_unix.h \ + ascii.h keymap.h term.h macros.h structs.h regexp.h \ + gui.h gui_beval.h [.proto]gui_beval.pro option.h ex_cmds.h proto.h \ + globals.h farsi.h arabic.h version.h +charset.obj : charset.c vim.h [.auto]config.h feature.h os_unix.h \ + ascii.h keymap.h term.h macros.h structs.h regexp.h \ + gui.h gui_beval.h [.proto]gui_beval.pro option.h ex_cmds.h proto.h \ + globals.h farsi.h arabic.h +diff.obj : diff.c vim.h [.auto]config.h feature.h os_unix.h \ + ascii.h keymap.h term.h macros.h structs.h regexp.h gui.h gui_beval.h \ + [.proto]gui_beval.pro option.h ex_cmds.h proto.h globals.h farsi.h \ + arabic.h +digraph.obj : digraph.c vim.h [.auto]config.h feature.h os_unix.h \ + ascii.h keymap.h term.h macros.h structs.h regexp.h \ + gui.h gui_beval.h [.proto]gui_beval.pro option.h ex_cmds.h proto.h \ + globals.h farsi.h arabic.h +edit.obj : edit.c vim.h [.auto]config.h feature.h os_unix.h \ + ascii.h keymap.h term.h macros.h structs.h regexp.h gui.h gui_beval.h \ + [.proto]gui_beval.pro option.h ex_cmds.h proto.h globals.h farsi.h \ + arabic.h +eval.obj : eval.c vim.h [.auto]config.h feature.h os_unix.h \ + ascii.h keymap.h term.h macros.h structs.h regexp.h gui.h gui_beval.h \ + [.proto]gui_beval.pro option.h ex_cmds.h proto.h globals.h farsi.h \ + arabic.h version.h +ex_cmds.obj : ex_cmds.c vim.h [.auto]config.h feature.h os_unix.h \ + ascii.h keymap.h term.h macros.h structs.h regexp.h \ + gui.h gui_beval.h [.proto]gui_beval.pro option.h ex_cmds.h proto.h \ + globals.h farsi.h arabic.h version.h +ex_cmds2.obj : ex_cmds2.c vim.h [.auto]config.h feature.h os_unix.h \ + ascii.h keymap.h term.h macros.h structs.h regexp.h \ + gui.h gui_beval.h [.proto]gui_beval.pro option.h ex_cmds.h proto.h \ + globals.h farsi.h arabic.h version.h +ex_docmd.obj : ex_docmd.c vim.h [.auto]config.h feature.h os_unix.h \ + ascii.h keymap.h term.h macros.h structs.h regexp.h \ + gui.h gui_beval.h [.proto]gui_beval.pro option.h ex_cmds.h proto.h \ + globals.h farsi.h arabic.h +ex_eval.obj : ex_eval.c vim.h [.auto]config.h feature.h os_unix.h \ + ascii.h keymap.h term.h macros.h structs.h regexp.h \ + gui.h gui_beval.h [.proto]gui_beval.pro option.h ex_cmds.h proto.h \ + globals.h farsi.h arabic.h +ex_getln.obj : ex_getln.c vim.h [.auto]config.h feature.h os_unix.h \ + ascii.h keymap.h term.h macros.h structs.h regexp.h \ + gui.h gui_beval.h [.proto]gui_beval.pro option.h ex_cmds.h proto.h \ + globals.h farsi.h arabic.h +fileio.obj : fileio.c vim.h [.auto]config.h feature.h os_unix.h \ + ascii.h keymap.h term.h macros.h structs.h regexp.h \ + gui.h gui_beval.h [.proto]gui_beval.pro option.h ex_cmds.h proto.h \ + globals.h farsi.h arabic.h +fold.obj : fold.c vim.h [.auto]config.h feature.h os_unix.h \ + ascii.h keymap.h term.h macros.h structs.h regexp.h gui.h gui_beval.h \ + [.proto]gui_beval.pro option.h ex_cmds.h proto.h globals.h farsi.h \ + arabic.h +getchar.obj : getchar.c vim.h [.auto]config.h feature.h os_unix.h \ + ascii.h keymap.h term.h macros.h structs.h regexp.h \ + gui.h gui_beval.h [.proto]gui_beval.pro option.h ex_cmds.h proto.h \ + globals.h farsi.h arabic.h +if_cscope.obj : if_cscope.c vim.h [.auto]config.h feature.h os_unix.h \ + ascii.h keymap.h term.h macros.h structs.h regexp.h \ + gui.h gui_beval.h [.proto]gui_beval.pro option.h ex_cmds.h proto.h \ + globals.h farsi.h arabic.h if_cscope.h +if_xcmdsrv.obj : if_xcmdsrv.c vim.h [.auto]config.h feature.h os_unix.h \ + ascii.h keymap.h term.h macros.h structs.h regexp.h \ + gui.h gui_beval.h [.proto]gui_beval.pro option.h ex_cmds.h proto.h \ + globals.h farsi.h arabic.h version.h +main.obj : main.c vim.h [.auto]config.h feature.h os_unix.h \ + ascii.h keymap.h term.h macros.h structs.h regexp.h gui.h gui_beval.h \ + [.proto]gui_beval.pro option.h ex_cmds.h proto.h globals.h farsi.h \ + arabic.h farsi.c arabic.c +mark.obj : mark.c vim.h [.auto]config.h feature.h os_unix.h \ + ascii.h keymap.h term.h macros.h structs.h regexp.h gui.h gui_beval.h \ + [.proto]gui_beval.pro option.h ex_cmds.h proto.h globals.h farsi.h \ + arabic.h +memfile.obj : memfile.c vim.h [.auto]config.h feature.h os_unix.h \ + ascii.h keymap.h term.h macros.h structs.h regexp.h \ + gui.h gui_beval.h [.proto]gui_beval.pro option.h ex_cmds.h proto.h \ + globals.h farsi.h arabic.h +memline.obj : memline.c vim.h [.auto]config.h feature.h os_unix.h \ + ascii.h keymap.h term.h macros.h structs.h regexp.h \ + gui.h gui_beval.h [.proto]gui_beval.pro option.h ex_cmds.h proto.h \ + globals.h farsi.h arabic.h +menu.obj : menu.c vim.h [.auto]config.h feature.h os_unix.h \ + ascii.h keymap.h term.h macros.h structs.h regexp.h gui.h gui_beval.h \ + [.proto]gui_beval.pro option.h ex_cmds.h proto.h globals.h farsi.h \ + arabic.h +message.obj : message.c vim.h [.auto]config.h feature.h os_unix.h \ + ascii.h keymap.h term.h macros.h structs.h regexp.h \ + gui.h gui_beval.h [.proto]gui_beval.pro option.h ex_cmds.h proto.h \ + globals.h farsi.h arabic.h +misc1.obj : misc1.c vim.h [.auto]config.h feature.h os_unix.h \ + ascii.h keymap.h term.h macros.h structs.h regexp.h gui.h gui_beval.h \ + [.proto]gui_beval.pro option.h ex_cmds.h proto.h globals.h farsi.h \ + arabic.h version.h +misc2.obj : misc2.c vim.h [.auto]config.h feature.h os_unix.h \ + ascii.h keymap.h term.h macros.h structs.h regexp.h gui.h gui_beval.h \ + [.proto]gui_beval.pro option.h ex_cmds.h proto.h globals.h farsi.h \ + arabic.h +move.obj : move.c vim.h [.auto]config.h feature.h os_unix.h \ + ascii.h keymap.h term.h macros.h structs.h regexp.h gui.h gui_beval.h \ + [.proto]gui_beval.pro option.h ex_cmds.h proto.h globals.h farsi.h \ + arabic.h +mbyte.obj : mbyte.c vim.h [.auto]config.h feature.h os_unix.h \ + ascii.h keymap.h term.h macros.h structs.h regexp.h gui.h gui_beval.h \ + [.proto]gui_beval.pro option.h ex_cmds.h proto.h globals.h farsi.h \ + arabic.h +normal.obj : normal.c vim.h [.auto]config.h feature.h os_unix.h \ + ascii.h keymap.h term.h macros.h structs.h regexp.h \ + gui.h gui_beval.h [.proto]gui_beval.pro option.h ex_cmds.h proto.h \ + globals.h farsi.h arabic.h +ops.obj : ops.c vim.h [.auto]config.h feature.h os_unix.h \ + ascii.h keymap.h term.h macros.h structs.h regexp.h gui.h gui_beval.h \ + [.proto]gui_beval.pro option.h ex_cmds.h proto.h globals.h farsi.h \ + arabic.h +option.obj : option.c vim.h [.auto]config.h feature.h os_unix.h \ + ascii.h keymap.h term.h macros.h structs.h regexp.h \ + gui.h gui_beval.h [.proto]gui_beval.pro option.h ex_cmds.h proto.h \ + globals.h farsi.h arabic.h +os_unix.obj : os_unix.c vim.h [.auto]config.h feature.h os_unix.h \ + ascii.h keymap.h term.h macros.h structs.h regexp.h \ + gui.h gui_beval.h [.proto]gui_beval.pro option.h ex_cmds.h proto.h \ + globals.h farsi.h arabic.h os_unixx.h +os_vms.obj : os_vms.c vim.h [.auto]config.h feature.h os_unix.h \ + ascii.h keymap.h term.h macros.h structs.h regexp.h \ + gui.h gui_beval.h [.proto]gui_beval.pro option.h ex_cmds.h proto.h \ + globals.h farsi.h arabic.h os_unixx.h +pathdef.obj : pathdef.c vim.h [.auto]config.h feature.h os_unix.h \ + ascii.h keymap.h term.h macros.h structs.h regexp.h \ + gui.h gui_beval.h [.proto]gui_beval.pro option.h ex_cmds.h proto.h \ + globals.h farsi.h arabic.h +quickfix.obj : quickfix.c vim.h [.auto]config.h feature.h os_unix.h \ + ascii.h keymap.h term.h macros.h structs.h regexp.h \ + gui.h gui_beval.h [.proto]gui_beval.pro option.h ex_cmds.h proto.h \ + globals.h farsi.h arabic.h +regexp.obj : regexp.c vim.h [.auto]config.h feature.h os_unix.h \ + ascii.h keymap.h term.h macros.h structs.h regexp.h \ + gui.h gui_beval.h [.proto]gui_beval.pro option.h ex_cmds.h proto.h \ + globals.h farsi.h arabic.h +screen.obj : screen.c vim.h [.auto]config.h feature.h os_unix.h \ + ascii.h keymap.h term.h macros.h structs.h regexp.h \ + gui.h gui_beval.h [.proto]gui_beval.pro option.h ex_cmds.h proto.h \ + globals.h farsi.h arabic.h +search.obj : search.c vim.h [.auto]config.h feature.h os_unix.h \ + ascii.h keymap.h term.h macros.h structs.h regexp.h \ + gui.h gui_beval.h [.proto]gui_beval.pro option.h ex_cmds.h proto.h \ + globals.h farsi.h arabic.h +syntax.obj : syntax.c vim.h [.auto]config.h feature.h os_unix.h \ + ascii.h keymap.h term.h macros.h structs.h regexp.h \ + gui.h gui_beval.h [.proto]gui_beval.pro option.h ex_cmds.h proto.h \ + globals.h farsi.h arabic.h +tag.obj : tag.c vim.h [.auto]config.h feature.h os_unix.h \ + ascii.h keymap.h term.h macros.h structs.h regexp.h gui.h gui_beval.h \ + [.proto]gui_beval.pro option.h ex_cmds.h proto.h globals.h farsi.h \ + arabic.h +term.obj : term.c vim.h [.auto]config.h feature.h os_unix.h \ + ascii.h keymap.h term.h macros.h structs.h regexp.h gui.h gui_beval.h \ + [.proto]gui_beval.pro option.h ex_cmds.h proto.h globals.h farsi.h \ + arabic.h +termlib.obj : termlib.c vim.h [.auto]config.h feature.h os_unix.h \ + ascii.h keymap.h term.h macros.h structs.h regexp.h gui.h gui_beval.h \ + [.proto]gui_beval.pro option.h ex_cmds.h proto.h globals.h farsi.h \ + arabic.h +ui.obj : ui.c vim.h [.auto]config.h feature.h os_unix.h \ + ascii.h keymap.h term.h macros.h structs.h regexp.h gui.h gui_beval.h \ + [.proto]gui_beval.pro option.h ex_cmds.h proto.h globals.h farsi.h \ + arabic.h +undo.obj : undo.c vim.h [.auto]config.h feature.h os_unix.h \ + ascii.h keymap.h term.h macros.h structs.h regexp.h gui.h gui_beval.h \ + [.proto]gui_beval.pro option.h ex_cmds.h proto.h globals.h farsi.h \ + arabic.h +version.obj : version.c vim.h [.auto]config.h feature.h os_unix.h \ + ascii.h keymap.h term.h macros.h structs.h regexp.h \ + gui.h gui_beval.h [.proto]gui_beval.pro option.h ex_cmds.h proto.h \ + globals.h farsi.h arabic.h version.h +window.obj : window.c vim.h [.auto]config.h feature.h os_unix.h \ + ascii.h keymap.h term.h macros.h structs.h regexp.h \ + gui.h gui_beval.h [.proto]gui_beval.pro option.h ex_cmds.h proto.h \ + globals.h farsi.h arabic.h +gui.obj : gui.c vim.h [.auto]config.h feature.h os_unix.h \ + ascii.h keymap.h term.h macros.h structs.h regexp.h gui.h gui_beval.h \ + [.proto]gui_beval.pro option.h ex_cmds.h proto.h globals.h farsi.h \ + arabic.h +gui_gtk.obj : gui_gtk.c gui_gtk_f.h vim.h [.auto]config.h feature.h \ + os_unix.h ascii.h keymap.h term.h macros.h structs.h \ + regexp.h gui.h gui_beval.h [.proto]gui_beval.pro option.h ex_cmds.h \ + proto.h globals.h farsi.h arabic.h [-.pixmaps]stock_icons.h +gui_gtk_f.obj : gui_gtk_f.c vim.h [.auto]config.h feature.h os_unix.h \ + ascii.h keymap.h term.h macros.h structs.h regexp.h \ + gui.h gui_beval.h [.proto]gui_beval.pro option.h ex_cmds.h proto.h \ + globals.h farsi.h arabic.h gui_gtk_f.h +gui_motif.obj : gui_motif.c vim.h [.auto]config.h feature.h os_unix.h \ + ascii.h keymap.h term.h macros.h structs.h regexp.h \ + gui.h gui_beval.h [.proto]gui_beval.pro option.h ex_cmds.h proto.h \ + globals.h farsi.h arabic.h [-.pixmaps]alert.xpm [-.pixmaps]error.xpm \ + [-.pixmaps]generic.xpm [-.pixmaps]info.xpm [-.pixmaps]quest.xpm +gui_athena.obj : gui_athena.c vim.h [.auto]config.h feature.h os_unix.h \ + ascii.h keymap.h term.h macros.h structs.h regexp.h \ + gui.h gui_beval.h [.proto]gui_beval.pro option.h ex_cmds.h proto.h \ + globals.h farsi.h arabic.h gui_at_sb.h +gui_gtk_x11.obj : gui_gtk_x11.c vim.h [.auto]config.h feature.h os_unix.h \ + ascii.h keymap.h term.h macros.h structs.h regexp.h \ + gui.h gui_beval.h [.proto]gui_beval.pro option.h ex_cmds.h proto.h \ + globals.h farsi.h arabic.h gui_gtk_f.h [-.runtime]vim32x32.xpm \ + [-.runtime]vim16x16.xpm [-.runtime]vim48x48.xpm +gui_x11.obj : gui_x11.c vim.h [.auto]config.h feature.h os_unix.h \ + ascii.h keymap.h term.h macros.h structs.h regexp.h \ + gui.h gui_beval.h [.proto]gui_beval.pro option.h ex_cmds.h proto.h \ + globals.h farsi.h arabic.h [-.runtime]vim32x32.xpm \ + [-.runtime]vim16x16.xpm [-.runtime]vim48x48.xpm [-.pixmaps]tb_new.xpm \ + [-.pixmaps]tb_open.xpm [-.pixmaps]tb_close.xpm [-.pixmaps]tb_save.xpm \ + [-.pixmaps]tb_print.xpm [-.pixmaps]tb_cut.xpm [-.pixmaps]tb_copy.xpm \ + [-.pixmaps]tb_paste.xpm [-.pixmaps]tb_find.xpm \ + [-.pixmaps]tb_find_next.xpm [-.pixmaps]tb_find_prev.xpm \ + [-.pixmaps]tb_find_help.xpm [-.pixmaps]tb_exit.xpm \ + [-.pixmaps]tb_undo.xpm [-.pixmaps]tb_redo.xpm [-.pixmaps]tb_help.xpm \ + [-.pixmaps]tb_macro.xpm [-.pixmaps]tb_make.xpm \ + [-.pixmaps]tb_save_all.xpm [-.pixmaps]tb_jump.xpm \ + [-.pixmaps]tb_ctags.xpm [-.pixmaps]tb_load_session.xpm \ + [-.pixmaps]tb_save_session.xpm [-.pixmaps]tb_new_session.xpm \ + [-.pixmaps]tb_blank.xpm [-.pixmaps]tb_maximize.xpm \ + [-.pixmaps]tb_split.xpm [-.pixmaps]tb_minimize.xpm \ + [-.pixmaps]tb_shell.xpm [-.pixmaps]tb_replace.xpm \ + [-.pixmaps]tb_vsplit.xpm [-.pixmaps]tb_maxwidth.xpm \ + [-.pixmaps]tb_minwidth.xpm +gui_at_sb.obj : gui_at_sb.c vim.h [.auto]config.h feature.h os_unix.h \ + ascii.h keymap.h term.h macros.h structs.h regexp.h \ + gui.h gui_beval.h [.proto]gui_beval.pro option.h ex_cmds.h proto.h \ + globals.h farsi.h arabic.h gui_at_sb.h +gui_at_fs.obj : gui_at_fs.c vim.h [.auto]config.h feature.h os_unix.h \ + ascii.h keymap.h term.h macros.h structs.h regexp.h \ + gui.h gui_beval.h [.proto]gui_beval.pro option.h ex_cmds.h proto.h \ + globals.h farsi.h arabic.h gui_at_sb.h +pty.obj : pty.c vim.h [.auto]config.h feature.h os_unix.h \ + ascii.h keymap.h term.h macros.h structs.h regexp.h gui.h gui_beval.h \ + [.proto]gui_beval.pro option.h ex_cmds.h proto.h globals.h farsi.h \ + arabic.h +hangulin.obj : hangulin.c vim.h [.auto]config.h feature.h os_unix.h \ + ascii.h keymap.h term.h macros.h structs.h regexp.h \ + gui.h gui_beval.h [.proto]gui_beval.pro option.h ex_cmds.h proto.h \ + globals.h farsi.h arabic.h +if_perl.obj : [.auto]if_perl.c vim.h [.auto]config.h feature.h os_unix.h \ + ascii.h keymap.h term.h macros.h structs.h regexp.h \ + gui.h gui_beval.h [.proto]gui_beval.pro option.h ex_cmds.h proto.h \ + globals.h farsi.h arabic.h +if_perlsfio.obj : if_perlsfio.c vim.h [.auto]config.h feature.h os_unix.h \ + ascii.h keymap.h term.h macros.h structs.h regexp.h \ + gui.h gui_beval.h [.proto]gui_beval.pro option.h ex_cmds.h proto.h \ + globals.h farsi.h arabic.h +if_python.obj : if_python.c vim.h [.auto]config.h feature.h os_unix.h \ + ascii.h keymap.h term.h macros.h structs.h regexp.h \ + gui.h gui_beval.h [.proto]gui_beval.pro option.h ex_cmds.h proto.h \ + globals.h farsi.h arabic.h +if_tcl.obj : if_tcl.c vim.h [.auto]config.h feature.h os_unix.h \ + ascii.h keymap.h term.h macros.h structs.h regexp.h \ + gui.h gui_beval.h [.proto]gui_beval.pro option.h ex_cmds.h proto.h \ + globals.h farsi.h arabic.h +if_ruby.obj : if_ruby.c vim.h [.auto]config.h feature.h os_unix.h \ + ascii.h keymap.h term.h macros.h structs.h regexp.h \ + gui.h gui_beval.h [.proto]gui_beval.pro option.h ex_cmds.h proto.h \ + globals.h farsi.h arabic.h version.h +if_sniff.obj : if_sniff.c vim.h [.auto]config.h feature.h os_unix.h \ + ascii.h keymap.h term.h macros.h structs.h regexp.h \ + gui.h gui_beval.h [.proto]gui_beval.pro option.h ex_cmds.h proto.h \ + globals.h farsi.h arabic.h os_unixx.h +gui_beval.obj : gui_beval.c vim.h [.auto]config.h feature.h os_unix.h \ + ascii.h keymap.h term.h macros.h structs.h regexp.h \ + gui.h gui_beval.h [.proto]gui_beval.pro option.h ex_cmds.h proto.h \ + globals.h farsi.h arabic.h +workshop.obj : workshop.c [.auto]config.h integration.h vim.h feature.h \ + os_unix.h ascii.h keymap.h term.h macros.h structs.h \ + regexp.h gui.h gui_beval.h [.proto]gui_beval.pro option.h ex_cmds.h \ + proto.h globals.h farsi.h arabic.h version.h workshop.h +wsdebug.obj : wsdebug.c +integration.obj : integration.c vim.h [.auto]config.h feature.h os_unix.h \ + ascii.h keymap.h term.h macros.h structs.h regexp.h \ + gui.h gui_beval.h [.proto]gui_beval.pro option.h ex_cmds.h proto.h \ + globals.h farsi.h arabic.h integration.h +netbeans.obj : netbeans.c vim.h [.auto]config.h feature.h os_unix.h \ + ascii.h keymap.h term.h macros.h structs.h regexp.h \ + gui.h gui_beval.h [.proto]gui_beval.pro option.h ex_cmds.h proto.h \ + globals.h farsi.h arabic.h version.h diff --git a/src/auto/configure b/src/auto/configure index e30c2dde3..ddab04168 100755 --- a/src/auto/configure +++ b/src/auto/configure @@ -6932,15 +6932,36 @@ fi if test -n "$with_tlib"; then echo "$ac_t""$with_tlib" 1>&6 LIBS="$LIBS -l$with_tlib" + echo $ac_n "checking for linking with $with_tlib library""... $ac_c" 1>&6 +echo "configure:6937: checking for linking with $with_tlib library" >&5 + cat > conftest.$ac_ext <<EOF +#line 6939 "configure" +#include "confdefs.h" + +int main() { + +; return 0; } +EOF +if { (eval echo configure:6946: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + echo "$ac_t""OK" 1>&6 else - echo "$ac_t""automatic terminal library selection" 1>&6 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + { echo "configure: error: FAILED" 1>&2; exit 1; } +fi +rm -f conftest* + olibs="$LIBS" +else + echo "$ac_t""empty: automatic terminal library selection" 1>&6 case "`uname -s 2>/dev/null`" in OSF1) tlibs="ncurses curses termlib termcap";; *) tlibs="ncurses termlib termcap curses";; esac for libname in $tlibs; do echo $ac_n "checking for tgetent in -l${libname}""... $ac_c" 1>&6 -echo "configure:6944: checking for tgetent in -l${libname}" >&5 +echo "configure:6965: checking for tgetent in -l${libname}" >&5 ac_lib_var=`echo ${libname}'_'tgetent | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -6948,7 +6969,7 @@ else ac_save_LIBS="$LIBS" LIBS="-l${libname} $LIBS" cat > conftest.$ac_ext <<EOF -#line 6952 "configure" +#line 6973 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 @@ -6959,7 +6980,7 @@ int main() { tgetent() ; return 0; } EOF -if { (eval echo configure:6963: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6984: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -6991,7 +7012,7 @@ fi res="FAIL" else cat > conftest.$ac_ext <<EOF -#line 6995 "configure" +#line 7016 "configure" #include "confdefs.h" #ifdef HAVE_TERMCAP_H @@ -6999,7 +7020,7 @@ else #endif main() {char *s; s=(char *)tgoto("%p1%d", 0, 1); exit(0); } EOF -if { (eval echo configure:7003: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:7024: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then res="OK" else @@ -7018,15 +7039,43 @@ fi LIBS="$olibs" fi done + if test "x$olibs" = "x$LIBS"; then + echo "$ac_t""no terminal library found" 1>&6 + fi fi -if test "x$olibs" != "x$LIBS"; then - echo $ac_n "checking whether we talk terminfo""... $ac_c" 1>&6 -echo "configure:7025: checking whether we talk terminfo" >&5 - if test "$cross_compiling" = yes; then + +if test "x$olibs" = "x$LIBS"; then + echo $ac_n "checking for tgetent()""... $ac_c" 1>&6 +echo "configure:7050: checking for tgetent()" >&5 + cat > conftest.$ac_ext <<EOF +#line 7052 "configure" +#include "confdefs.h" + +int main() { +char s[10000]; int res = tgetent(s, "thisterminaldoesnotexist"); +; return 0; } +EOF +if { (eval echo configure:7059: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + echo "$ac_t""yes" 1>&6 +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + { echo "configure: error: NOT FOUND! + You need to install a terminal library; for example ncurses. + Or specify the name of the library with --with-tlib." 1>&2; exit 1; } +fi +rm -f conftest* +fi + +echo $ac_n "checking whether we talk terminfo""... $ac_c" 1>&6 +echo "configure:7074: checking whether we talk terminfo" >&5 +if test "$cross_compiling" = yes; then { echo "configure: error: failed to compile test program." 1>&2; exit 1; } else cat > conftest.$ac_ext <<EOF -#line 7030 "configure" +#line 7079 "configure" #include "confdefs.h" #ifdef HAVE_TERMCAP_H @@ -7035,7 +7084,7 @@ else main() {char *s; s=(char *)tgoto("%p1%d", 0, 1); exit(!strcmp(s==0 ? "" : s, "1")); } EOF -if { (eval echo configure:7039: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:7088: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then echo "$ac_t""no -- we are in termcap land" 1>&6 else @@ -7050,18 +7099,15 @@ fi rm -fr conftest* fi -else - echo "$ac_t""none found" 1>&6 -fi if test "x$olibs" != "x$LIBS"; then echo $ac_n "checking what tgetent() returns for an unknown terminal""... $ac_c" 1>&6 -echo "configure:7060: checking what tgetent() returns for an unknown terminal" >&5 +echo "configure:7106: checking what tgetent() returns for an unknown terminal" >&5 if test "$cross_compiling" = yes; then { echo "configure: error: failed to compile test program." 1>&2; exit 1; } else cat > conftest.$ac_ext <<EOF -#line 7065 "configure" +#line 7111 "configure" #include "confdefs.h" #ifdef HAVE_TERMCAP_H @@ -7070,7 +7116,7 @@ else main() {char s[10000]; int res = tgetent(s, "thisterminaldoesnotexist"); exit(res != 0); } EOF -if { (eval echo configure:7074: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:7120: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then echo "$ac_t""zero" 1>&6; cat >> confdefs.h <<\EOF #define TGETENT_ZERO_ERR 0 @@ -7088,9 +7134,9 @@ fi fi echo $ac_n "checking whether termcap.h contains ospeed""... $ac_c" 1>&6 -echo "configure:7092: checking whether termcap.h contains ospeed" >&5 +echo "configure:7138: checking whether termcap.h contains ospeed" >&5 cat > conftest.$ac_ext <<EOF -#line 7094 "configure" +#line 7140 "configure" #include "confdefs.h" #ifdef HAVE_TERMCAP_H @@ -7101,7 +7147,7 @@ int main() { ospeed = 20000 ; return 0; } EOF -if { (eval echo configure:7105: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7151: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* echo "$ac_t""yes" 1>&6; cat >> confdefs.h <<\EOF #define HAVE_OSPEED 1 @@ -7113,9 +7159,9 @@ else rm -rf conftest* echo "$ac_t""no" 1>&6 echo $ac_n "checking whether ospeed can be extern""... $ac_c" 1>&6 -echo "configure:7117: checking whether ospeed can be extern" >&5 +echo "configure:7163: checking whether ospeed can be extern" >&5 cat > conftest.$ac_ext <<EOF -#line 7119 "configure" +#line 7165 "configure" #include "confdefs.h" #ifdef HAVE_TERMCAP_H @@ -7127,7 +7173,7 @@ int main() { ospeed = 20000 ; return 0; } EOF -if { (eval echo configure:7131: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7177: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* echo "$ac_t""yes" 1>&6; cat >> confdefs.h <<\EOF #define OSPEED_EXTERN 1 @@ -7145,9 +7191,9 @@ fi rm -f conftest* echo $ac_n "checking whether termcap.h contains UP, BC and PC""... $ac_c" 1>&6 -echo "configure:7149: checking whether termcap.h contains UP, BC and PC" >&5 +echo "configure:7195: checking whether termcap.h contains UP, BC and PC" >&5 cat > conftest.$ac_ext <<EOF -#line 7151 "configure" +#line 7197 "configure" #include "confdefs.h" #ifdef HAVE_TERMCAP_H @@ -7158,7 +7204,7 @@ int main() { if (UP == 0 && BC == 0) PC = 1 ; return 0; } EOF -if { (eval echo configure:7162: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7208: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* echo "$ac_t""yes" 1>&6; cat >> confdefs.h <<\EOF #define HAVE_UP_BC_PC 1 @@ -7170,9 +7216,9 @@ else rm -rf conftest* echo "$ac_t""no" 1>&6 echo $ac_n "checking whether UP, BC and PC can be extern""... $ac_c" 1>&6 -echo "configure:7174: checking whether UP, BC and PC can be extern" >&5 +echo "configure:7220: checking whether UP, BC and PC can be extern" >&5 cat > conftest.$ac_ext <<EOF -#line 7176 "configure" +#line 7222 "configure" #include "confdefs.h" #ifdef HAVE_TERMCAP_H @@ -7184,7 +7230,7 @@ int main() { if (UP == 0 && BC == 0) PC = 1 ; return 0; } EOF -if { (eval echo configure:7188: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7234: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* echo "$ac_t""yes" 1>&6; cat >> confdefs.h <<\EOF #define UP_BC_PC_EXTERN 1 @@ -7202,9 +7248,9 @@ fi rm -f conftest* echo $ac_n "checking whether tputs() uses outfuntype""... $ac_c" 1>&6 -echo "configure:7206: checking whether tputs() uses outfuntype" >&5 +echo "configure:7252: checking whether tputs() uses outfuntype" >&5 cat > conftest.$ac_ext <<EOF -#line 7208 "configure" +#line 7254 "configure" #include "confdefs.h" #ifdef HAVE_TERMCAP_H @@ -7215,7 +7261,7 @@ int main() { extern int xx(); tputs("test", 1, (outfuntype)xx) ; return 0; } EOF -if { (eval echo configure:7219: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:7265: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* echo "$ac_t""yes" 1>&6; cat >> confdefs.h <<\EOF #define HAVE_OUTFUNTYPE 1 @@ -7230,9 +7276,9 @@ fi rm -f conftest* echo $ac_n "checking whether sys/select.h and sys/time.h may both be included""... $ac_c" 1>&6 -echo "configure:7234: checking whether sys/select.h and sys/time.h may both be included" >&5 +echo "configure:7280: checking whether sys/select.h and sys/time.h may both be included" >&5 cat > conftest.$ac_ext <<EOF -#line 7236 "configure" +#line 7282 "configure" #include "confdefs.h" #include <sys/types.h> @@ -7242,7 +7288,7 @@ int main() { ; return 0; } EOF -if { (eval echo configure:7246: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:7292: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* echo "$ac_t""yes" 1>&6 cat >> confdefs.h <<\EOF @@ -7259,7 +7305,7 @@ rm -f conftest* echo $ac_n "checking for /dev/ptc""... $ac_c" 1>&6 -echo "configure:7263: checking for /dev/ptc" >&5 +echo "configure:7309: checking for /dev/ptc" >&5 if test -r /dev/ptc; then cat >> confdefs.h <<\EOF #define HAVE_DEV_PTC 1 @@ -7271,17 +7317,17 @@ else fi echo $ac_n "checking for SVR4 ptys""... $ac_c" 1>&6 -echo "configure:7275: checking for SVR4 ptys" >&5 +echo "configure:7321: checking for SVR4 ptys" >&5 if test -c /dev/ptmx ; then cat > conftest.$ac_ext <<EOF -#line 7278 "configure" +#line 7324 "configure" #include "confdefs.h" int main() { ptsname(0);grantpt(0);unlockpt(0); ; return 0; } EOF -if { (eval echo configure:7285: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7331: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* echo "$ac_t""yes" 1>&6; cat >> confdefs.h <<\EOF #define HAVE_SVR4_PTYS 1 @@ -7299,14 +7345,14 @@ else fi echo $ac_n "checking for ptyranges""... $ac_c" 1>&6 -echo "configure:7303: checking for ptyranges" >&5 +echo "configure:7349: checking for ptyranges" >&5 if test -d /dev/ptym ; then pdir='/dev/ptym' else pdir='/dev' fi cat > conftest.$ac_ext <<EOF -#line 7310 "configure" +#line 7356 "configure" #include "confdefs.h" #ifdef M_UNIX yes; @@ -7340,13 +7386,13 @@ else fi echo $ac_n "checking default tty permissions/group""... $ac_c" 1>&6 -echo "configure:7344: checking default tty permissions/group" >&5 +echo "configure:7390: checking default tty permissions/group" >&5 rm -f conftest_grp if test "$cross_compiling" = yes; then { echo "configure: error: failed to compile test program" 1>&2; exit 1; } else cat > conftest.$ac_ext <<EOF -#line 7350 "configure" +#line 7396 "configure" #include "confdefs.h" #include <sys/types.h> @@ -7378,7 +7424,7 @@ main() } EOF -if { (eval echo configure:7382: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:7428: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then if test -f conftest_grp; then @@ -7409,12 +7455,12 @@ rm -f conftest_grp echo $ac_n "checking return type of signal handlers""... $ac_c" 1>&6 -echo "configure:7413: checking return type of signal handlers" >&5 +echo "configure:7459: checking return type of signal handlers" >&5 if eval "test \"`echo '$''{'ac_cv_type_signal'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 7418 "configure" +#line 7464 "configure" #include "confdefs.h" #include <sys/types.h> #include <signal.h> @@ -7431,7 +7477,7 @@ int main() { int i; ; return 0; } EOF -if { (eval echo configure:7435: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:7481: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_type_signal=void else @@ -7463,9 +7509,9 @@ EOF fi echo $ac_n "checking for struct sigcontext""... $ac_c" 1>&6 -echo "configure:7467: checking for struct sigcontext" >&5 +echo "configure:7513: checking for struct sigcontext" >&5 cat > conftest.$ac_ext <<EOF -#line 7469 "configure" +#line 7515 "configure" #include "confdefs.h" #include <signal.h> @@ -7479,7 +7525,7 @@ int main() { ; return 0; } EOF -if { (eval echo configure:7483: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:7529: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* echo "$ac_t""yes" 1>&6 cat >> confdefs.h <<\EOF @@ -7495,12 +7541,12 @@ fi rm -f conftest* echo $ac_n "checking getcwd implementation""... $ac_c" 1>&6 -echo "configure:7499: checking getcwd implementation" >&5 +echo "configure:7545: checking getcwd implementation" >&5 if test "$cross_compiling" = yes; then { echo "configure: error: failed to compile test program" 1>&2; exit 1; } else cat > conftest.$ac_ext <<EOF -#line 7504 "configure" +#line 7550 "configure" #include "confdefs.h" char *dagger[] = { "IFS=pwd", 0 }; @@ -7512,7 +7558,7 @@ main() return getcwd(buffer, 500) ? 0 : 1; } EOF -if { (eval echo configure:7516: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:7562: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then echo "$ac_t""it is usable" 1>&6 else @@ -7537,12 +7583,12 @@ for ac_func in bcmp fchdir fchown fseeko fsync ftello getcwd getpseudotty \ strnicmp strpbrk strtol tgetent towlower towupper usleep utime utimes do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7541: checking for $ac_func" >&5 +echo "configure:7587: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 7546 "configure" +#line 7592 "configure" #include "confdefs.h" /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $ac_func(); below. */ @@ -7565,7 +7611,7 @@ $ac_func(); ; return 0; } EOF -if { (eval echo configure:7569: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7615: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7591,9 +7637,9 @@ done echo $ac_n "checking for st_blksize""... $ac_c" 1>&6 -echo "configure:7595: checking for st_blksize" >&5 +echo "configure:7641: checking for st_blksize" >&5 cat > conftest.$ac_ext <<EOF -#line 7597 "configure" +#line 7643 "configure" #include "confdefs.h" #include <sys/types.h> #include <sys/stat.h> @@ -7605,7 +7651,7 @@ int main() { n = (int)st.st_blksize; ; return 0; } EOF -if { (eval echo configure:7609: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:7655: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* echo "$ac_t""yes" 1>&6; cat >> confdefs.h <<\EOF #define HAVE_ST_BLKSIZE 1 @@ -7620,18 +7666,18 @@ fi rm -f conftest* echo $ac_n "checking whether stat() ignores a trailing slash""... $ac_c" 1>&6 -echo "configure:7624: checking whether stat() ignores a trailing slash" >&5 +echo "configure:7670: checking whether stat() ignores a trailing slash" >&5 if test "$cross_compiling" = yes; then { echo "configure: error: failed to compile test program" 1>&2; exit 1; } else cat > conftest.$ac_ext <<EOF -#line 7629 "configure" +#line 7675 "configure" #include "confdefs.h" #include <sys/types.h> #include <sys/stat.h> main() {struct stat st; exit(stat("configure/", &st) != 0); } EOF -if { (eval echo configure:7635: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:7681: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then echo "$ac_t""yes" 1>&6; cat >> confdefs.h <<\EOF #define STAT_IGNORES_SLASH 1 @@ -7648,11 +7694,11 @@ fi echo $ac_n "checking for iconv_open()""... $ac_c" 1>&6 -echo "configure:7652: checking for iconv_open()" >&5 +echo "configure:7698: checking for iconv_open()" >&5 save_LIBS="$LIBS" LIBS="$LIBS -liconv" cat > conftest.$ac_ext <<EOF -#line 7656 "configure" +#line 7702 "configure" #include "confdefs.h" #ifdef HAVE_ICONV_H @@ -7663,7 +7709,7 @@ int main() { iconv_open("fr", "to"); ; return 0; } EOF -if { (eval echo configure:7667: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7713: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* echo "$ac_t""yes; with -liconv" 1>&6; cat >> confdefs.h <<\EOF #define HAVE_ICONV 1 @@ -7675,7 +7721,7 @@ else rm -rf conftest* LIBS="$save_LIBS" cat > conftest.$ac_ext <<EOF -#line 7679 "configure" +#line 7725 "configure" #include "confdefs.h" #ifdef HAVE_ICONV_H @@ -7686,7 +7732,7 @@ int main() { iconv_open("fr", "to"); ; return 0; } EOF -if { (eval echo configure:7690: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7736: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* echo "$ac_t""yes" 1>&6; cat >> confdefs.h <<\EOF #define HAVE_ICONV 1 @@ -7704,9 +7750,9 @@ rm -f conftest* echo $ac_n "checking for nl_langinfo(CODESET)""... $ac_c" 1>&6 -echo "configure:7708: checking for nl_langinfo(CODESET)" >&5 +echo "configure:7754: checking for nl_langinfo(CODESET)" >&5 cat > conftest.$ac_ext <<EOF -#line 7710 "configure" +#line 7756 "configure" #include "confdefs.h" #ifdef HAVE_LANGINFO_H @@ -7717,7 +7763,7 @@ int main() { char *cs = nl_langinfo(CODESET); ; return 0; } EOF -if { (eval echo configure:7721: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7767: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* echo "$ac_t""yes" 1>&6; cat >> confdefs.h <<\EOF #define HAVE_NL_LANGINFO_CODESET 1 @@ -7732,7 +7778,7 @@ fi rm -f conftest* echo $ac_n "checking --disable-acl argument""... $ac_c" 1>&6 -echo "configure:7736: checking --disable-acl argument" >&5 +echo "configure:7782: checking --disable-acl argument" >&5 # Check whether --enable-acl or --disable-acl was given. if test "${enable_acl+set}" = set; then enableval="$enable_acl" @@ -7744,7 +7790,7 @@ fi if test "$enable_acl" = "yes"; then echo "$ac_t""no" 1>&6 echo $ac_n "checking for acl_get_file in -lposix1e""... $ac_c" 1>&6 -echo "configure:7748: checking for acl_get_file in -lposix1e" >&5 +echo "configure:7794: checking for acl_get_file in -lposix1e" >&5 ac_lib_var=`echo posix1e'_'acl_get_file | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7752,7 +7798,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lposix1e $LIBS" cat > conftest.$ac_ext <<EOF -#line 7756 "configure" +#line 7802 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 @@ -7763,7 +7809,7 @@ int main() { acl_get_file() ; return 0; } EOF -if { (eval echo configure:7767: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7813: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7782,7 +7828,7 @@ if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then else echo "$ac_t""no" 1>&6 echo $ac_n "checking for acl_get_file in -lacl""... $ac_c" 1>&6 -echo "configure:7786: checking for acl_get_file in -lacl" >&5 +echo "configure:7832: checking for acl_get_file in -lacl" >&5 ac_lib_var=`echo acl'_'acl_get_file | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7790,7 +7836,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lacl $LIBS" cat > conftest.$ac_ext <<EOF -#line 7794 "configure" +#line 7840 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 @@ -7801,7 +7847,7 @@ int main() { acl_get_file() ; return 0; } EOF -if { (eval echo configure:7805: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7851: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7818,7 +7864,7 @@ if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 LIBS="$LIBS -lacl" echo $ac_n "checking for fgetxattr in -lattr""... $ac_c" 1>&6 -echo "configure:7822: checking for fgetxattr in -lattr" >&5 +echo "configure:7868: checking for fgetxattr in -lattr" >&5 ac_lib_var=`echo attr'_'fgetxattr | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7826,7 +7872,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lattr $LIBS" cat > conftest.$ac_ext <<EOF -#line 7830 "configure" +#line 7876 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 @@ -7837,7 +7883,7 @@ int main() { fgetxattr() ; return 0; } EOF -if { (eval echo configure:7841: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7887: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7865,9 +7911,9 @@ fi echo $ac_n "checking for POSIX ACL support""... $ac_c" 1>&6 -echo "configure:7869: checking for POSIX ACL support" >&5 +echo "configure:7915: checking for POSIX ACL support" >&5 cat > conftest.$ac_ext <<EOF -#line 7871 "configure" +#line 7917 "configure" #include "confdefs.h" #include <sys/types.h> @@ -7881,7 +7927,7 @@ acl = acl_get_file("foo", ACL_TYPE_ACCESS); acl_free(acl); ; return 0; } EOF -if { (eval echo configure:7885: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7931: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* echo "$ac_t""yes" 1>&6; cat >> confdefs.h <<\EOF #define HAVE_POSIX_ACL 1 @@ -7896,9 +7942,9 @@ fi rm -f conftest* echo $ac_n "checking for Solaris ACL support""... $ac_c" 1>&6 -echo "configure:7900: checking for Solaris ACL support" >&5 +echo "configure:7946: checking for Solaris ACL support" >&5 cat > conftest.$ac_ext <<EOF -#line 7902 "configure" +#line 7948 "configure" #include "confdefs.h" #ifdef HAVE_SYS_ACL_H @@ -7909,7 +7955,7 @@ acl("foo", GETACLCNT, 0, NULL); ; return 0; } EOF -if { (eval echo configure:7913: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7959: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* echo "$ac_t""yes" 1>&6; cat >> confdefs.h <<\EOF #define HAVE_SOLARIS_ACL 1 @@ -7924,9 +7970,9 @@ fi rm -f conftest* echo $ac_n "checking for AIX ACL support""... $ac_c" 1>&6 -echo "configure:7928: checking for AIX ACL support" >&5 +echo "configure:7974: checking for AIX ACL support" >&5 cat > conftest.$ac_ext <<EOF -#line 7930 "configure" +#line 7976 "configure" #include "confdefs.h" #ifdef HAVE_SYS_ACL_H @@ -7948,7 +7994,7 @@ aclsize = sizeof(struct acl); ; return 0; } EOF -if { (eval echo configure:7952: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7998: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* echo "$ac_t""yes" 1>&6; cat >> confdefs.h <<\EOF #define HAVE_AIX_ACL 1 @@ -7966,7 +8012,7 @@ else fi echo $ac_n "checking --disable-gpm argument""... $ac_c" 1>&6 -echo "configure:7970: checking --disable-gpm argument" >&5 +echo "configure:8016: checking --disable-gpm argument" >&5 # Check whether --enable-gpm or --disable-gpm was given. if test "${enable_gpm+set}" = set; then enableval="$enable_gpm" @@ -7979,13 +8025,13 @@ fi if test "$enable_gpm" = "yes"; then echo "$ac_t""no" 1>&6 echo $ac_n "checking for gpm""... $ac_c" 1>&6 -echo "configure:7983: checking for gpm" >&5 +echo "configure:8029: checking for gpm" >&5 if eval "test \"`echo '$''{'vi_cv_have_gpm'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else olibs="$LIBS" ; LIBS="-lgpm" cat > conftest.$ac_ext <<EOF -#line 7989 "configure" +#line 8035 "configure" #include "confdefs.h" #include <gpm.h> #include <linux/keyboard.h> @@ -7993,7 +8039,7 @@ int main() { Gpm_GetLibVersion(NULL); ; return 0; } EOF -if { (eval echo configure:7997: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8043: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* vi_cv_have_gpm=yes else @@ -8020,12 +8066,12 @@ else fi echo $ac_n "checking for vsnprintf()""... $ac_c" 1>&6 -echo "configure:8024: checking for vsnprintf()" >&5 +echo "configure:8070: checking for vsnprintf()" >&5 if test "$cross_compiling" = yes; then { echo "configure: error: failed to compile test program" 1>&2; exit 1; } else cat > conftest.$ac_ext <<EOF -#line 8029 "configure" +#line 8075 "configure" #include "confdefs.h" #include <stdio.h> @@ -8046,7 +8092,7 @@ else } EOF -if { (eval echo configure:8050: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:8096: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then cat >> confdefs.h <<\EOF #define HAVE_VSNPRINTF 1 @@ -8064,16 +8110,16 @@ fi echo $ac_n "checking for rename""... $ac_c" 1>&6 -echo "configure:8068: checking for rename" >&5 +echo "configure:8114: checking for rename" >&5 cat > conftest.$ac_ext <<EOF -#line 8070 "configure" +#line 8116 "configure" #include "confdefs.h" #include <stdio.h> int main() { rename("this", "that") ; return 0; } EOF -if { (eval echo configure:8077: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8123: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* echo "$ac_t""yes" 1>&6; cat >> confdefs.h <<\EOF #define HAVE_RENAME 1 @@ -8088,9 +8134,9 @@ fi rm -f conftest* echo $ac_n "checking for sysctl""... $ac_c" 1>&6 -echo "configure:8092: checking for sysctl" >&5 +echo "configure:8138: checking for sysctl" >&5 cat > conftest.$ac_ext <<EOF -#line 8094 "configure" +#line 8140 "configure" #include "confdefs.h" #include <sys/types.h> #include <sys/sysctl.h> @@ -8105,7 +8151,7 @@ int main() { ; return 0; } EOF -if { (eval echo configure:8109: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:8155: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* echo "$ac_t""yes" 1>&6; cat >> confdefs.h <<\EOF #define HAVE_SYSCTL 1 @@ -8120,9 +8166,9 @@ fi rm -f conftest* echo $ac_n "checking for sysinfo""... $ac_c" 1>&6 -echo "configure:8124: checking for sysinfo" >&5 +echo "configure:8170: checking for sysinfo" >&5 cat > conftest.$ac_ext <<EOF -#line 8126 "configure" +#line 8172 "configure" #include "confdefs.h" #include <sys/types.h> #include <sys/sysinfo.h> @@ -8135,7 +8181,7 @@ int main() { ; return 0; } EOF -if { (eval echo configure:8139: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:8185: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* echo "$ac_t""yes" 1>&6; cat >> confdefs.h <<\EOF #define HAVE_SYSINFO 1 @@ -8150,9 +8196,9 @@ fi rm -f conftest* echo $ac_n "checking for sysconf""... $ac_c" 1>&6 -echo "configure:8154: checking for sysconf" >&5 +echo "configure:8200: checking for sysconf" >&5 cat > conftest.$ac_ext <<EOF -#line 8156 "configure" +#line 8202 "configure" #include "confdefs.h" #include <unistd.h> int main() { @@ -8161,7 +8207,7 @@ int main() { ; return 0; } EOF -if { (eval echo configure:8165: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:8211: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* echo "$ac_t""yes" 1>&6; cat >> confdefs.h <<\EOF #define HAVE_SYSCONF 1 @@ -8177,7 +8223,7 @@ rm -f conftest* echo $ac_n "checking size of int""... $ac_c" 1>&6 -echo "configure:8181: checking size of int" >&5 +echo "configure:8227: checking size of int" >&5 if eval "test \"`echo '$''{'ac_cv_sizeof_int'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -8185,7 +8231,7 @@ else { echo "configure: error: failed to compile test program" 1>&2; exit 1; } else cat > conftest.$ac_ext <<EOF -#line 8189 "configure" +#line 8235 "configure" #include "confdefs.h" #include <stdio.h> main() @@ -8196,7 +8242,7 @@ else exit(0); } EOF -if { (eval echo configure:8200: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:8246: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_sizeof_int=`cat conftestval` else @@ -8217,7 +8263,7 @@ EOF echo $ac_n "checking whether memmove/bcopy/memcpy handle overlaps""... $ac_c" 1>&6 -echo "configure:8221: checking whether memmove/bcopy/memcpy handle overlaps" >&5 +echo "configure:8267: checking whether memmove/bcopy/memcpy handle overlaps" >&5 bcopy_test_prog=' main() { char buf[10]; @@ -8237,11 +8283,11 @@ if test "$cross_compiling" = yes; then { echo "configure: error: failed to compile test program" 1>&2; exit 1; } else cat > conftest.$ac_ext <<EOF -#line 8241 "configure" +#line 8287 "configure" #include "confdefs.h" #define mch_memmove(s,d,l) memmove(d,s,l) $bcopy_test_prog EOF -if { (eval echo configure:8245: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:8291: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then cat >> confdefs.h <<\EOF #define USEMEMMOVE 1 @@ -8255,11 +8301,11 @@ else { echo "configure: error: failed to compile test program" 1>&2; exit 1; } else cat > conftest.$ac_ext <<EOF -#line 8259 "configure" +#line 8305 "configure" #include "confdefs.h" #define mch_memmove(s,d,l) bcopy(d,s,l) $bcopy_test_prog EOF -if { (eval echo configure:8263: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:8309: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then cat >> confdefs.h <<\EOF #define USEBCOPY 1 @@ -8273,11 +8319,11 @@ else { echo "configure: error: failed to compile test program" 1>&2; exit 1; } else cat > conftest.$ac_ext <<EOF -#line 8277 "configure" +#line 8323 "configure" #include "confdefs.h" #define mch_memmove(s,d,l) memcpy(d,s,l) $bcopy_test_prog EOF -if { (eval echo configure:8281: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:8327: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then cat >> confdefs.h <<\EOF #define USEMEMCPY 1 @@ -8309,19 +8355,19 @@ if test "$enable_multibyte" = "yes"; then CFLAGS="$CFLAGS -I$x_includes" LDFLAGS="$X_LIBS $LDFLAGS -lX11" echo $ac_n "checking whether X_LOCALE needed""... $ac_c" 1>&6 -echo "configure:8313: checking whether X_LOCALE needed" >&5 +echo "configure:8359: checking whether X_LOCALE needed" >&5 cat > conftest.$ac_ext <<EOF -#line 8315 "configure" +#line 8361 "configure" #include "confdefs.h" #include <X11/Xlocale.h> int main() { ; return 0; } EOF -if { (eval echo configure:8322: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:8368: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* cat > conftest.$ac_ext <<EOF -#line 8325 "configure" +#line 8371 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 @@ -8332,7 +8378,7 @@ int main() { _Xsetlocale() ; return 0; } EOF -if { (eval echo configure:8336: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8382: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* echo "$ac_t""yes" 1>&6 cat >> confdefs.h <<\EOF @@ -8359,7 +8405,7 @@ rm -f conftest* fi echo $ac_n "checking for _xpg4_setrunelocale in -lxpg4""... $ac_c" 1>&6 -echo "configure:8363: checking for _xpg4_setrunelocale in -lxpg4" >&5 +echo "configure:8409: checking for _xpg4_setrunelocale in -lxpg4" >&5 ac_lib_var=`echo xpg4'_'_xpg4_setrunelocale | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -8367,7 +8413,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lxpg4 $LIBS" cat > conftest.$ac_ext <<EOF -#line 8371 "configure" +#line 8417 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 @@ -8378,7 +8424,7 @@ int main() { _xpg4_setrunelocale() ; return 0; } EOF -if { (eval echo configure:8382: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8428: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8400,7 +8446,7 @@ fi echo $ac_n "checking how to create tags""... $ac_c" 1>&6 -echo "configure:8404: checking how to create tags" >&5 +echo "configure:8450: checking how to create tags" >&5 test -f tags && mv tags tags.save if (eval ctags --version /dev/null | grep Exuberant) < /dev/null 1>&5 2>&1; then TAGPRG="ctags" @@ -8417,7 +8463,7 @@ test -f tags.save && mv tags.save tags echo "$ac_t""$TAGPRG" 1>&6 echo $ac_n "checking how to run man with a section nr""... $ac_c" 1>&6 -echo "configure:8421: checking how to run man with a section nr" >&5 +echo "configure:8467: checking how to run man with a section nr" >&5 MANDEF="man" (eval man -s 2 read) < /dev/null > /dev/null 2>&5 && MANDEF="man -s" echo "$ac_t""$MANDEF" 1>&6 @@ -8429,7 +8475,7 @@ EOF fi echo $ac_n "checking --disable-nls argument""... $ac_c" 1>&6 -echo "configure:8433: checking --disable-nls argument" >&5 +echo "configure:8479: checking --disable-nls argument" >&5 # Check whether --enable-nls or --disable-nls was given. if test "${enable_nls+set}" = set; then enableval="$enable_nls" @@ -8444,7 +8490,7 @@ if test "$enable_nls" = "yes"; then # Extract the first word of "msgfmt", so it can be a program name with args. set dummy msgfmt; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:8448: checking for $ac_word" >&5 +echo "configure:8494: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_MSGFMT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -8471,19 +8517,19 @@ else fi echo $ac_n "checking for NLS""... $ac_c" 1>&6 -echo "configure:8475: checking for NLS" >&5 +echo "configure:8521: checking for NLS" >&5 if test -f po/Makefile; then have_gettext="no" if test -n "$MSGFMT"; then cat > conftest.$ac_ext <<EOF -#line 8480 "configure" +#line 8526 "configure" #include "confdefs.h" #include <libintl.h> int main() { gettext("Test"); ; return 0; } EOF -if { (eval echo configure:8487: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8533: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* echo "$ac_t""gettext() works" 1>&6; have_gettext="yes" else @@ -8493,14 +8539,14 @@ else olibs=$LIBS LIBS="$LIBS -lintl" cat > conftest.$ac_ext <<EOF -#line 8497 "configure" +#line 8543 "configure" #include "confdefs.h" #include <libintl.h> int main() { gettext("Test"); ; return 0; } EOF -if { (eval echo configure:8504: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8550: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* echo "$ac_t""gettext() works with -lintl" 1>&6; have_gettext="yes" else @@ -8526,12 +8572,12 @@ EOF for ac_func in bind_textdomain_codeset do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8530: checking for $ac_func" >&5 +echo "configure:8576: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 8535 "configure" +#line 8581 "configure" #include "confdefs.h" /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $ac_func(); below. */ @@ -8554,7 +8600,7 @@ $ac_func(); ; return 0; } EOF -if { (eval echo configure:8558: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8604: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8579,9 +8625,9 @@ fi done echo $ac_n "checking for _nl_msg_cat_cntr""... $ac_c" 1>&6 -echo "configure:8583: checking for _nl_msg_cat_cntr" >&5 +echo "configure:8629: checking for _nl_msg_cat_cntr" >&5 cat > conftest.$ac_ext <<EOF -#line 8585 "configure" +#line 8631 "configure" #include "confdefs.h" #include <libintl.h> extern int _nl_msg_cat_cntr; @@ -8589,7 +8635,7 @@ int main() { ++_nl_msg_cat_cntr; ; return 0; } EOF -if { (eval echo configure:8593: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8639: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* echo "$ac_t""yes" 1>&6; cat >> confdefs.h <<\EOF #define HAVE_NL_MSG_CAT_CNTR 1 @@ -8612,17 +8658,17 @@ fi ac_safe=`echo "dlfcn.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for dlfcn.h""... $ac_c" 1>&6 -echo "configure:8616: checking for dlfcn.h" >&5 +echo "configure:8662: checking for dlfcn.h" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 8621 "configure" +#line 8667 "configure" #include "confdefs.h" #include <dlfcn.h> EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:8626: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:8672: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -8643,17 +8689,17 @@ else echo "$ac_t""no" 1>&6 ac_safe=`echo "dl.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for dl.h""... $ac_c" 1>&6 -echo "configure:8647: checking for dl.h" >&5 +echo "configure:8693: checking for dl.h" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 8652 "configure" +#line 8698 "configure" #include "confdefs.h" #include <dl.h> EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:8657: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:8703: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -8682,9 +8728,9 @@ if test x${DLL} = xdlfcn.h; then EOF echo $ac_n "checking for dlopen()""... $ac_c" 1>&6 -echo "configure:8686: checking for dlopen()" >&5 +echo "configure:8732: checking for dlopen()" >&5 cat > conftest.$ac_ext <<EOF -#line 8688 "configure" +#line 8734 "configure" #include "confdefs.h" int main() { @@ -8694,7 +8740,7 @@ int main() { ; return 0; } EOF -if { (eval echo configure:8698: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8744: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* echo "$ac_t""yes" 1>&6; cat >> confdefs.h <<\EOF @@ -8707,11 +8753,11 @@ else rm -rf conftest* echo "$ac_t""no" 1>&6; echo $ac_n "checking for dlopen() in -ldl""... $ac_c" 1>&6 -echo "configure:8711: checking for dlopen() in -ldl" >&5 +echo "configure:8757: checking for dlopen() in -ldl" >&5 olibs=$LIBS LIBS="$LIBS -ldl" cat > conftest.$ac_ext <<EOF -#line 8715 "configure" +#line 8761 "configure" #include "confdefs.h" int main() { @@ -8721,7 +8767,7 @@ int main() { ; return 0; } EOF -if { (eval echo configure:8725: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8771: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* echo "$ac_t""yes" 1>&6; cat >> confdefs.h <<\EOF @@ -8739,9 +8785,9 @@ rm -f conftest* fi rm -f conftest* echo $ac_n "checking for dlsym()""... $ac_c" 1>&6 -echo "configure:8743: checking for dlsym()" >&5 +echo "configure:8789: checking for dlsym()" >&5 cat > conftest.$ac_ext <<EOF -#line 8745 "configure" +#line 8791 "configure" #include "confdefs.h" int main() { @@ -8751,7 +8797,7 @@ int main() { ; return 0; } EOF -if { (eval echo configure:8755: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8801: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* echo "$ac_t""yes" 1>&6; cat >> confdefs.h <<\EOF @@ -8764,11 +8810,11 @@ else rm -rf conftest* echo "$ac_t""no" 1>&6; echo $ac_n "checking for dlsym() in -ldl""... $ac_c" 1>&6 -echo "configure:8768: checking for dlsym() in -ldl" >&5 +echo "configure:8814: checking for dlsym() in -ldl" >&5 olibs=$LIBS LIBS="$LIBS -ldl" cat > conftest.$ac_ext <<EOF -#line 8772 "configure" +#line 8818 "configure" #include "confdefs.h" int main() { @@ -8778,7 +8824,7 @@ int main() { ; return 0; } EOF -if { (eval echo configure:8782: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8828: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* echo "$ac_t""yes" 1>&6; cat >> confdefs.h <<\EOF @@ -8801,9 +8847,9 @@ elif test x${DLL} = xdl.h; then EOF echo $ac_n "checking for shl_load()""... $ac_c" 1>&6 -echo "configure:8805: checking for shl_load()" >&5 +echo "configure:8851: checking for shl_load()" >&5 cat > conftest.$ac_ext <<EOF -#line 8807 "configure" +#line 8853 "configure" #include "confdefs.h" int main() { @@ -8813,7 +8859,7 @@ int main() { ; return 0; } EOF -if { (eval echo configure:8817: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8863: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* echo "$ac_t""yes" 1>&6; cat >> confdefs.h <<\EOF @@ -8826,11 +8872,11 @@ else rm -rf conftest* echo "$ac_t""no" 1>&6; echo $ac_n "checking for shl_load() in -ldld""... $ac_c" 1>&6 -echo "configure:8830: checking for shl_load() in -ldld" >&5 +echo "configure:8876: checking for shl_load() in -ldld" >&5 olibs=$LIBS LIBS="$LIBS -ldld" cat > conftest.$ac_ext <<EOF -#line 8834 "configure" +#line 8880 "configure" #include "confdefs.h" int main() { @@ -8840,7 +8886,7 @@ int main() { ; return 0; } EOF -if { (eval echo configure:8844: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8890: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* echo "$ac_t""yes" 1>&6; cat >> confdefs.h <<\EOF @@ -8862,17 +8908,17 @@ for ac_hdr in setjmp.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:8866: checking for $ac_hdr" >&5 +echo "configure:8912: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 8871 "configure" +#line 8917 "configure" #include "confdefs.h" #include <$ac_hdr> EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:8876: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:8922: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -8909,7 +8955,7 @@ fi if test "x$MACOSX" = "xyes" && test "x$CARBON" = "xyes" \ && test "x$GUITYPE" != "xCARBONGUI"; then echo $ac_n "checking whether we need -framework Carbon""... $ac_c" 1>&6 -echo "configure:8913: checking whether we need -framework Carbon" >&5 +echo "configure:8959: checking whether we need -framework Carbon" >&5 if test "x$enable_multibyte" = "xyes" || test "x$features" == "xbig" \ || test "x$features" = "xhuge"; then LIBS="$LIBS -framework Carbon" diff --git a/src/buffer.c b/src/buffer.c index f02c00d25..19dcb593d 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -2976,22 +2976,13 @@ maketitle() off += 2; #endif /* remove the file name */ - p = gettail(buf + off); + p = gettail_sep(buf + off); if (p == buf + off) - { /* must be a help buffer */ STRCPY(buf + off, _("help")); - } else - { - while (p > buf + off + 1 && vim_ispathsep(p[-1])) - --p; -#ifdef VMS - /* path separator is part of the path */ - ++p; -#endif *p = NUL; - } + /* translate unprintable chars */ p = transstr(buf + off); STRNCPY(buf + off, p, IOSIZE - off); diff --git a/src/charset.c b/src/charset.c index 0900d8085..336eec624 100644 --- a/src/charset.c +++ b/src/charset.c @@ -819,12 +819,7 @@ win_linetabsize(wp, p, len) for (s = p; *s != NUL && (len == MAXCOL || s < p + len); ) { col += win_lbr_chartabsize(wp, s, col, NULL); -#ifdef FEAT_MBYTE - if (has_mbyte) - s += (*mb_ptr2len_check)(s); - else -#endif - ++s; + mb_ptr_adv(s); } return (int)col; } @@ -967,12 +962,7 @@ lbr_chartabsize_adv(s, col) int retval; retval = lbr_chartabsize(*s, col); -#ifdef FEAT_MBYTE - if (has_mbyte) - *s += (*mb_ptr2len_check)(*s); - else -#endif - ++*s; + mb_ptr_adv(*s); return retval; } @@ -1054,12 +1044,7 @@ win_lbr_chartabsize(wp, s, col, headp) for (;;) { ps = s; -# ifdef FEAT_MBYTE - if (has_mbyte) - s += (*mb_ptr2len_check)(s); - else -# endif - ++s; + mb_ptr_adv(s); c = *s; if (!(c != NUL && (vim_isbreak(c) @@ -1263,12 +1248,7 @@ getvcol(wp, pos, start, cursor, end) break; vcol += incr; -#ifdef FEAT_MBYTE - if (has_mbyte) - ptr += (*mb_ptr2len_check)(ptr); - else -#endif - ++ptr; + mb_ptr_adv(ptr); } } else @@ -1289,12 +1269,7 @@ getvcol(wp, pos, start, cursor, end) break; vcol += incr; -#ifdef FEAT_MBYTE - if (has_mbyte) - ptr += (*mb_ptr2len_check)(ptr); - else -#endif - ++ptr; + mb_ptr_adv(ptr); } } if (start != NULL) @@ -1571,6 +1546,7 @@ vim_str2nr(start, hexp, len, dooct, dohex, nptr, unptr) int hex = 0; /* default is decimal */ int negative = FALSE; unsigned long un = 0; + int n; if (ptr[0] == '-') { @@ -1578,17 +1554,29 @@ vim_str2nr(start, hexp, len, dooct, dohex, nptr, unptr) ++ptr; } - if (ptr[0] == '0') /* could be hex or octal */ + /* Recognize hex and octal. */ + if (ptr[0] == '0' && ptr[1] != '8' && ptr[1] != '9') { hex = ptr[1]; if (dohex && (hex == 'X' || hex == 'x') && vim_isxdigit(ptr[2])) ptr += 2; /* hexadecimal */ else { - if (dooct && VIM_ISDIGIT(hex)) - hex = '0'; /* octal */ - else - hex = 0; /* 0 by itself is decimal */ + hex = 0; /* default is decimal */ + if (dooct) + { + /* Don't interpret "0", "08" or "0129" as octal. */ + for (n = 1; VIM_ISDIGIT(ptr[n]); ++n) + { + if (ptr[n] > '7') + { + hex = 0; /* can't be octal */ + break; + } + if (ptr[n] > '0') + hex = '0'; /* assume octal */ + } + } } } diff --git a/src/configure.in b/src/configure.in index 070c41b5d..f2fdcd1d8 100644 --- a/src/configure.in +++ b/src/configure.in @@ -2356,8 +2356,12 @@ AC_ARG_WITH(tlib, [ --with-tlib=library terminal library to be used ],) if test -n "$with_tlib"; then AC_MSG_RESULT($with_tlib) LIBS="$LIBS -l$with_tlib" + AC_MSG_CHECKING(for linking with $with_tlib library) + AC_TRY_LINK([], [], AC_MSG_RESULT(OK), AC_MSG_ERROR(FAILED)) + dnl Need to check for tgetent() below. + olibs="$LIBS" else - AC_MSG_RESULT([automatic terminal library selection]) + AC_MSG_RESULT([empty: automatic terminal library selection]) dnl On HP-UX 10.10 termcap or termlib should be used instead of dnl curses, because curses is much slower. dnl Newer versions of ncurses are preferred over anything. @@ -2386,10 +2390,23 @@ main() {char *s; s=(char *)tgoto("%p1%d", 0, 1); exit(0); }], LIBS="$olibs" fi done + if test "x$olibs" = "x$LIBS"; then + AC_MSG_RESULT(no terminal library found) + fi fi -if test "x$olibs" != "x$LIBS"; then - AC_MSG_CHECKING(whether we talk terminfo) - AC_TRY_RUN([ + +if test "x$olibs" = "x$LIBS"; then + AC_MSG_CHECKING([for tgetent()]) + AC_TRY_LINK([], + [char s[10000]; int res = tgetent(s, "thisterminaldoesnotexist");], + AC_MSG_RESULT(yes), + AC_MSG_ERROR([NOT FOUND! + You need to install a terminal library; for example ncurses. + Or specify the name of the library with --with-tlib.])) +fi + +AC_MSG_CHECKING(whether we talk terminfo) +AC_TRY_RUN([ #ifdef HAVE_TERMCAP_H # include <termcap.h> #endif @@ -2398,9 +2415,6 @@ main() AC_MSG_RESULT([no -- we are in termcap land]), AC_MSG_RESULT([yes -- terminfo spoken here]); AC_DEFINE(TERMINFO), AC_MSG_ERROR(failed to compile test program.)) -else - AC_MSG_RESULT(none found) -fi if test "x$olibs" != "x$LIBS"; then AC_MSG_CHECKING(what tgetent() returns for an unknown terminal) diff --git a/src/eval.c b/src/eval.c index b5b4b792a..e06fd167d 100644 --- a/src/eval.c +++ b/src/eval.c @@ -2571,7 +2571,7 @@ get_string_var(arg, retvar, evaluate) /* * Find the end of the string, skipping backslashed characters. */ - for (p = *arg + 1; *p && *p != '"'; ++p) + for (p = *arg + 1; *p && *p != '"'; mb_ptr_adv(p)) { if (*p == '\\' && p[1] != NUL) { @@ -2581,10 +2581,6 @@ get_string_var(arg, retvar, evaluate) if (*p == '<') extra += 2; } -#ifdef FEAT_MBYTE - if (has_mbyte) - p += (*mb_ptr2len_check)(p) - 1; -#endif } if (*p != '"') @@ -4736,6 +4732,7 @@ f_getcwd(argvars, retvar) /* * "getfontname()" function */ +/*ARGSUSED*/ static void f_getfontname(argvars, retvar) VAR argvars; @@ -6437,7 +6434,7 @@ f_resolve(argvars, retvar) is_relative_to_current = TRUE; len = STRLEN(p); - if (len > 0 && vim_ispathsep(p[len-1])) + if (len > 0 && after_pathsep(p, p + len)) has_trailing_pathsep = TRUE; q = getnextcomp(p); @@ -6579,10 +6576,8 @@ f_resolve(argvars, retvar) if (!has_trailing_pathsep) { q = p + STRLEN(p); - while ((q > p + 2 || (q == p + 2 && !vim_ispathsep(*p))) - && vim_ispathsep(q[-1])) - --q; - *q = NUL; + if (after_pathsep(p, q)) + *gettail_sep(p) = NUL; } retvar->var_val.var_string = p; @@ -10854,7 +10849,7 @@ shortpath_for_invalid_fname(fname, bufp, fnamelen) plen = len2; l = 0; - if (vim_ispathsep(*s)) + if (after_pathsep(pbuf2, s + 1)) { --s; ++slen; @@ -10864,7 +10859,7 @@ shortpath_for_invalid_fname(fname, bufp, fnamelen) do { /* Go back one path-seperator */ - while (s > pbuf2 && !vim_ispathsep(*s)) + while (s > pbuf2 && !after_pathsep(pbuf2, s + 1)) { --s; ++slen; @@ -10936,7 +10931,7 @@ shortpath_for_partial(fnamep, bufp, fnamelen) * of the path to return. */ sepcount = 0; - for (p = *fnamep + *fnamelen - 1; p >= *fnamep; --p) + for (p = *fnamep; p < *fnamep + *fnamelen; mb_ptr_adv(p)) if (vim_ispathsep(*p)) ++sepcount; @@ -10965,6 +10960,11 @@ shortpath_for_partial(fnamep, bufp, fnamelen) /* Count the paths backward to find the beginning of the desired string. */ for (p = tfname + len - 1; p >= tfname; --p) + { +#ifdef FEAT_MBYTE + if (has_mbyte) + p -= mb_head_off(tfname, p); +#endif if (vim_ispathsep(*p)) { if (sepcount == 0 || (hasTilde && sepcount == 1)) @@ -10972,6 +10972,7 @@ shortpath_for_partial(fnamep, bufp, fnamelen) else sepcount --; } + } if (hasTilde) { --p; @@ -11047,7 +11048,7 @@ repeat: } /* When "/." or "/.." is used: force expansion to get rid of it. */ - for (p = *fnamep; *p != NUL; ++p) + for (p = *fnamep; *p != NUL; mb_ptr_adv(p)) { if (vim_ispathsep(*p) && p[1] == '.' @@ -11155,15 +11156,15 @@ repeat: valid |= VALID_HEAD; *usedlen += 2; s = get_past_head(*fnamep); - while (tail > s && vim_ispathsep(tail[-1])) + while (tail > s && after_pathsep(s, tail)) --tail; *fnamelen = (int)(tail - *fnamep); #ifdef VMS if (*fnamelen > 0) *fnamelen += 1; /* the path separator is part of the path */ #endif - while (tail > s && !vim_ispathsep(tail[-1])) - --tail; + while (tail > s && !after_pathsep(s, tail)) + mb_ptr_back(*fnamep, tail); } /* ":8" - shortname */ diff --git a/src/ex_cmds.c b/src/ex_cmds.c index 7ed48b967..c78c64361 100644 --- a/src/ex_cmds.c +++ b/src/ex_cmds.c @@ -3599,12 +3599,7 @@ do_sub(eap) } if (cmd[0] == '\\' && cmd[1] != 0) /* skip escaped characters */ ++cmd; -#ifdef FEAT_MBYTE - if (has_mbyte) - cmd += (*mb_ptr2len_check)(cmd); - else -#endif - ++cmd; + mb_ptr_adv(cmd); } if (!eap->skip) @@ -4498,6 +4493,10 @@ global_exe(cmd) else check_cursor(); /* cursor may be beyond the end of the line */ + /* the cursor may not have moved in the text but a change in a previous + * line may move it on the screen */ + changed_line_abv_curs(); + /* If it looks like no message was written, allow overwriting the * command with the report for number of changes. */ if (msg_col == 0 && msg_scrolled == 0) diff --git a/src/ex_cmds2.c b/src/ex_cmds2.c index b9919b68e..6c919ff99 100644 --- a/src/ex_cmds2.c +++ b/src/ex_cmds2.c @@ -1014,28 +1014,34 @@ buf_write_all(buf, forceit) * Code to handle the argument list. */ +static char_u *do_one_arg __ARGS((char_u *str)); +static int do_arglist __ARGS((char_u *str, int what, int after)); +static void alist_check_arg_idx __ARGS((void)); +static int editing_arg_idx __ARGS((win_T *win)); +#ifdef FEAT_LISTCMDS +static int alist_add_list __ARGS((int count, char_u **files, int after)); +#endif +#define AL_SET 1 +#define AL_ADD 2 +#define AL_DEL 3 + /* - * Isolate one argument, taking quotes and backticks. - * Changes the argument in-place, puts a NUL after it. - * Quotes are removed, backticks remain. + * Isolate one argument, taking backticks. + * Changes the argument in-place, puts a NUL after it. Backticks remain. * Return a pointer to the start of the next argument. */ - char_u * + static char_u * do_one_arg(str) char_u *str; { char_u *p; - int inquote; int inbacktick; - inquote = FALSE; inbacktick = FALSE; for (p = str; *str; ++str) { - /* - * for MSDOS et.al. a backslash is part of a file name. - * Only skip ", space and tab. - */ + /* When the backslash is used for escaping the special meaning of a + * character we need to keep it until wildcard expansion. */ if (rem_backslash(str)) { *p++ = *str++; @@ -1043,15 +1049,12 @@ do_one_arg(str) } else { - /* An item ends at a space not in quotes or backticks */ - if (!inquote && !inbacktick && vim_isspace(*str)) + /* An item ends at a space not in backticks */ + if (!inbacktick && vim_isspace(*str)) break; - if (!inquote && *str == '`') + if (*str == '`') inbacktick ^= TRUE; - if (!inbacktick && *str == '"') - inquote ^= TRUE; - else - *p++ = *str; + *p++ = *str; } } str = skipwhite(str); @@ -1060,16 +1063,6 @@ do_one_arg(str) return str; } -static int do_arglist __ARGS((char_u *str, int what, int after)); -static void alist_check_arg_idx __ARGS((void)); -static int editing_arg_idx __ARGS((win_T *win)); -#ifdef FEAT_LISTCMDS -static int alist_add_list __ARGS((int count, char_u **files, int after)); -#endif -#define AL_SET 1 -#define AL_ADD 2 -#define AL_DEL 3 - #if defined(FEAT_GUI) || defined(FEAT_CLIENTSERVER) || defined(PROTO) /* * Redefine the argument list. @@ -1619,6 +1612,7 @@ ex_listdo(eap) char_u *save_ei = NULL; char_u *new_ei; #endif + char_u *p_shm_save; #ifndef FEAT_WINDOWS if (eap->cmdidx == CMD_windo) @@ -1674,7 +1668,15 @@ ex_listdo(eap) /* Don't call do_argfile() when already there, it will try * reloading the file. */ if (curwin->w_arg_idx != i || !editing_arg_idx(curwin)) + { + /* Clear 'shm' to avoid that the file message overwrites + * any output from the command. */ + p_shm_save = vim_strsave(p_shm); + set_option_value((char_u *)"shm", 0L, (char_u *)"", 0); do_argfile(eap, i); + set_option_value((char_u *)"shm", 0L, p_shm_save, 0); + vim_free(p_shm_save); + } if (curwin->w_arg_idx != i) break; ++i; @@ -1717,7 +1719,15 @@ ex_listdo(eap) break; if (buf == NULL) break; + + /* Go to the next buffer. Clear 'shm' to avoid that the file + * message overwrites any output from the command. */ + p_shm_save = vim_strsave(p_shm); + set_option_value((char_u *)"shm", 0L, (char_u *)"", 0); goto_buffer(eap, DOBUF_FIRST, FORWARD, next_fnum); + set_option_value((char_u *)"shm", 0L, p_shm_save, 0); + vim_free(p_shm_save); + /* If autocommands took us elsewhere, quit here */ if (curbuf->b_fnum != next_fnum) break; diff --git a/src/ex_docmd.c b/src/ex_docmd.c index 3126c6a61..a668c999d 100644 --- a/src/ex_docmd.c +++ b/src/ex_docmd.c @@ -3145,12 +3145,7 @@ set_one_cmd_context(xp, buff) return NULL; /* It's a comment */ } } -#ifdef FEAT_MBYTE - if (has_mbyte) - p += (*mb_ptr2len_check)(p); - else -#endif - ++p; + mb_ptr_adv(p); } } @@ -3203,12 +3198,7 @@ set_one_cmd_context(xp, buff) } in_quote = !in_quote; } -#ifdef FEAT_MBYTE - if (has_mbyte) - p += (*mb_ptr2len_check)(p); - else -#endif - ++p; + mb_ptr_adv(p); } /* @@ -4312,12 +4302,7 @@ skip_cmd_arg(p, rembs) else ++p; } -#ifdef FEAT_MBYTE - if (has_mbyte) - p += (*mb_ptr2len_check)(p); - else -#endif - ++p; + mb_ptr_adv(p); } return p; } diff --git a/src/ex_getln.c b/src/ex_getln.c index 5c7686aa2..8c153021a 100644 --- a/src/ex_getln.c +++ b/src/ex_getln.c @@ -494,6 +494,10 @@ getcmdline(firstc, count, indent) i = (int)(xpc.xp_pattern - ccline.cmdbuff); while (--j > i) { +#ifdef FEAT_MBYTE + if (has_mbyte) + j -= (*mb_head_off)(ccline.cmdbuff, ccline.cmdbuff + j); +#endif if (vim_ispathsep(ccline.cmdbuff[j])) { found = TRUE; @@ -3490,12 +3494,7 @@ sm_gettail(s) t = p; had_sep = FALSE; } -#ifdef FEAT_MBYTE - if (has_mbyte) - p += (*mb_ptr2len_check)(p); - else -#endif - ++p; + mb_ptr_adv(p); } return t; } @@ -4173,7 +4172,7 @@ ExpandRTDir(pat, num_file, file, dirname) break; if (e - 4 > s && STRNICMP(e - 4, ".vim", 4) == 0) { - for (s = e - 4; s > all; --s) + for (s = e - 4; s > all; mb_ptr_back(all, s)) if (*s == '\n' || vim_ispathsep(*s)) break; ++s; diff --git a/src/fileio.c b/src/fileio.c index c37c96a1d..d33718d12 100644 --- a/src/fileio.c +++ b/src/fileio.c @@ -370,13 +370,8 @@ readfile(fname, sfname, from, lines_to_skip, lines_to_read, eap, flags) */ if (fname != NULL && *fname != NUL) { - p = fname + STRLEN(fname) - 1; - if ((vim_ispathsep(*p) -#ifdef FEAT_MBYTE - /* Do not use a multi-byte char as path separator. */ - && (!has_mbyte || (*mb_head_off)(fname, p) == 0) -#endif - ) || STRLEN(fname) >= MAXPATHL) + p = fname + STRLEN(fname); + if (after_pathsep(fname, p) || STRLEN(fname) >= MAXPATHL) { filemess(curbuf, fname, (char_u *)_("Illegal file name"), 0); msg_end(); @@ -2801,7 +2796,8 @@ buf_write(buf, fname, sfname, start, end, eap, append, forceit, ml_timestamp(buf); buf->b_flags &= ~BF_WRITE_MASK; } - if (reset_changed && buf->b_changed) + if (reset_changed && buf->b_changed + && (overwriting || vim_strchr(p_cpo, CPO_PLUS) != NULL)) /* Buffer still changed, the autocommands didn't work * properly. */ return FAIL; @@ -3526,7 +3522,7 @@ buf_write(buf, fname, sfname, start, end, eap, append, forceit, * the original file. * Don't do this if there is a backup file and we are exiting. */ - if (reset_changed && !newfile && !otherfile(ffname) + if (reset_changed && !newfile && overwriting && !(exiting && backup != NULL)) { ml_preserve(buf, FALSE); @@ -4192,11 +4188,14 @@ restore_backup: keep_msg_attr = 0; } + /* When written everything correctly: reset 'modified'. Unless not + * writing to the original file and '+' is not in 'cpoptions'. */ if (reset_changed && whole #ifdef FEAT_MBYTE && !write_info.bw_conv_error #endif - ) /* when written everything correctly */ + && (overwriting || vim_strchr(p_cpo, CPO_PLUS) != NULL) + ) { unchanged(buf, TRUE); u_unchanged(buf); @@ -5383,7 +5382,7 @@ buf_modname(shortname, fname, ext, prepend_dot) vim_free(retval); return NULL; } - if (!vim_ispathsep(retval[fnamelen - 1])) + if (!after_pathsep(retval, retval + fnamelen)) { retval[fnamelen++] = PATHSEP; retval[fnamelen] = NUL; @@ -5410,7 +5409,7 @@ buf_modname(shortname, fname, ext, prepend_dot) * Then truncate what is after the '/', '\' or ':' to 8 characters for * MSDOS and 26 characters for AMIGA, a lot more for UNIX. */ - for (ptr = retval + fnamelen; ptr >= retval; ptr--) + for (ptr = retval + fnamelen; ptr >= retval; mb_ptr_back(retval, ptr)) { #ifndef RISCOS if (*ext == '.' diff --git a/src/fold.c b/src/fold.c index bb268fb25..b1c7031f5 100644 --- a/src/fold.c +++ b/src/fold.c @@ -2070,12 +2070,7 @@ foldtext_cleanup(str) } else { -#ifdef FEAT_MBYTE - if (has_mbyte) - s += (*mb_ptr2len_check)(s); - else -#endif - ++s; + mb_ptr_adv(s); } } } diff --git a/src/getchar.c b/src/getchar.c index dd52ac4e9..8328e19a1 100644 --- a/src/getchar.c +++ b/src/getchar.c @@ -1514,7 +1514,7 @@ vgetc() continue; } #endif -#ifdef HAVE_GTK2 +#if defined(HAVE_GTK2) && defined(FEAT_MENU) /* GTK: <F10> normally selects the menu, but it's passed until * here to allow mapping it. Intercept and invoke the GTK * behavior if it's not mapped. */ @@ -3852,12 +3852,7 @@ scroll_line_len(lnum) for (;;) { w = chartabsize(p, col); -#ifdef FEAT_MBYTE - if (has_mbyte) - p += (*mb_ptr2len_check)(p); - else -#endif - ++p; + mb_ptr_adv(p); if (*p == NUL) /* don't count the last character */ break; col += w; diff --git a/src/gui_gtk.c b/src/gui_gtk.c index f4287ec2e..e5b4259bb 100644 --- a/src/gui_gtk.c +++ b/src/gui_gtk.c @@ -2014,7 +2014,7 @@ split_button_string(char_u *button_string, int *n_buttons) if (array != NULL) { array[count++] = (char *)button_string; - for (p = button_string; *p != NUL; ++p) + for (p = button_string; *p != NUL; mb_ptr_adv(p)) { if (*p == DLG_BUTTON_SEP) { @@ -2023,10 +2023,6 @@ split_button_string(char_u *button_string, int *n_buttons) } else if (*p == DLG_HOTKEY_CHAR) *p = '_'; -#ifdef FEAT_MBYTE - else if (has_mbyte) - p += (*mb_ptr2len_check)(p) - 1; -#endif } array[count] = NULL; /* currently not relied upon, but doesn't hurt */ } diff --git a/src/gui_gtk_x11.c b/src/gui_gtk_x11.c index 34bbed533..ffd702c40 100644 --- a/src/gui_gtk_x11.c +++ b/src/gui_gtk_x11.c @@ -4792,6 +4792,7 @@ gui_mch_get_font(char_u *name, int report_error) return font; } +#if defined(FEAT_EVAL) || defined(PROTO) /* * Return the name of font "font" in allocated memory. */ @@ -4799,7 +4800,7 @@ gui_mch_get_font(char_u *name, int report_error) char_u * gui_mch_get_fontname(GuiFont font, char_u *name) { -#ifdef HAVE_GTK2 +# ifdef HAVE_GTK2 if (font != NOFONT) { char *name = pango_font_description_to_string(font); @@ -4812,13 +4813,14 @@ gui_mch_get_fontname(GuiFont font, char_u *name) return s; } } -#else +# else /* Don't know how to get the name, return what we got. */ if (name != NULL) return vim_strsave(name); -#endif +# endif return NULL; } +#endif #if !defined(HAVE_GTK2) || defined(PROTO) /* diff --git a/src/gui_kde.cc b/src/gui_kde.cc index 499db7754..1ac8db990 100644 --- a/src/gui_kde.cc +++ b/src/gui_kde.cc @@ -40,8 +40,8 @@ extern "C" { #undef mputs #if 1 -#define dbf( format, args... ) { printf( "%s" " : " format "\n" , __FUNCTION__ , ## args ); fflush(stdout); } -#define db() { printf( "%s\n", __FUNCTION__ );fflush(stdout); } +#define dbf(format, args...) { printf("%s" " : " format "\n" , __FUNCTION__ , ## args ); fflush(stdout); } +#define db() { printf("%s\n", __FUNCTION__ );fflush(stdout); } #else #define dbf(format, args... ) #define db() @@ -165,163 +165,184 @@ const char *kdeicons[] = { /* * creates a blank pixmap using tb_blank */ - QPixmap + QPixmap pixmap_create_from_xpm(char **xpm)//{{{ { - return(QPixmap((const char **)xpm)); + return (QPixmap((const char **)xpm)); }//}}} /* * creates a pixmap by using a built-in number */ - QPixmap + QPixmap pixmap_create_by_num(int pixmap_num)//{{{ { #ifdef FEAT_KDETOOLBAR - if (pixmap_num >= 0 && (unsigned)pixmap_num < (sizeof(kdeicons) - / sizeof(kdeicons[0])) - 1) { - - KIconLoader *il = kapp->iconLoader(); //new KIconLoader(); - QString icon; - icon=QString(kdeicons[pixmap_num]); - return il->loadIcon(icon,KIcon::MainToolbar); - } - return QPixmap(); + if (pixmap_num >= 0 && (unsigned)pixmap_num < (sizeof(kdeicons) + / sizeof(kdeicons[0])) - 1) + { + + KIconLoader *il = kapp->iconLoader(); //new KIconLoader(); + QString icon; + icon = QString(kdeicons[pixmap_num]); + return il->loadIcon(icon, KIcon::MainToolbar); + } + return QPixmap(); #else - if (pixmap_num >= 0 && (unsigned)pixmap_num < (sizeof(built_in_pixmaps) - / sizeof(built_in_pixmaps[0])) - 1) - return pixmap_create_from_xpm(built_in_pixmaps[pixmap_num]); - else return QPixmap(); + if (pixmap_num >= 0 && (unsigned)pixmap_num < (sizeof(built_in_pixmaps) + / sizeof(built_in_pixmaps[0])) - 1) + return pixmap_create_from_xpm(built_in_pixmaps[pixmap_num]); + else + return QPixmap(); #endif }//}}} /* * Creates a pixmap by using the pixmap "name" found in 'runtimepath'/bitmaps/ */ - QPixmap + QPixmap pixmap_create_by_dir(char_u *name)//{{{ { - char_u full_pathname[MAXPATHL + 1]; + char_u full_pathname[MAXPATHL + 1]; - if (gui_find_bitmap(name, full_pathname, "xpm") == OK) { - return QPixmap((const char *)full_pathname); - } - else return QPixmap(); + if (gui_find_bitmap(name, full_pathname, "xpm") == OK) + { + return QPixmap((const char *)full_pathname); + } + else + return QPixmap(); }//}}} - QPixmap + QPixmap pixmap_create_from_file(char_u *file) { - return QPixmap((const char*)file); + return QPixmap((const char *)file); } #endif - void + void gui_mch_add_menu(vimmenu_T * menu, int idx)//{{{ { #ifdef FEAT_MENU - QPopupMenu *me; - vimmenu_T *parent = menu->parent; - - if (menu_is_popup(menu->name)) { - menu->widget = new QPopupMenu(vmw , (const char *) menu->name); - QObject::connect( menu->widget, SIGNAL(activated(int)), vmw, SLOT(menu_activated(int)) ); - return; - } - - if (!menu_is_menubar(menu->name)) - return; - - if (parent) { - idx++; // for tearoffs to be first in menus - me = new QPopupMenu(parent->widget, (const char *) menu->name); - parent->widget->insertItem( QString((const char *)menu->name), me, (int)me, idx); - } else { - me = new QPopupMenu(vmw->menuBar() , (const char *) menu->name); - vmw->menuBar()->insertItem( QString((const char *)menu->name), me , (int) me, idx); - } - - me->setCaption((const char*)( menu->dname )); - if (vmw->have_tearoff) me->insertTearOffHandle(0,0); - QObject::connect( me, SIGNAL(activated(int)), vmw, SLOT(menu_activated(int)) ); - menu->widget = me; + QPopupMenu *me; + vimmenu_T *parent = menu->parent; + + if (menu_is_popup(menu->name)) + { + menu->widget = new QPopupMenu(vmw , (const char *)menu->name); + QObject::connect(menu->widget, SIGNAL(activated(int)), vmw, + SLOT(menu_activated(int))); + return; + } + + if (!menu_is_menubar(menu->name)) + return; + + if (parent) + { + idx++; // for tearoffs to be first in menus + me = new QPopupMenu(parent->widget, (const char *)menu->name); + parent->widget->insertItem(QString((const char *)menu->name), me, + (int)me, idx); + } + else + { + me = new QPopupMenu(vmw->menuBar() , (const char *)menu->name); + vmw->menuBar()->insertItem(QString((const char *)menu->name), me, + (int)me, idx); + } + + me->setCaption((const char *)(menu->dname)); + if (vmw->have_tearoff) + me->insertTearOffHandle(0, 0); + QObject::connect(me, SIGNAL(activated(int)), vmw, + SLOT(menu_activated(int))); + menu->widget = me; #endif }//}}} - void + void gui_mch_add_menu_item(vimmenu_T * menu, int idx)//{{{ { #ifdef FEAT_MENU - vimmenu_T *parent = menu->parent; + vimmenu_T *parent = menu->parent; #ifdef FEAT_TOOLBAR - if (menu_is_toolbar(parent->name)) { - QPixmap pix; - if ( menu_is_separator(menu->name) ) - { - vmw->toolBar()->insertSeparator(); - return; - } - if (menu->iconfile != NULL) { - pix = pixmap_create_from_file(menu->iconfile); - } - if (!menu->icon_builtin) { - pix = pixmap_create_by_dir(menu->name); - } - if (pix.isNull() && menu->iconidx >= 0) { - pix = pixmap_create_by_num(menu->iconidx); - } + if (menu_is_toolbar(parent->name)) + { + QPixmap pix; + + if (menu_is_separator(menu->name)) + { + vmw->toolBar()->insertSeparator(); + return; + } + if (menu->iconfile != NULL) + { + pix = pixmap_create_from_file(menu->iconfile); + } + if (!menu->icon_builtin) + { + pix = pixmap_create_by_dir(menu->name); + } + if (pix.isNull() && menu->iconidx >= 0) + { + pix = pixmap_create_by_num(menu->iconidx); + } #ifndef FEAT_KDETOOLBAR - if (pix.isNull()) { - pix = pixmap_create_from_xpm(tb_blank_xpm); - } -#endif - if (pix.isNull()) return; // failed - vmw->toolBar()->insertButton ( - pix, - (int) menu , // id - true, - (char *) (menu->strings[MENU_INDEX_TIP]) , // tooltip or text - idx - ); - menu->parent=parent; - return; + if (pix.isNull()) + { + pix = pixmap_create_from_xpm(tb_blank_xpm); } +#endif + if (pix.isNull()) + return; // failed + vmw->toolBar()->insertButton( + pix, + (int)menu, // id + true, + (char *)(menu->strings[MENU_INDEX_TIP]), // tooltip or text + idx); + menu->parent=parent; + return; + } #endif // FEAT_TOOLBAR - idx++; - if ( menu_is_separator(menu->name) ) { - parent->widget->insertSeparator(); - return; - } - parent->widget->insertItem(QString((const char *)menu->name), (int)menu, idx ); + idx++; + if (menu_is_separator(menu->name)) + { + parent->widget->insertSeparator(); + return; + } + parent->widget->insertItem(QString((const char *)menu->name), (int)menu, idx); #endif }//}}} - void + void gui_mch_set_text_area_pos(int x, int y, int w, int h)//{{{ { - int X = 0; - int Y = 0; - if (vmw->menuBar()->isVisible() && vmw->menuBar()->isEnabled() + int X = 0; + int Y = 0; + + if (vmw->menuBar()->isVisible() && vmw->menuBar()->isEnabled() #if QT_VERSION>=300 - && !vmw->menuBar()->isTopLevelMenu() + && !vmw->menuBar()->isTopLevelMenu() #endif - ) - Y += vmw->menuBar()->height(); + ) + Y += vmw->menuBar()->height(); #ifdef FEAT_TOOLBAR - if (vmw->toolBar()->isVisible() && vmw->toolBar()->isEnabled() && - vmw->toolBar()->barPos()==KToolBar::Top) - Y += vmw->toolBar()->height(); + if (vmw->toolBar()->isVisible() && vmw->toolBar()->isEnabled() + && vmw->toolBar()->barPos()==KToolBar::Top) + Y += vmw->toolBar()->height(); - if (vmw->toolBar()->isVisible() && vmw->toolBar()->isEnabled() && - vmw->toolBar()->barPos()==KToolBar::Left) - X += vmw->toolBar()->width(); + if (vmw->toolBar()->isVisible() && vmw->toolBar()->isEnabled() + && vmw->toolBar()->barPos()==KToolBar::Left) + X += vmw->toolBar()->width(); #endif // FEAT_TOOLBAR - gui.w->setGeometry(x+X,y+Y,w,h); + gui.w->setGeometry(x + X, y + Y, w, h); }//}}} @@ -329,24 +350,29 @@ gui_mch_set_text_area_pos(int x, int y, int w, int h)//{{{ /* * Enable or disable mnemonics for the toplevel menus. */ - void + void gui_gtk_set_mnemonics(int enable)//{{{ // TO BE REMOVED { }//}}} - void + void toggle_tearoffs(vimmenu_T *menu, int enable)//{{{ { - while (menu != NULL) { - if (!menu_is_popup(menu->name)) { - if (menu->widget != 0) { - if (enable) menu->widget->insertTearOffHandle(0,0); - else menu->widget->removeItem(0); - } - toggle_tearoffs(menu->children, enable); - } - menu = menu->next; + while (menu != NULL) + { + if (!menu_is_popup(menu->name)) + { + if (menu->widget != 0) + { + if (enable) + menu->widget->insertTearOffHandle(0,0); + else + menu->widget->removeItem(0); + } + toggle_tearoffs(menu->children, enable); } + menu = menu->next; + } }//}}} void @@ -362,20 +388,21 @@ gui_mch_toggle_tearoffs(int enable)//{{{ /* * Destroy the machine specific menu widget. */ - void + void gui_mch_destroy_menu(vimmenu_T * menu)//{{{ { #ifdef FEAT_TOOLBAR - if (menu->parent && menu_is_toolbar(menu->parent->name)) { - vmw->toolBar()->removeItem( (int) menu ); - return; - } + if (menu->parent && menu_is_toolbar(menu->parent->name)) + { + vmw->toolBar()->removeItem((int)menu); + return; + } #endif - if (menu->parent) - menu->parent->widget->removeItem((int)menu); - if (menu->widget) - delete menu->widget; - menu->widget = 0; + if (menu->parent) + menu->parent->widget->removeItem((int)menu); + if (menu->widget) + delete menu->widget; + menu->widget = 0; }//}}} #endif /* FEAT_MENU */ @@ -384,68 +411,78 @@ gui_mch_destroy_menu(vimmenu_T * menu)//{{{ * Scrollbar stuff. */ - void -gui_mch_set_scrollbar_thumb(scrollbar_T * sb, long val, long size, long max)//{{{ + void +gui_mch_set_scrollbar_thumb(scrollbar_T *sb, long val, long size, long max)//{{{ { - if (!sb->w) return; + if (!sb->w) + return; - sb->w->setRange(0, max+1-size); - sb->w->setValue(val); + sb->w->setRange(0, max + 1 - size); + sb->w->setValue(val); - sb->w->setLineStep(1); - sb->w->setPageStep(size); + sb->w->setLineStep(1); + sb->w->setPageStep(size); }//}}} - void -gui_mch_set_scrollbar_pos(scrollbar_T * sb, int x, int y, int w, int h)//{{{ + void +gui_mch_set_scrollbar_pos(scrollbar_T *sb, int x, int y, int w, int h)//{{{ { - if (!sb->w) return; - //we add the menubar and toolbar height/width - int X = 0; - int Y = 0; + if (!sb->w) + return; + //we add the menubar and toolbar height/width + int X = 0; + int Y = 0; - if (vmw->menuBar()->isVisible() && vmw->menuBar()->isEnabled() + if (vmw->menuBar()->isVisible() && vmw->menuBar()->isEnabled() #if QT_VERSION>=300 - && !vmw->menuBar()->isTopLevelMenu() + && !vmw->menuBar()->isTopLevelMenu() #endif - ) - Y += vmw->menuBar()->height(); + ) + Y += vmw->menuBar()->height(); #ifdef FEAT_TOOLBAR - if (vmw->toolBar()->isVisible() && vmw->toolBar()->isEnabled() && - vmw->toolBar()->barPos()==KToolBar::Top) - Y += vmw->toolBar()->height(); + if (vmw->toolBar()->isVisible() && vmw->toolBar()->isEnabled() + && vmw->toolBar()->barPos()==KToolBar::Top) + Y += vmw->toolBar()->height(); - if (vmw->toolBar()->isVisible() && vmw->toolBar()->isEnabled() && - vmw->toolBar()->barPos()==KToolBar::Left) - X += vmw->toolBar()->width(); + if (vmw->toolBar()->isVisible() && vmw->toolBar()->isEnabled() + && vmw->toolBar()->barPos()==KToolBar::Left) + X += vmw->toolBar()->width(); #endif //FEAT_TOOLBAR - if (sb->w->orientation() == Qt::Vertical) { - bool leftscroll=gui.which_scrollbars[SBAR_LEFT]; - bool rightscroll=gui.which_scrollbars[SBAR_RIGHT]; - if (x<20) leftscroll=true; - else rightscroll=true; - if (x<20) sb->w->setGeometry(X,y+Y,w,h); - else sb->w->setGeometry(vmw->width()-w-1+X, y+Y,w,h); - } else { - sb->w->setGeometry(x+X,y+Y,w,h); - } + if (sb->w->orientation() == Qt::Vertical) + { + bool leftscroll=gui.which_scrollbars[SBAR_LEFT]; + bool rightscroll=gui.which_scrollbars[SBAR_RIGHT]; + + if (x < 20) + leftscroll = true; + else + rightscroll = true; + if (x < 20) + sb->w->setGeometry(X, y+Y, w, h); + else + sb->w->setGeometry(vmw->width() - w - 1 + X, y + Y, w, h); + } + else + { + sb->w->setGeometry(x + X, y + Y, w, h); + } }//}}} /* SBAR_VERT or SBAR_HORIZ */ - void -gui_mch_create_scrollbar(scrollbar_T * sb, int orient)//{{{ + void +gui_mch_create_scrollbar(scrollbar_T *sb, int orient)//{{{ { - sbpool->create(sb,orient); - if (orient==SBAR_VERT) - gui.scrollbar_width = sb->w->sizeHint().width(); - else - gui.scrollbar_height = sb->w->sizeHint().height(); + sbpool->create(sb,orient); + if (orient == SBAR_VERT) + gui.scrollbar_width = sb->w->sizeHint().width(); + else + gui.scrollbar_height = sb->w->sizeHint().height(); }//}}} - void + void gui_mch_destroy_scrollbar(scrollbar_T * sb)//{{{ { - sbpool->destroy(sb); + sbpool->destroy(sb); }//}}} #if defined(FEAT_BROWSE) || defined(PROTO) @@ -464,7 +501,7 @@ gui_mch_destroy_scrollbar(scrollbar_T * sb)//{{{ * filter not used (file name filter) */ /*ARGSUSED*/ -char_u * + char_u * gui_mch_browse(int saving,//{{{ char_u * title, char_u * dflt, @@ -472,36 +509,37 @@ gui_mch_browse(int saving,//{{{ char_u * initdir, char_u * filter) { - char * filt_glob; + char *filt_glob; - if (filter != (char_u *) 0x0 ) - { - filter = vim_strsave(filter); - strtok((char *) filter, "("); - filt_glob = strtok(0L, ")"); - } - else - filt_glob = (char *) filter; + if (filter != (char_u *)0x0) + { + filter = vim_strsave(filter); + strtok((char *)filter, "("); + filt_glob = strtok(0L, ")"); + } + else + filt_glob = (char *)filter; - gui_mch_mousehide(FALSE); + gui_mch_mousehide(FALSE); - QString s; - if (!saving) - s = KFileDialog::getOpenFileName( (char *) initdir, (char *) filt_glob, vmw, (char *) title ); - else - s = KFileDialog::getSaveFileName( ); + QString s; + if (!saving) + s = KFileDialog::getOpenFileName((char *)initdir, (char *)filt_glob, + vmw, (char *)title); + else + s = KFileDialog::getSaveFileName(); - if (filter) - vim_free(filter); + if (filter) + vim_free(filter); - if (s.isNull()) - return NULL; - QCString unistring = vmw->codec->fromUnicode(s); - char_u * s2 = (char_u *)(const char*)unistring; - if (s2) - s2 = vim_strsave( s2 ); + if (s.isNull()) + return NULL; + QCString unistring = vmw->codec->fromUnicode(s); + char_u *s2 = (char_u *)(const char *)unistring; + if (s2) + s2 = vim_strsave(s2); - return s2; + return s2; }//}}} #endif /* FEAT_BROWSE */ @@ -511,9 +549,9 @@ gui_mch_browse(int saving,//{{{ /* ARGSUSED */ int gui_mch_dialog(int type, /* type of dialog *///{{{ - char_u * title, /* title of dialog */ - char_u * message, /* message text */ - char_u * buttons, /* names of buttons */ + char_u *title, /* title of dialog */ + char_u *message, /* message text */ + char_u *buttons, /* names of buttons */ int def_but, /* default button */ char_u *textfield) { @@ -546,8 +584,8 @@ gui_make_popup (char_u *pathname)//{{{ /* Find and Replace implementations */ - void -gui_mch_find_dialog(exarg_T * eap)//{{{ + void +gui_mch_find_dialog(exarg_T *eap)//{{{ { // char_u* entry_text; //int exact_word=FALSE; @@ -555,8 +593,9 @@ gui_mch_find_dialog(exarg_T * eap)//{{{ vmw->finddlg->setCaseSensitive(true); - /* if (entry_text!=NULL) { - vmw->finddlg->setText(QString((char*)entry_text)); + /* if (entry_text!=NULL) + * { + vmw->finddlg->setText(QString((char *)entry_text)); // exact match should go there, hopefully KDE old KEdFind/KEdReplace will be replaced in KDE 4 as pple wanted KDE 3's Find/Replace to be kept }*/ // Don't use it, KDE keeps old search in memory and vim give \\Csearch, which is difficult to handle // vim_free(entry_text); @@ -564,25 +603,26 @@ gui_mch_find_dialog(exarg_T * eap)//{{{ vmw->finddlg->show(); }//}}} - void -gui_mch_replace_dialog(exarg_T * eap)//{{{ + void +gui_mch_replace_dialog(exarg_T *eap)//{{{ { - // char_u* entry_text; - //int exact_word=FALSE; + // char_u* entry_text; + //int exact_word=FALSE; - // entry_text = get_find_dialog_text(eap->arg,&exact_word); + // entry_text = get_find_dialog_text(eap->arg,&exact_word); - /* if (entry_text!=NULL) { - vmw->repldlg->setText(QString((char*)entry_text)); - // exact match should go there, hopefully KDE old KEdFind/KEdReplace will be replaced in KDE 4 as pple wanted KDE 3's Find/Replace to be kept - }*/ - //vim_free(entry_text); + /* if (entry_text!=NULL) + * { + vmw->repldlg->setText(QString((char *)entry_text)); + // exact match should go there, hopefully KDE old KEdFind/KEdReplace will be replaced in KDE 4 as pple wanted KDE 3's Find/Replace to be kept + }*/ + //vim_free(entry_text); - vmw->repldlg->show(); + vmw->repldlg->show(); }//}}} - void + void ex_helpfind(exarg_T *eap)//{{{ { - do_cmdline_cmd((char_u *)"emenu ToolBar.FindHelp"); + do_cmdline_cmd((char_u *)"emenu ToolBar.FindHelp"); }//}}} diff --git a/src/gui_w32.c b/src/gui_w32.c index 461dcefc5..cf07b2632 100644 --- a/src/gui_w32.c +++ b/src/gui_w32.c @@ -2562,7 +2562,7 @@ gui_mch_dialog( type = 0; /* allocate some memory for dialog template */ - /* TODO should compute this really*/ + /* TODO should compute this really */ pdlgtemplate = p = (PWORD)LocalAlloc(LPTR, DLG_ALLOC_SIZE); if (p == NULL) diff --git a/src/gui_x11.c b/src/gui_x11.c index 90e6fbd94..03300e453 100644 --- a/src/gui_x11.c +++ b/src/gui_x11.c @@ -1992,6 +1992,7 @@ gui_mch_get_font(name, giveErrorIfMissing) * Return the name of font "font" in allocated memory. * Don't know how to get the actual name, thus use the provided name. */ +/*ARGSUSED*/ char_u * gui_mch_get_fontname(font, name) GuiFont font; diff --git a/src/if_xcmdsrv.c b/src/if_xcmdsrv.c index fe127a46e..b24101f3f 100644 --- a/src/if_xcmdsrv.c +++ b/src/if_xcmdsrv.c @@ -103,10 +103,14 @@ static PendingCommand *pendingCommands = NULL; * * Each command and each result takes the form of ASCII text. For a * command, the text consists of a nul character followed by several - * nul-terminated ASCII strings. The first string consists of the - * single letter "c" for an expression, or "k" for keystrokes. Subsequent - * strings have the form "option value" where the following options are - * supported: + * nul-terminated ASCII strings. The first string consists of a + * single letter: + * "c" for an expression + * "k" for keystrokes + * "r" for reply + * "n" for notification. + * Subsequent strings have the form "option value" where the following options + * are supported: * * -r commWindow serial * @@ -120,6 +124,10 @@ static PendingCommand *pendingCommands = NULL; * "Name" gives the name of the application for which the command is * intended. This option must be present. * + * -E encoding + * Encoding name used for the text. This is the 'encoding' of the + * sender. The receiver may want to do conversion to his 'encoding'. + * * -s script * "Script" is the script to be executed. This option must be * present. Taken as a series of keystrokes in a "k" command where @@ -453,11 +461,19 @@ serverSendToVim(dpy, name, cmd, result, server, asExpr, localLoop, silent) * Send the command to target interpreter by appending it to the * comm window in the communication window. */ - length = STRLEN(name) + STRLEN(cmd) + 10; - property = (char_u *)alloc((unsigned) length + 30); + length = STRLEN(name) + STRLEN(cmd) + 14; +#ifdef FEAT_MBYTE + length += STRLEN(p_enc); +#endif + property = (char_u *)alloc((unsigned)length + 30); +#ifdef FEAT_MBYTE + sprintf((char *)property, "%c%c%c-n %s%c-E %s%c-s %s", + 0, asExpr ? 'c' : 'k', 0, name, 0, p_enc, 0, cmd); +#else sprintf((char *)property, "%c%c%c-n %s%c-s %s", 0, asExpr ? 'c' : 'k', 0, name, 0, cmd); +#endif if (name == loosename) vim_free(loosename); /* Add a back reference to our comm window */ @@ -751,7 +767,7 @@ serverStrToWin(str) } /* - * Send a reply string to client with id "name". + * Send a reply string (notification) to client with id "name". * Return -1 if the window is invalid. */ int @@ -773,11 +789,19 @@ serverSendReply(name, str) if (!WindowValid(dpy, win)) return -1; - length = STRLEN(str) + 7; - if ((property = (char_u *)alloc((unsigned) length + 30)) != NULL) + length = STRLEN(str) + 11; +#ifdef FEAT_MBYTE + length += STRLEN(p_enc); +#endif + if ((property = (char_u *)alloc((unsigned)length + 30)) != NULL) { - sprintf((char *)property, "%c%c%c-n %s%c-w %x", - 0, 'n', 0, str, 0, (unsigned int)commWindow); +#ifdef FEAT_MBYTE + sprintf((char *)property, "%cn%c-E %s%c-n %s%c-w %x", + 0, 0, p_enc, 0, str, 0, (unsigned int)commWindow); +#else + sprintf((char *)property, "%cn%c-n %s%c-w %x", + 0, 0, str, 0, (unsigned int)commWindow); +#endif length += STRLEN(property + length); res = AppendPropCarefully(dpy, win, commProperty, property, length + 1); vim_free(property); @@ -1129,6 +1153,7 @@ serverEventProc(dpy, eventPtr) int result, actualFormat, code; long_u numItems, bytesAfter; Atom actualType; + char_u *tofree; if (eventPtr != NULL) { @@ -1180,6 +1205,7 @@ serverEventProc(dpy, eventPtr) char_u *name, *script, *serial, *end, *res; Bool asKeys = *p == 'k'; garray_T reply; + char_u *enc; /* * This is an incoming command from some other application. @@ -1192,6 +1218,7 @@ serverEventProc(dpy, eventPtr) resWindow = None; serial = (char_u *)""; script = NULL; + enc = NULL; while (p - propInfo < numItems && *p == '-') { switch (p[1]) @@ -1220,6 +1247,10 @@ serverEventProc(dpy, eventPtr) if (p[2] == ' ') script = p + 3; break; + case 'E': + if (p[2] == ' ') + enc = p + 3; + break; } while (*p != 0) p++; @@ -1236,18 +1267,26 @@ serverEventProc(dpy, eventPtr) if (resWindow != None) { ga_init2(&reply, 1, 100); +#ifdef FEAT_MBYTE + ga_grow(&reply, 50 + STRLEN(p_enc)); + sprintf(reply.ga_data, "%cr%c-E %s%c-s %s%c-r ", + 0, 0, p_enc, 0, serial, 0); +#else ga_grow(&reply, 50); sprintf(reply.ga_data, "%cr%c-s %s%c-r ", 0, 0, serial, 0); +#endif reply.ga_len = 10 + STRLEN(serial); reply.ga_room -= reply.ga_len; } res = NULL; if (serverName != NULL && STRICMP(name, serverName) == 0) { + script = serverConvert(enc, script, &tofree); if (asKeys) server_to_input_buf(script); else res = eval_client_expr_to_string(script); + vim_free(tofree); } if (resWindow != None) { @@ -1262,14 +1301,16 @@ serverEventProc(dpy, eventPtr) ga_append(&reply, NUL); (void)AppendPropCarefully(dpy, resWindow, commProperty, reply.ga_data, reply.ga_len); + ga_clear(&reply); } vim_free(res); } else if (*p == 'r' && p[1] == 0) { - int serial, gotSerial; - char_u *res; - PendingCommand *pcPtr; + int serial, gotSerial; + char_u *res; + PendingCommand *pcPtr; + char_u *enc; /* * This is a reply to some command that we sent out. Iterate @@ -1280,6 +1321,7 @@ serverEventProc(dpy, eventPtr) gotSerial = 0; res = (char_u *)""; code = 0; + enc = NULL; while ((p-propInfo) < numItems && *p == '-') { switch (p[1]) @@ -1288,6 +1330,10 @@ serverEventProc(dpy, eventPtr) if (p[2] == ' ') res = p + 3; break; + case 'E': + if (p[2] == ' ') + enc = p + 3; + break; case 's': if (sscanf((char *)p + 2, " %d", &serial) == 1) gotSerial = 1; @@ -1316,7 +1362,12 @@ serverEventProc(dpy, eventPtr) pcPtr->code = code; if (res != NULL) - pcPtr->result = vim_strsave(res); + { + res = serverConvert(enc, res, &tofree); + if (tofree == NULL) + res = vim_strsave(res); + pcPtr->result = res; + } else pcPtr->result = vim_strsave((char_u *)""); break; @@ -1330,6 +1381,7 @@ serverEventProc(dpy, eventPtr) char_u *str; char_u winstr[30]; struct ServerReply *r; + char_u *enc; /* * This is a (n)otification. Sent with serverreply_send in VimL. @@ -1338,6 +1390,7 @@ serverEventProc(dpy, eventPtr) p += 2; gotWindow = 0; str = (char_u *)""; + enc = NULL; while ((p-propInfo) < numItems && *p == '-') { switch (p[1]) @@ -1346,6 +1399,10 @@ serverEventProc(dpy, eventPtr) if (p[2] == ' ') str = p + 3; break; + case 'E': + if (p[2] == ' ') + enc = p + 3; + break; case 'w': if (sscanf((char *)p + 2, " %x", &u) == 1) { @@ -1361,6 +1418,7 @@ serverEventProc(dpy, eventPtr) if (!gotWindow) continue; + str = serverConvert(enc, str, &tofree); if ((r = ServerReplyFind(win, SROP_Add)) != NULL) { ga_concat(&(r->strings), str); @@ -1370,7 +1428,7 @@ serverEventProc(dpy, eventPtr) sprintf((char *)winstr, "0x%x", (unsigned int)win); apply_autocmds(EVENT_REMOTEREPLY, winstr, str, TRUE, curbuf); #endif - + vim_free(tofree); } else { diff --git a/src/macros.h b/src/macros.h index 43bddba32..9596796df 100644 --- a/src/macros.h +++ b/src/macros.h @@ -253,3 +253,21 @@ /* Without the 'numberwidth' option line numbers are always 7 chars. */ # define number_width(x) 7 #endif + +#ifndef FEAT_MBYTE +# define after_pathsep(b, p) vim_ispathsep(*((p) - 1)) +#endif + +/* + * mb_ptr_adv(): advance a pointer to the next character, taking care of + * multi-byte characters if needed. + * mb_ptr_back(): backup a pointer to the previous character, taking care of + * multi-byte characters if needed. + */ +#ifdef FEAT_MBYTE +# define mb_ptr_adv(p) p += has_mbyte ? (*mb_ptr2len_check)(p) : 1 +# define mb_ptr_back(s, p) p -= has_mbyte ? ((*mb_head_off)(s, p - 1) + 1) : 1 +#else +# define mb_ptr_adv(p) ++p +# define mb_ptr_back(s, p) --p +#endif diff --git a/src/main.c b/src/main.c index 5791bb640..133597015 100644 --- a/src/main.c +++ b/src/main.c @@ -2228,11 +2228,12 @@ main_loop(cmdwin) getout_preserve_modified(exitval) int exitval; { -#if defined(UNIX) - /* Ignore SIGHUP, because a dropped connection may make Vim exit and then - * get a SIGHUP while exiting, which causes various reentrent problems. */ +# if defined(SIGHUP) && defined(SIG_IGN) + /* Ignore SIGHUP, because a dropped connection causes a read error, which + * makes Vim exit and then handling SIGHUP causes various reentrance + * problems. */ signal(SIGHUP, SIG_IGN); -#endif +# endif ml_close_notmod(); /* close all not-modified buffers */ ml_sync_all(FALSE, FALSE); /* preserve all swap files */ @@ -3220,6 +3221,42 @@ eval_client_expr_to_string(expr) return res; } +/* + * If conversion is needed, convert "data" from "client_enc" to 'encoding' and + * return an allocated string. Otherwise return "data". + * "*tofree" is set to the result when it needs to be freed later. + */ +/*ARGSUSED*/ + char_u * +serverConvert(client_enc, data, tofree) + char_u *client_enc; + char_u *data; + char_u **tofree; +{ + char_u *res = data; + + *tofree = NULL; +# ifdef FEAT_MBYTE + if (client_enc != NULL && p_enc != NULL) + { + vimconv_T vimconv; + + vimconv.vc_type = CONV_NONE; + if (convert_setup(&vimconv, client_enc, p_enc) != FAIL + && vimconv.vc_type != CONV_NONE) + { + res = string_convert(&vimconv, data, NULL); + if (res == NULL) + res = data; + else + *tofree = res; + } + convert_setup(&vimconv, NULL, NULL); + } +# endif + return res; +} + /* * Make our basic server name: use the specified "arg" if given, otherwise use diff --git a/src/mark.c b/src/mark.c index ea941e59b..6a149bfac 100644 --- a/src/mark.c +++ b/src/mark.c @@ -630,15 +630,11 @@ mark_line(mp, lead_len) return NULL; /* Truncate the line to fit it in the window */ len = 0; - for (p = s; *p != NUL; ++p) + for (p = s; *p != NUL; mb_ptr_adv(p)) { len += ptr2cells(p); if (len >= Columns - lead_len) break; -#ifdef FEAT_MBYTE - if (has_mbyte) - p += (*mb_ptr2len_check)(p) - 1; -#endif } *p = NUL; return s; diff --git a/src/mbyte.c b/src/mbyte.c index 071096653..e739a5b04 100644 --- a/src/mbyte.c +++ b/src/mbyte.c @@ -680,7 +680,7 @@ codepage_invalid: /* When using Unicode, set default for 'fileencodings'. */ if (enc_utf8 && !option_was_set((char_u *)"fencs")) set_string_option_direct((char_u *)"fencs", -1, - (char_u *)"ucs-bom,utf-8,latin1", OPT_FREE); + (char_u *)"ucs-bom,utf-8,default,latin1", OPT_FREE); #if defined(HAVE_BIND_TEXTDOMAIN_CODESET) && defined(FEAT_GETTEXT) /* GNU gettext 0.10.37 supports this feature: set the codeset used for * translated messages independently from the current locale. */ @@ -2590,7 +2590,7 @@ mb_prevptr(line, p) char_u *p; { if (p > line) - p = p - (*mb_head_off)(line, p - 1) - 1; + mb_ptr_back(line, p); return p; } @@ -2746,6 +2746,17 @@ enc_canonize(enc) char_u *p, *s; int i; +# ifdef FEAT_MBYTE + if (STRCMP(enc, "default") == 0) + { + /* Use the default encoding as it's found by set_init_1(). */ + r = get_encoding_default(); + if (r == NULL) + r = (char_u *)"latin1"; + return vim_strsave(r); + } +# endif + /* copy "enc" to allocted memory, with room for two '-' */ r = alloc((unsigned)(STRLEN(enc) + 3)); if (r != NULL) diff --git a/src/memline.c b/src/memline.c index a3bd9d7be..13f35c2af 100644 --- a/src/memline.c +++ b/src/memline.c @@ -125,9 +125,10 @@ struct data_block #define INDEX_SIZE (sizeof(unsigned)) /* size of one db_index entry */ #define HEADER_SIZE (sizeof(DATA_BL) - INDEX_SIZE) /* size of data block header */ -#define B0_FNAME_SIZE 900 -#define B0_UNAME_SIZE 40 -#define B0_HNAME_SIZE 40 +#define B0_FNAME_SIZE_ORG 900 /* what it was in older versions */ +#define B0_FNAME_SIZE 898 +#define B0_UNAME_SIZE 40 +#define B0_HNAME_SIZE 40 /* * Restrict the numbers to 32 bits, otherwise most compilers will complain. * This won't detect a 64 bit machine that only swaps a byte in the top 32 @@ -160,13 +161,39 @@ struct block0 char_u b0_pid[4]; /* process id of creator (or 0) */ char_u b0_uname[B0_UNAME_SIZE]; /* name of user (uid if no name) */ char_u b0_hname[B0_HNAME_SIZE]; /* host name (if it has a name) */ - char_u b0_fname[B0_FNAME_SIZE]; /* name of file being edited */ + char_u b0_fname[B0_FNAME_SIZE_ORG]; /* name of file being edited */ long b0_magic_long; /* check for byte order of long */ int b0_magic_int; /* check for byte order of int */ short b0_magic_short; /* check for byte order of short */ char_u b0_magic_char; /* check for last char */ }; -#define b0_dirty b0_fname[B0_FNAME_SIZE-1] + +/* + * Note: b0_fname and b0_flags are put at the end of the file name. For very + * long file names in older versions of Vim they are invalid. + * The 'fileencoding' comes before b0_flags, with a NUL in front. But only + * when there is room, for very long file names it's omitted. + */ +#define B0_DIRTY 0x55 +#define b0_dirty b0_fname[B0_FNAME_SIZE_ORG-1] + +/* + * The b0_flags field is new in Vim 7.0. + */ +#define b0_flags b0_fname[B0_FNAME_SIZE_ORG-2] + +/* The lowest two bits contain the fileformat. Zero means it's not set + * (compatible with Vim 6.x), otherwise it's EOL_UNIX + 1, EOL_DOS + 1 or + * EOL_MAC + 1. */ +#define B0_FF_MASK 3 + +/* Swap file is in directory of edited file. Used to find the file from + * different mount points. */ +#define B0_SAME_DIR 4 + +/* The 'fileencoding' is at the end of b0_fname[], with a NUL in front of it. + * When empty there is only the NUL. */ +#define B0_HAS_FENC 8 #define STACK_INCR 5 /* nr of entries added to ml_stack at a time */ @@ -187,7 +214,12 @@ static linenr_T lowest_marked = 0; #define ML_FLUSH 0x02 /* flush locked block */ #define ML_SIMPLE(x) (x & 0x10) /* DEL, INS or FIND */ +static void ml_upd_block0 __ARGS((buf_T *buf, int setfname)); static void set_b0_fname __ARGS((ZERO_BL *, buf_T *buf)); +static void set_b0_dir_flag __ARGS((ZERO_BL *b0p, buf_T *buf)); +#ifdef FEAT_MBYTE +static void add_b0_fenc __ARGS((ZERO_BL *b0p, buf_T *buf)); +#endif static time_t swapfile_info __ARGS((char_u *)); static int recov_file_names __ARGS((char_u **, char_u *, int prepend_dot)); static int ml_append_int __ARGS((buf_T *, linenr_T, char_u *, colnr_T, int, int)); @@ -282,7 +314,8 @@ ml_open() b0p->b0_id[0] = BLOCK0_ID0; b0p->b0_id[1] = BLOCK0_ID1; - b0p->b0_dirty = curbuf->b_changed ? 0x55 : 0; + b0p->b0_dirty = curbuf->b_changed ? B0_DIRTY : 0; + b0p->b0_flags = get_fileformat(curbuf) + 1; b0p->b0_magic_long = (long)B0_MAGIC_LONG; b0p->b0_magic_int = (int)B0_MAGIC_INT; b0p->b0_magic_short = (short)B0_MAGIC_SHORT; @@ -433,6 +466,7 @@ ml_setname(buf) #else mf_set_ffname(mfp); #endif + ml_upd_block0(buf, FALSE); break; } vim_free(fname); /* this fname didn't work, try another */ @@ -507,6 +541,8 @@ ml_open_file(buf) */ mf_fullname(mfp); #endif + ml_upd_block0(buf, FALSE); + /* Flush block zero, so others can read it */ if (mf_sync(mfp, MFS_ZERO) == OK) break; @@ -608,19 +644,34 @@ ml_close_notmod() ml_timestamp(buf) buf_T *buf; { + ml_upd_block0(buf, TRUE); +} + +/* + * Update the timestamp or the B0_SAME_DIR flag of the .swp file. + */ + static void +ml_upd_block0(buf, setfname) + buf_T *buf; + int setfname; +{ memfile_T *mfp; bhdr_T *hp; ZERO_BL *b0p; mfp = buf->b_ml.ml_mfp; - if (mfp == NULL || (hp = mf_get(mfp, (blocknr_T)0, 1)) == NULL) return; b0p = (ZERO_BL *)(hp->bh_data); if (b0p->b0_id[0] != BLOCK0_ID0 || b0p->b0_id[1] != BLOCK0_ID1) - EMSG(_("E304: ml_timestamp: Didn't get block 0??")); + EMSG(_("E304: ml_upd_block0(): Didn't get block 0??")); else - set_b0_fname(b0p, buf); + { + if (setfname) + set_b0_fname(b0p, buf); + else + set_b0_dir_flag(b0p, buf); + } mf_put(mfp, hp, TRUE, FALSE); } @@ -641,9 +692,14 @@ set_b0_fname(b0p, buf) else { #if defined(MSDOS) || defined(MSWIN) || defined(AMIGA) || defined(RISCOS) - /* systems that cannot translate "~user" back into a path: copy the - * file name unmodified */ + /* Systems that cannot translate "~user" back into a path: copy the + * file name unmodified. Do use slashes instead of backslashes for + * portability. */ STRNCPY(b0p->b0_fname, buf->b_ffname, B0_FNAME_SIZE); + b0p->b0_fname[B0_FNAME_SIZE - 1] = NUL; +# ifdef BACKSLASH_IN_FILENAME + forward_slash(b0p->b0_fname); +# endif #else size_t flen, ulen; char_u uname[B0_UNAME_SIZE]; @@ -662,7 +718,10 @@ set_b0_fname(b0p, buf) /* If there is no user name or it is too long, don't use "~/" */ if (get_user_name(uname, B0_UNAME_SIZE) == FAIL || (ulen = STRLEN(uname)) + flen > B0_FNAME_SIZE - 1) + { STRNCPY(b0p->b0_fname, buf->b_ffname, B0_FNAME_SIZE); + b0p->b0_fname[B0_FNAME_SIZE - 1] = NUL; + } else { mch_memmove(b0p->b0_fname + ulen + 1, b0p->b0_fname + 1, flen); @@ -691,7 +750,54 @@ set_b0_fname(b0p, buf) buf->b_orig_mode = 0; } } + +#ifdef FEAT_MBYTE + /* Also add the 'fileencoding' if there is room. */ + add_b0_fenc(b0p, curbuf); +#endif +} + +/* + * Update the B0_SAME_DIR flag of the swap file. It's set if the file and the + * swapfile for "buf" are in the same directory. + * This is fail safe: if we are not sure the directories are equal the flag is + * not set. + */ + static void +set_b0_dir_flag(b0p, buf) + ZERO_BL *b0p; + buf_T *buf; +{ + if (same_directory(buf->b_ml.ml_mfp->mf_fname, buf->b_ffname)) + b0p->b0_flags |= B0_SAME_DIR; + else + b0p->b0_flags &= ~B0_SAME_DIR; +} + +#ifdef FEAT_MBYTE +/* + * When there is room, add the 'fileencoding' to block zero. + */ + static void +add_b0_fenc(b0p, buf) + ZERO_BL *b0p; + buf_T *buf; +{ + int n; + + n = STRLEN(buf->b_p_fenc); + if (STRLEN(b0p->b0_fname) + n + 1 > B0_FNAME_SIZE) + b0p->b0_flags &= ~B0_HAS_FENC; + else + { + mch_memmove((char *)b0p->b0_fname + B0_FNAME_SIZE - n, + (char *)buf->b_p_fenc, (size_t)n); + *(b0p->b0_fname + B0_FNAME_SIZE - n - 1) = NUL; + b0p->b0_flags |= B0_HAS_FENC; + } } +#endif + /* * try to recover curbuf from the .swp file @@ -704,6 +810,8 @@ ml_recover() char_u *fname; bhdr_T *hp = NULL; ZERO_BL *b0p; + int b0_ff; + char_u *b0_fenc = NULL; PTR_BL *pp; DATA_BL *dp; infoptr_T *ip; @@ -926,6 +1034,17 @@ ml_recover() EMSG(_("E308: Warning: Original file may have been changed")); } out_flush(); + + /* Get the 'fileformat' and 'fileencoding' from block zero. */ + b0_ff = (b0p->b0_flags & B0_FF_MASK); + if (b0p->b0_flags & B0_HAS_FENC) + { + for (p = b0p->b0_fname + B0_FNAME_SIZE; + p > b0p->b0_fname && p[-1] != NUL; --p) + ; + b0_fenc = vim_strnsave(p, b0p->b0_fname + B0_FNAME_SIZE - p); + } + mf_put(mfp, hp, FALSE, FALSE); /* release block 0 */ hp = NULL; @@ -948,6 +1067,16 @@ ml_recover() ml_delete((linenr_T)1, FALSE); } + /* Use the 'fileformat' and 'fileencoding' as stored in the swap file. */ + if (b0_ff != 0) + set_fileformat(b0_ff - 1, OPT_LOCAL); + if (b0_fenc != NULL) + { + set_option_value((char_u *)"fenc", 0L, b0_fenc, OPT_LOCAL); + vim_free(b0_fenc); + } + unchanged(curbuf, TRUE); + bnum = 1; /* start with block 1 */ page_count = 1; /* which is 1 page */ lnum = 0; /* append after line 0 in curbuf */ @@ -1295,7 +1424,7 @@ recover_names(fname, list, nr) { #if defined(UNIX) || defined(WIN3264) p = dir_name + STRLEN(dir_name); - if (vim_ispathsep(p[-1]) && p[-1] == p[-2]) + if (after_pathsep(dir_name, p) && p[-1] == p[-2]) { /* Ends with '//', Use Full path for swap name */ tail = make_percent_swname(dir_name, *fname); @@ -1441,7 +1570,7 @@ make_percent_swname(dir, name) char_u *dir; char_u *name; { - char_u *d, *s, *f, *p; + char_u *d, *s, *f; f = fix_fname(name != NULL ? name : (char_u *) ""); d = NULL; @@ -1450,9 +1579,10 @@ make_percent_swname(dir, name) s = alloc((unsigned)(STRLEN(f) + 1)); if (s != NULL) { - for (d = s, p = f; *p; p++, d++) - *d = vim_ispathsep(*p) ? '%' : *p; - *d = 0; + STRCPY(s, f); + for (d = s; *d != NUL; mb_ptr_adv(d)) + if (vim_ispathsep(*d)) + *d = '%'; d = concat_fnames(dir, s, TRUE); vim_free(s); } @@ -3266,7 +3396,7 @@ makeswapname(buf, dir_name) #if defined(UNIX) || defined(WIN3264) /* Need _very_ long file names */ s = dir_name + STRLEN(dir_name); - if (vim_ispathsep(s[-1]) && s[-1] == s[-2]) + if (after_pathsep(dir_name, s) && s[-1] == s[-2]) { /* Ends with '//', Use Full path */ r = NULL; if ((s = make_percent_swname(dir_name, buf->b_fname)) != NULL) @@ -3617,18 +3747,33 @@ findswapname(buf, dirp, old_fname) if (read(fd, (char *)&b0, sizeof(b0)) == sizeof(b0)) { /* - * The name in the swap file may be "~user/path/file". - * Expand it first. + * If the swapfile has the same directory as the + * buffer don't compare the directory names, they can + * have a different mountpoint. */ - expand_env(b0.b0_fname, NameBuff, MAXPATHL); + if (b0.b0_flags & B0_SAME_DIR) + { + if (fnamecmp(gettail(buf->b_ffname), + gettail(b0.b0_fname)) != 0 + || !same_directory(fname, buf->b_ffname)) + differ = TRUE; + } + else + { + /* + * The name in the swap file may be + * "~user/path/file". Expand it first. + */ + expand_env(b0.b0_fname, NameBuff, MAXPATHL); #ifdef CHECK_INODE - if (fnamecmp_ino(buf->b_ffname, NameBuff, - char_to_long(b0.b0_ino))) - differ = TRUE; + if (fnamecmp_ino(buf->b_ffname, NameBuff, + char_to_long(b0.b0_ino))) + differ = TRUE; #else - if (fnamecmp(NameBuff, buf->b_ffname) != 0) - differ = TRUE; + if (fnamecmp(NameBuff, buf->b_ffname) != 0) + differ = TRUE; #endif + } } close(fd); } @@ -3956,10 +4101,15 @@ char_to_long(s) return retval; } +/* + * Set the flags in the first block of the swap file: + * - file is modified or not: buf->b_changed + * - 'fileformat' + * - 'fileencoding' + */ void -ml_setdirty(buf, flag) +ml_setflags(buf) buf_T *buf; - int flag; { bhdr_T *hp; ZERO_BL *b0p; @@ -3971,7 +4121,12 @@ ml_setdirty(buf, flag) if (hp->bh_bnum == 0) { b0p = (ZERO_BL *)(hp->bh_data); - b0p->b0_dirty = flag ? 0x55 : 0; + b0p->b0_dirty = buf->b_changed ? B0_DIRTY : 0; + b0p->b0_flags = (b0p->b0_flags & ~B0_FF_MASK) + | (get_fileformat(buf) + 1); +#ifdef FEAT_MBYTE + add_b0_fenc(b0p, buf); +#endif hp->bh_flags |= BH_DIRTY; mf_sync(buf->b_ml.ml_mfp, MFS_ZERO); break; diff --git a/src/menu.c b/src/menu.c index a64745bcc..aeb3c61c2 100644 --- a/src/menu.c +++ b/src/menu.c @@ -146,12 +146,7 @@ ex_menu(eap) { if (*arg == '\\') mch_memmove(arg, arg + 1, STRLEN(arg)); -#ifdef FEAT_MBYTE - if (has_mbyte) - arg += (*mb_ptr2len_check)(arg); - else -#endif - ++arg; + mb_ptr_adv(arg); } if (*arg != NUL) { @@ -681,17 +676,13 @@ add_menu_path(menu_path, menuarg, pri_tab, call_data STRCPY(tearpath, menu_path); idx = (int)(next_name - path_name - 1); - for (s = tearpath; *s && s < tearpath + idx; ++s) + for (s = tearpath; *s && s < tearpath + idx; mb_ptr_adv(s)) { if ((*s == '\\' || *s == Ctrl_V) && s[1]) { ++idx; ++s; } -# ifdef FEAT_MBYTE - if (has_mbyte) - s += (*mb_ptr2len_check)(s) - 1; -# endif } tearpath[idx] = NUL; gui_add_tearoff(tearpath, pri_tab, pri_idx); @@ -1410,7 +1401,7 @@ menu_name_skip(name) { char_u *p; - for (p = name; *p && *p != '.'; p++) + for (p = name; *p && *p != '.'; mb_ptr_adv(p)) { if (*p == '\\' || *p == Ctrl_V) { @@ -1418,10 +1409,6 @@ menu_name_skip(name) if (*p == NUL) break; } -#ifdef FEAT_MBYTE - if (has_mbyte) - p += (*mb_ptr2len_check)(p) - 1; /* skip multibyte char */ -#endif } if (*p) *p++ = NUL; diff --git a/src/message.c b/src/message.c index caf7ac0a4..6a2386478 100644 --- a/src/message.c +++ b/src/message.c @@ -2897,12 +2897,7 @@ msg_show_console_dialog(message, buttons, dfltbutton) } /* advance to the next character */ -#ifdef FEAT_MBYTE - if (has_mbyte) - r += (*mb_ptr2len_check)(r); - else -#endif - ++r; + mb_ptr_adv(r); } if (copy) @@ -2910,12 +2905,7 @@ msg_show_console_dialog(message, buttons, dfltbutton) *msgp++ = ':'; *msgp++ = ' '; *msgp = NUL; -#ifdef FEAT_MBYTE - if (has_mbyte) - hotkp += (*mb_ptr2len_check)(hotkp); - else -#endif - ++hotkp; + mb_ptr_adv(hotkp); *hotkp = NUL; } else @@ -3148,11 +3138,8 @@ do_browse(flags, title, dflt, ext, initdir, filter, buf) if (fname != NULL && *fname != NUL && !mch_isdir(fname)) { /* Remove the file name. */ - char_u *s = get_past_head(fname); - char_u *tail = gettail(fname); + char_u *tail = gettail_sep(fname); - while (tail > s && vim_ispathsep(tail[-1])) - --tail; if (tail == fname) *tail++ = '.'; /* use current dir */ *tail = NUL; diff --git a/src/misc1.c b/src/misc1.c index 4dc5a4179..891fbb5cc 100644 --- a/src/misc1.c +++ b/src/misc1.c @@ -1006,8 +1006,7 @@ open_line(dir, flags, old_indent) while (old_size < repl_size && p > leader) { - --p; - p -= mb_head_off(leader, p); + mb_ptr_back(leader, p); old_size += ptr2cells(p); } l = lead_repl_len - (endp - p); @@ -1741,12 +1740,7 @@ plines_win_col(wp, lnum, column) while (*s != NUL && --column >= 0) { col += win_lbr_chartabsize(wp, s, (colnr_T)col, NULL); -#ifdef FEAT_MBYTE - if (has_mbyte) - s += (*mb_ptr2len_check)(s); - else -#endif - ++s; + mb_ptr_adv(s); } /* @@ -2451,7 +2445,7 @@ changed() } } curbuf->b_changed = TRUE; - ml_setdirty(curbuf, TRUE); + ml_setflags(curbuf); #ifdef FEAT_WINDOWS check_status(curbuf); #endif @@ -2788,7 +2782,7 @@ unchanged(buf, ff) if (buf->b_changed || (ff && file_ff_differs(buf))) { buf->b_changed = 0; - ml_setdirty(buf, FALSE); + ml_setflags(buf); if (ff) save_file_ff(buf); #ifdef FEAT_WINDOWS @@ -3520,15 +3514,16 @@ expand_env_esc(src, dst, dstlen, esc) { STRCPY(dst, var); dstlen -= (int)STRLEN(var); - dst += STRLEN(var); + c = STRLEN(var); /* if var[] ends in a path separator and tail[] starts * with it, skip a character */ - if (*var != NUL && vim_ispathsep(dst[-1]) + if (*var != NUL && after_pathsep(dst, dst + c) #if defined(BACKSLASH_IN_FILENAME) || defined(AMIGA) && dst[-1] != ':' #endif && vim_ispathsep(*tail)) ++tail; + dst += c; src = tail; copy_char = FALSE; } @@ -3667,7 +3662,7 @@ vim_getenv(name, mustfree) #ifndef MACOS_CLASSIC /* With MacOS path (with colons) the final colon is required */ /* to avoid confusion between absoulute and relative path */ - if (pend > p && vim_ispathsep(*(pend - 1))) + if (pend > p && after_pathsep(p, pend)) --pend; #endif @@ -3789,7 +3784,7 @@ remove_tail(p, pend, name) if (newend >= p && fnamencmp(newend, name, len - 1) == 0 - && (newend == p || vim_ispathsep(*(newend - 1)))) + && (newend == p || after_pathsep(p, newend))) return newend; return pend; } @@ -3809,9 +3804,9 @@ remove_tail_with_ext(p, pend, ext) char_u *newend = pend - len; if (newend >= p && fnamencmp(newend, ext, len - 1) == 0) - while (newend != p && !vim_ispathsep(*(newend - 1))) - --newend; - if (newend == p || vim_ispathsep(*(newend - 1))) + while (newend != p && !after_pathsep(newend)) + mb_ptr_back(newend); + if (newend == p || after_pathsep(newend)) return newend; return pend; } @@ -4122,17 +4117,35 @@ gettail(fname) { if (vim_ispathsep(*p2)) p1 = p2 + 1; -#ifdef FEAT_MBYTE - if (has_mbyte) - p2 += (*mb_ptr2len_check)(p2); - else -#endif - ++p2; + mb_ptr_adv(p2); } return p1; } /* + * Get pointer to tail of "fname", including path separators. Putting a NUL + * here leaves the directory name. Takes care of "c:/" and "//". + * Always returns a valid pointer. + */ + char_u * +gettail_sep(fname) + char_u *fname; +{ + char_u *p; + char_u *t; + + p = get_past_head(fname); /* don't remove the '/' from "c:/file" */ + t = gettail(fname); + while (t > p && after_pathsep(fname, t)) + --t; +#ifdef VMS + /* path separator is part of the path */ + ++t; +#endif + return t; +} + +/* * get the next path component (just after the next path separator). */ char_u * @@ -4140,18 +4153,12 @@ getnextcomp(fname) char_u *fname; { while (*fname && !vim_ispathsep(*fname)) - ++fname; + mb_ptr_adv(fname); if (*fname) ++fname; return fname; } -#if defined(FEAT_MODIFY_FNAME) || defined(FEAT_EVAL) \ - || defined(FEAT_SESSION) || defined(MSWIN) \ - || ((defined(FEAT_GUI_GTK) || defined(FEAT_GUI_KDE)) \ - && (defined(FEAT_WINDOWS) || defined(FEAT_DND))) \ - || defined(FEAT_SUN_WORKSHOP) || defined(FEAT_NETBEANS_INTG) \ - || defined(PROTO) /* * Get a pointer to one character past the head of a path name. * Unix: after "/"; DOS: after "c:\"; Amiga: after "disk:/"; Mac: no head. @@ -4185,7 +4192,6 @@ get_past_head(path) return retval; } -#endif /* * return TRUE if 'c' is a path separator. @@ -4299,7 +4305,7 @@ concat_fnames(fname1, fname2, sep) add_pathsep(p) char_u *p; { - if (*p != NUL && !vim_ispathsep(*(p + STRLEN(p) - 1))) + if (*p != NUL && !after_pathsep(p, p + STRLEN(p))) STRCAT(p, PATHSEPSTR); } @@ -7653,9 +7659,10 @@ get_lisp_indent() void prepare_to_exit() { -#if defined(UNIX) - /* Ignore SIGHUP, because a dropped connection may make Vim exit and then - * get a SIGHUP while exiting, which causes various reentrent problems. */ +#if defined(SIGHUP) && defined(SIG_IGN) + /* Ignore SIGHUP, because a dropped connection causes a read error, which + * makes Vim exit and then handling SIGHUP causes various reentrance + * problems. */ signal(SIGHUP, SIG_IGN); #endif @@ -7904,7 +7911,7 @@ static int expand_backtick __ARGS((garray_T *gap, char_u *pat, int flags)); static int _cdecl pstrcmp(const void *a, const void *b) { - return (pathcmp(*(char **)a, *(char **)b)); + return (pathcmp(*(char **)a, *(char **)b, -1)); } # ifndef WIN3264 diff --git a/src/misc2.c b/src/misc2.c index 47ff4a4e7..7a8502603 100644 --- a/src/misc2.c +++ b/src/misc2.c @@ -200,12 +200,7 @@ coladvance2(pos, addspaces, finetune, wcol) /* Count a tab for what it's worth (if list mode not on) */ #ifdef FEAT_LINEBREAK csize = win_lbr_chartabsize(curwin, ptr, col, &head); -# ifdef FEAT_MBYTE - if (has_mbyte) - ptr += (*mb_ptr2len_check)(ptr); - else -# endif - ++ptr; + mb_ptr_adv(ptr); #else csize = lbr_chartabsize_adv(&ptr, col); #endif @@ -1451,12 +1446,7 @@ vim_strrchr(string, c) { if (*string == c) retval = string; -#ifdef FEAT_MBYTE - if (has_mbyte) - string += (*mb_ptr2len_check)(string); - else -#endif - ++string; + mb_ptr_adv(string); } return retval; } @@ -1479,12 +1469,7 @@ vim_strpbrk(s, charset) { if (vim_strchr(charset, *s) != NULL) return s; -#ifdef FEAT_MBYTE - if (has_mbyte) - s += (*mb_ptr2len_check)(s); - else -#endif - ++s; + mb_ptr_adv(s); } return NULL; } @@ -2645,6 +2630,46 @@ get_real_state() return State; } +#if defined(FEAT_MBYTE) || defined(PROTO) +/* + * Return TRUE if "p" points to just after a path separator. + * Take care of multi-byte characters. + * "b" must point to the start of the file name + */ + int +after_pathsep(b, p) + char_u *b; + char_u *p; +{ + return vim_ispathsep(p[-1]) + && (!has_mbyte || (*mb_head_off)(b, p - 1) == 0); +} +#endif + +/* + * Return TRUE if file names "f1" and "f2" are in the same directory. + * "f1" may be a short name, "f2" must be a full path. + */ + int +same_directory(f1, f2) + char_u *f1; + char_u *f2; +{ + char_u ffname[MAXPATHL]; + char_u *t1; + char_u *t2; + + /* safety check */ + if (f1 == NULL || f2 == NULL) + return FALSE; + + (void)vim_FullName(f1, ffname, MAXPATHL, FALSE); + t1 = gettail_sep(ffname); + t2 = gettail_sep(f2); + return (t1 - ffname == t2 - f2 + && pathcmp((char *)ffname, (char *)f2, (int)(t1 - ffname)) == 0); +} + #if defined(FEAT_SESSION) || defined(MSWIN) || defined(FEAT_GUI_MAC) \ || ((defined(FEAT_GUI_GTK) || defined(FEAT_GUI_KDE)) \ && ( defined(FEAT_WINDOWS) || defined(FEAT_DND)) ) \ @@ -2659,18 +2684,12 @@ get_real_state() vim_chdirfile(fname) char_u *fname; { - char_u temp_string[MAXPATHL]; - char_u *p; - char_u *t; - - STRCPY(temp_string, fname); - p = get_past_head(temp_string); - t = gettail(temp_string); - while (t > p && vim_ispathsep(t[-1])) - --t; - *t = NUL; /* chop off end of string */ + char_u dir[MAXPATHL]; - return mch_chdir((char *)temp_string) == 0 ? OK : FAIL; + STRNCPY(dir, fname, MAXPATHL); + dir[MAXPATHL - 1] = NUL; + *gettail_sep(dir) = NUL; + return mch_chdir((char *)dir) == 0 ? OK : FAIL; } #endif @@ -5196,16 +5215,18 @@ sort_strings(files, count) #if !defined(NO_EXPANDPATH) || defined(PROTO) /* * Compare path "p[]" to "q[]". + * If "maxlen" >= 0 compare "p[maxlen]" to "q[maxlen]" * Return value like strcmp(p, q), but consider path separators. */ int -pathcmp(p, q) +pathcmp(p, q, maxlen) const char *p, *q; + int maxlen; { int i; const char *s; - for (i = 0; ; ++i) + for (i = 0; maxlen < 0 || i < maxlen; ++i) { /* End of "p": check if "q" also ends or just has a slash. */ if (p[i] == NUL) @@ -5245,13 +5266,16 @@ pathcmp(p, q) } /* ignore a trailing slash, but not "//" or ":/" */ - if (s[i + 1] == NUL && i > 0 && !vim_ispathsep(s[i - 1]) + if (i >= maxlen + || (s[i + 1] == NUL + && i > 0 + && !after_pathsep((char_u *)s, (char_u *)s + i) #ifdef BACKSLASH_IN_FILENAME - && (s[i] == '/' || s[i] == '\\') + && (s[i] == '/' || s[i] == '\\') #else - && s[i] == '/' + && s[i] == '/' #endif - ) + )) return 0; /* match with trailing slash */ if (s == q) return -1; /* no match */ @@ -2488,7 +2488,7 @@ op_change(oap) #ifdef FEAT_VISUALEXTRA /* - * In Visual block mode, handle copying the next text to all lines of the + * In Visual block mode, handle copying the new text to all lines of the * block. */ if (oap->block_mode && oap->start.lnum != oap->end.lnum) @@ -3946,13 +3946,12 @@ do_join(insert_space) #ifdef FEAT_MBYTE if (has_mbyte) { - next = curr + currsize - 1; - next -= (*mb_head_off)(curr, next); + next = curr + currsize; + mb_ptr_back(curr, next); endcurr1 = (*mb_ptr2char)(next); if (next > curr) { - --next; - next -= (*mb_head_off)(curr, next); + mb_ptr_back(curr, next); endcurr2 = (*mb_ptr2char)(next); } } @@ -4614,12 +4613,7 @@ block_prep(oap, bdp, lnum, is_del) } #endif prev_pstart = pstart; -#ifdef FEAT_MBYTE - if (has_mbyte) - pstart += (*mb_ptr2len_check)(pstart); - else -#endif - ++pstart; + mb_ptr_adv(pstart); } bdp->start_char_vcols = incr; if (bdp->start_vcol < oap->start_vcol) /* line too short */ @@ -4994,10 +4988,12 @@ do_addsub(command, Prenum1) length -= (int)STRLEN(buf2); /* - * adjust number of zeros to the new number of digits, so the - * total length of the number remains the same + * Adjust number of zeros to the new number of digits, so the + * total length of the number remains the same. + * Don't do this when + * the result may look like an octal number. */ - if (firstdigit == '0') + if (firstdigit == '0' && !(dooct && hex == 0)) while (length-- > 0) *ptr++ = '0'; *ptr = NUL; diff --git a/src/option.c b/src/option.c index d3e47ebaa..6b596832b 100644 --- a/src/option.c +++ b/src/option.c @@ -4722,7 +4722,7 @@ did_set_string_option(opt_idx, varp, new_value_alloced, oldval, errbuf, * separator (slash and/or backslash), wildcards and characters that are * often illegal in a file name. */ else if ((options[opt_idx].flags & P_NFNAME) - && vim_strpbrk(*varp, "/\\*?[|<>") != NULL) + && vim_strpbrk(*varp, (char_u *)"/\\*?[|<>") != NULL) { errmsg = e_invarg; } @@ -4951,11 +4951,15 @@ did_set_string_option(opt_idx, varp, new_value_alloced, oldval, errbuf, /* No comma allowed in 'fileencoding'; catches confusing it * with 'fileencodings'. */ errmsg = e_invarg; -# ifdef FEAT_TITLE else + { +# ifdef FEAT_TITLE /* May show a "+" in the title now. */ need_maketitle = TRUE; # endif + /* Add 'fileencoding' to the swap file. */ + ml_setflags(curbuf); + } } if (errmsg == NULL) { @@ -5075,6 +5079,8 @@ did_set_string_option(opt_idx, varp, new_value_alloced, oldval, errbuf, #ifdef FEAT_TITLE need_maketitle = TRUE; #endif + /* update flag in swap file */ + ml_setflags(curbuf); } } @@ -5275,12 +5281,7 @@ did_set_string_option(opt_idx, varp, new_value_alloced, oldval, errbuf, { if (ptr2cells(s) != 1) errmsg = (char_u *)N_("E595: contains unprintable or wide character"); -# ifdef FEAT_MBYTE - if (has_mbyte) - s += (*mb_ptr2len_check)(s); - else -# endif - ++s; + mb_ptr_adv(s); } } #endif @@ -7313,6 +7314,19 @@ get_highlight_default() return (char_u *)NULL; } +#if defined(FEAT_MBYTE) || defined(PROTO) + char_u * +get_encoding_default() +{ + int i; + + i = findoption((char_u *)"enc"); + if (i >= 0) + return options[i].def_val[VI_DEFAULT]; + return (char_u *)NULL; +} +#endif + /* * Translate a string like "t_xx", "<t_xx>" or "<S-Tab>" to a key number. */ @@ -8902,20 +8916,13 @@ ExpandOldSetting(num_file, file) #ifdef BACKSLASH_IN_FILENAME /* For MS-Windows et al. we don't double backslashes at the start and * before a file name character. */ - for (var = buf; *var != NUL; ) - { + for (var = buf; *var != NUL; mb_ptr_adv(var)) if (var[0] == '\\' && var[1] == '\\' && expand_option_idx >= 0 && (options[expand_option_idx].flags & P_EXPAND) && vim_isfilec(var[2]) && (var[2] != '\\' || (var == buf && var[4] != '\\'))) mch_memmove(var, var + 1, STRLEN(var)); -#ifdef FEAT_MBYTE - else if (has_mbyte) - var += (*mb_ptr2len_check)(var) - 1; -#endif - ++var; - } #endif *file[0] = buf; @@ -9025,13 +9032,11 @@ langmap_set() for (p = p_langmap; p[0] != NUL; ) { - for (p2 = p; p2[0] != NUL && p2[0] != ',' && p2[0] != ';'; ++p2) + for (p2 = p; p2[0] != NUL && p2[0] != ',' && p2[0] != ';'; + mb_ptr_adv(p2)) { if (p2[0] == '\\' && p2[1] != NUL) ++p2; -#ifdef FEAT_MBYTE - p2 += (*mb_ptr2len_check)(p2) - 1; -#endif } if (p2[0] == ';') ++p2; /* abcd;ABCD form, p2 points to A */ @@ -9048,11 +9053,7 @@ langmap_set() #endif if (p2 == NULL) { -#ifdef FEAT_MBYTE - p += (*mb_ptr2len_check)(p); -#else - ++p; -#endif + mb_ptr_adv(p); if (p[0] == '\\') ++p; #ifdef FEAT_MBYTE @@ -9080,11 +9081,7 @@ langmap_set() langmap_mapchar[from & 255] = to; /* Advance to next pair */ -#ifdef FEAT_MBYTE - p += (*mb_ptr2len_check)(p); -#else - ++p; -#endif + mb_ptr_adv(p); if (p2 == NULL) { if (p[0] == ',') @@ -9095,11 +9092,7 @@ langmap_set() } else { -#ifdef FEAT_MBYTE - p2 += (*mb_ptr2len_check)(p2); -#else - ++p2; -#endif + mb_ptr_adv(p2); if (*p == ';') { p = p2; diff --git a/src/option.h b/src/option.h index 566a56117..8ef8536ff 100644 --- a/src/option.h +++ b/src/option.h @@ -161,9 +161,10 @@ #define CPO_FILTER '!' #define CPO_MATCH '%' #define CPO_STAR '*' /* ":*" means ":@" */ +#define CPO_PLUS '+' /* ":write file" resets 'modified' */ #define CPO_SPECI '<' /* don't recognize <> in mappings */ #define CPO_DEFAULT "aABceFs" -#define CPO_ALL "aAbBcCdDeEfFgiIjJkKlLmMnoOprRsStuvwWxy$!%*<" +#define CPO_ALL "aAbBcCdDeEfFgiIjJkKlLmMnoOprRsStuvwWxy$!%*+<" /* characters for p_ww option: */ #define WW_ALL "bshl<>[],~" diff --git a/src/os_amiga.c b/src/os_amiga.c index f462ccc59..772bdcf80 100644 --- a/src/os_amiga.c +++ b/src/os_amiga.c @@ -1501,7 +1501,7 @@ sortcmp(a, b) char *s = *(char **)a; char *t = *(char **)b; - return pathcmp(s, t); + return pathcmp(s, t, -1); } /* @@ -1511,16 +1511,12 @@ sortcmp(a, b) mch_has_exp_wildcard(p) char_u *p; { - for ( ; *p; ++p) + for ( ; *p; mb_ptr_adv(p)) { if (*p == '\\' && p[1] != NUL) ++p; else if (vim_strchr((char_u *)"*?[(#", *p) != NULL) return TRUE; -#ifdef FEAT_MBYTE - if (has_mbyte) - p += (*mb_ptr2len_check)(p) - 1; -#endif } return FALSE; } @@ -1529,7 +1525,7 @@ mch_has_exp_wildcard(p) mch_has_wildcard(p) char_u *p; { - for ( ; *p; ++p) + for ( ; *p; mb_ptr_adv(p)) { if (*p == '\\' && p[1] != NUL) ++p; @@ -1543,10 +1539,6 @@ mch_has_wildcard(p) , *p) != NULL || (*p == '~' && p[1] != NUL)) return TRUE; -#ifdef FEAT_MBYTE - if (has_mbyte) - p += (*mb_ptr2len_check)(p) - 1; -#endif } return FALSE; } diff --git a/src/os_mac.c b/src/os_mac.c index d1eb03d9a..cc656f061 100644 --- a/src/os_mac.c +++ b/src/os_mac.c @@ -299,7 +299,7 @@ mac_expandpath( pstrcmp(a, b) const void *a, *b; { - return (pathcmp(*(char **)a, *(char **)b)); + return (pathcmp(*(char **)a, *(char **)b, -1)); } static int @@ -1008,12 +1008,7 @@ slash_adjust(p) { if (*p == '/') *p = ':'; -#ifdef FEAT_MBYTE - if (has_mbyte) - p += (*mb_ptr2len_check)(p); - else -#endif - ++p; + mb_ptr_adv(p); } #endif } @@ -1207,16 +1202,12 @@ mch_call_shell(cmd, options) mch_has_exp_wildcard(p) char_u *p; { - for ( ; *p; ++p) + for ( ; *p; mb_ptr_adv(p)) { if (*p == '\\' && p[1] != NUL) ++p; else if (vim_strchr((char_u *)WILDCHAR_LIST, *p) != NULL) return TRUE; -#ifdef FEAT_MBYTE - if (has_mbyte) - p += (*mb_ptr2len_check)(p) - 1; -#endif } return FALSE; } diff --git a/src/os_msdos.c b/src/os_msdos.c index 1056fe0e5..41d587763 100644 --- a/src/os_msdos.c +++ b/src/os_msdos.c @@ -1700,12 +1700,7 @@ slash_adjust(char_u *p) { if (*p == '\\') *p = '/'; -#ifdef FEAT_MBYTE - if (has_mbyte) - p += (*mb_ptr2len_check)(p); - else -#endif - ++p; + mb_ptr_adv(p); } else #endif @@ -1713,12 +1708,7 @@ slash_adjust(char_u *p) { if (*p == psepcN) *p = psepc; -#ifdef FEAT_MBYTE - if (has_mbyte) - p += (*mb_ptr2len_check)(p); - else -#endif - ++p; + mb_ptr_adv(p); } } @@ -2034,15 +2024,11 @@ mch_breakcheck(void) int mch_has_exp_wildcard(char_u *p) { - for ( ; *p; ++p) + for ( ; *p; mb_ptr_adv(p)) { if (vim_strchr((char_u *)"?*[", *p) != NULL || (*p == '~' && p[1] != NUL)) return TRUE; -#ifdef FEAT_MBYTE - if (has_mbyte) - p += (*mb_ptr2len_check)(p) - 1; -#endif } return FALSE; } @@ -2054,7 +2040,7 @@ mch_has_exp_wildcard(char_u *p) int mch_has_wildcard(char_u *p) { - for ( ; *p; ++p) + for ( ; *p; mb_ptr_adv(p)) { if (vim_strchr((char_u *) # ifdef VIM_BACKTICK @@ -2065,10 +2051,6 @@ mch_has_wildcard(char_u *p) , *p) != NULL || (*p == '~' && p[1] != NUL)) return TRUE; -#ifdef FEAT_MBYTE - if (has_mbyte) - p += (*mb_ptr2len_check)(p) - 1; -#endif } return FALSE; } @@ -2138,7 +2120,7 @@ mch_rename(const char *OldFile, const char *NewFile) * filena~1.txt. If we rename filena~1.txt to filena~1.txt~ * (i.e., we're making a backup while writing it), the SFN * for filena~1.txt~ will be filena~1.txt, by default, which - * will cause all sorts of problems later in buf_write. So, we + * will cause all sorts of problems later in buf_write(). So, we * create an empty file called filena~1.txt and the system will have * to find some other SFN for filena~1.txt~, such as filena~2.txt */ diff --git a/src/os_mswin.c b/src/os_mswin.c index 409803fe0..cea1054f5 100644 --- a/src/os_mswin.c +++ b/src/os_mswin.c @@ -364,9 +364,9 @@ mch_can_restore_icon() /* - * Get absolute file name into buffer 'buf' of length 'len' bytes, - * turning all '/'s into '\\'s and getting the correct case of each - * component of the file name. Append a backslash to a directory name. + * Get absolute file name into buffer "buf" of length "len" bytes, + * turning all '/'s into '\\'s and getting the correct case of each component + * of the file name. Append a (back)slash to a directory name. * When 'shellslash' set do it the other way around. * Return OK or FAIL. */ @@ -384,19 +384,55 @@ mch_FullName( nResult = mch_dirname(buf, len); else #endif - if (_fullpath(buf, fname, len - 1) == NULL) { - STRNCPY(buf, fname, len); /* failed, use the relative path name */ - buf[len - 1] = NUL; -#ifndef USE_FNAME_CASE - slash_adjust(buf); + if (enc_codepage >= 0 && (int)GetACP() != enc_codepage +# ifdef __BORLANDC__ + /* Wide functions of Borland C 5.5 do not work on Windows 98. */ + && g_PlatformId == VER_PLATFORM_WIN32_NT +# endif + ) + { + WCHAR *wname; + WCHAR wbuf[MAX_PATH]; + char_u *cname = NULL; + + /* Use the wide function: + * - convert the fname from 'encoding' to UCS2. + * - invoke _wfullpath() + * - convert the result from UCS2 to 'encoding'. + */ + wname = enc_to_ucs2(fname, NULL); + if (wname != NULL && _wfullpath(wbuf, wname, MAX_PATH - 1) != NULL) + { + cname = ucs2_to_enc((short_u *)wbuf, NULL); + if (cname != NULL) + { + STRNCPY(buf, cname, len); + buf[len - 1] = NUL; + nResult = OK; + } + } + vim_free(wname); + vim_free(cname); + } +#ifdef FEAT_MBYTE + if (nResult == FAIL) /* fall back to non-wide function */ #endif + { + if (_fullpath(buf, fname, len - 1) == NULL) + { + STRNCPY(buf, fname, len); /* failed, use relative path name */ + buf[len - 1] = NUL; + } + else + nResult = OK; + } } - else - nResult = OK; #ifdef USE_FNAME_CASE fname_case(buf, len); +#else + slash_adjust(buf); #endif return nResult; @@ -420,7 +456,7 @@ mch_isFullName(char_u *fname) if (mch_FullName(fname, szName, _MAX_PATH, FALSE) == FAIL) return FALSE; - return pathcmp(fname, szName) == 0; + return pathcmp(fname, szName, -1) == 0; } /* @@ -441,12 +477,7 @@ slash_adjust(p) { if (*p == psepcN) *p = psepc; -#ifdef FEAT_MBYTE - if (has_mbyte) - p += (*mb_ptr2len_check)(p); - else -#endif - ++p; + mb_ptr_adv(p); } } @@ -464,11 +495,7 @@ vim_stat(const char *name, struct stat *stp) buf[_MAX_PATH] = NUL; p = buf + strlen(buf); if (p > buf) - --p; -#ifdef FEAT_MBYTE - if (p > buf && has_mbyte) - p -= (*mb_head_off)(buf, p); -#endif + mb_ptr_back(buf, p); if (p > buf && (*p == '\\' || *p == '/') && p[-1] != ':') *p = NUL; #ifdef FEAT_MBYTE @@ -588,15 +615,11 @@ display_errors() int mch_has_exp_wildcard(char_u *p) { - for ( ; *p; ++p) + for ( ; *p; mb_ptr_adv(p)) { if (vim_strchr((char_u *)"?*[", *p) != NULL || (*p == '~' && p[1] != NUL)) return TRUE; -#ifdef FEAT_MBYTE - if (has_mbyte) - p += (*mb_ptr2len_check)(p) - 1; -#endif } return FALSE; } @@ -608,7 +631,7 @@ mch_has_exp_wildcard(char_u *p) int mch_has_wildcard(char_u *p) { - for ( ; *p; ++p) + for ( ; *p; mb_ptr_adv(p)) { if (vim_strchr((char_u *) # ifdef VIM_BACKTICK @@ -619,10 +642,6 @@ mch_has_wildcard(char_u *p) , *p) != NULL || (*p == '~' && p[1] != NUL)) return TRUE; -#ifdef FEAT_MBYTE - if (has_mbyte) - p += (*mb_ptr2len_check)(p) - 1; -#endif } return FALSE; } @@ -2420,6 +2439,7 @@ HWND message_window = 0; /* window that's handling messsages */ #define COPYDATA_EXPR 10 #define COPYDATA_RESULT 11 #define COPYDATA_ERROR_RESULT 12 +#define COPYDATA_ENCODING 20 /* This is a structure containing a server HWND and its name. */ struct server_id @@ -2428,6 +2448,25 @@ struct server_id char_u *name; }; +/* Last received 'encoding' that the client uses. */ +static char_u *client_enc = NULL; + +/* + * Tell the other side what encoding we are using. + * Errors are ignored. + */ + static void +serverSendEnc(HWND target) +{ + COPYDATASTRUCT data; + + data.dwData = COPYDATA_ENCODING; + data.cbData = STRLEN(p_enc) + 1; + data.lpData = p_enc; + (void)SendMessage(target, WM_COPYDATA, (WPARAM)message_window, + (LPARAM)(&data)); +} + /* * Clean up on exit. This destroys the hidden message window. */ @@ -2463,6 +2502,9 @@ Messaging_WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { /* This is a message from another Vim. The dwData member of the * COPYDATASTRUCT determines the type of message: + * COPYDATA_ENCODING: + * The encoding that the client uses. Following messages will + * use this encoding, convert if needed. * COPYDATA_KEYS: * A key sequence. We are a server, and a client wants these keys * adding to the input queue. @@ -2485,16 +2527,26 @@ Messaging_WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) char_u *res; char_u winstr[30]; int retval; + char_u *str; + char_u *tofree; switch (data->dwData) { + case COPYDATA_ENCODING: + /* Remember the encoding that the client uses. */ + vim_free(client_enc); + client_enc = enc_canonize((char_u *)data->lpData); + return 1; + case COPYDATA_KEYS: /* Remember who sent this, for <client> */ clientWindow = sender; /* Add the received keys to the input buffer. The loop waiting * for the user to do something should check the input buffer. */ - server_to_input_buf((char_u *)(data->lpData)); + str = serverConvert(client_enc, (char_u *)data->lpData, &tofree); + server_to_input_buf(str); + vim_free(tofree); # ifdef FEAT_GUI /* Wake up the main GUI loop. */ @@ -2507,7 +2559,10 @@ Messaging_WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) /* Remember who sent this, for <client> */ clientWindow = sender; - res = eval_client_expr_to_string(data->lpData); + str = serverConvert(client_enc, (char_u *)data->lpData, &tofree); + res = eval_client_expr_to_string(str); + vim_free(tofree); + if (res == NULL) { res = vim_strsave(_(e_invexprmsg)); @@ -2518,6 +2573,7 @@ Messaging_WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) reply.lpData = res; reply.cbData = STRLEN(res) + 1; + serverSendEnc(sender); retval = SendMessage(sender, WM_COPYDATA, (WPARAM)message_window, (LPARAM)(&reply)); vim_free(res); @@ -2528,15 +2584,20 @@ Messaging_WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) case COPYDATA_ERROR_RESULT: if (data->lpData != NULL) { - save_reply(sender, data->lpData, + str = serverConvert(client_enc, (char_u *)data->lpData, + &tofree); + if (tofree == NULL) + str = vim_strsave(str); + if (save_reply(sender, str, (data->dwData == COPYDATA_REPLY ? 0 : (data->dwData == COPYDATA_RESULT ? 1 : - 2))); + 2))) == FAIL) + vim_free(str); #ifdef FEAT_AUTOCMD - if (data->dwData == COPYDATA_REPLY) + else if (data->dwData == COPYDATA_REPLY) { sprintf((char *)winstr, "0x%x", (unsigned)sender); - apply_autocmds(EVENT_REMOTEREPLY, winstr, data->lpData, + apply_autocmds(EVENT_REMOTEREPLY, winstr, str, TRUE, curbuf); } #endif @@ -2762,6 +2823,7 @@ serverSendReply(name, reply) data.cbData = STRLEN(reply) + 1; data.lpData = reply; + serverSendEnc(target); if (SendMessage(target, WM_COPYDATA, (WPARAM)message_window, (LPARAM)(&data))) return 0; @@ -2797,6 +2859,7 @@ serverSendToVim(name, cmd, result, ptarget, asExpr, silent) data.cbData = STRLEN(cmd) + 1; data.lpData = cmd; + serverSendEnc(target); if (SendMessage(target, WM_COPYDATA, (WPARAM)message_window, (LPARAM)(&data)) == 0) return -1; @@ -2850,6 +2913,9 @@ static garray_T reply_list = {0, 0, sizeof(reply_T), 5, 0}; /* Flag which is used to wait for a reply */ static int reply_received = 0; +/* + * Store a reply. "reply" must be allocated memory (or NULL). + */ static int save_reply(HWND server, char_u *reply, int expr) { @@ -2860,7 +2926,7 @@ save_reply(HWND server, char_u *reply, int expr) rep = REPLY_ITEM(REPLY_COUNT); rep->server = server; - rep->reply = vim_strsave(reply); + rep->reply = reply; rep->expr_result = expr; if (rep->reply == NULL) return FAIL; diff --git a/src/os_unix.c b/src/os_unix.c index e808d6e7b..0dbc1cb15 100644 --- a/src/os_unix.c +++ b/src/os_unix.c @@ -2189,12 +2189,7 @@ slash_adjust(p) { if (*p == psepcN) *p = psepc; -#ifdef FEAT_MBYTE - if (has_mbyte) - p += (*mb_ptr2len_check)(p); - else -#endif - ++p; + mb_ptr_adv(p); } } #endif @@ -4513,7 +4508,7 @@ RealWaitForChar(fd, msec, check_for_gpm) pstrcmp(a, b) const void *a, *b; { - return (pathcmp(*(char **)a, *(char **)b)); + return (pathcmp(*(char **)a, *(char **)b, -1)); } /* @@ -4794,10 +4789,10 @@ mch_expand_wildcards(num_pat, pat, num_file, file, flags) if (((*file)[*num_file] = alloc(len + 2)) != NULL) { STRCPY((*file)[*num_file], p); - if (!vim_ispathsep((*file)[*num_file][len - 1])) + if (!after_pathsep((*file)[*num_file] + len)) { (*file)[*num_file][len] = psepc; - (*file)[*num_file][len + 1] = 0; + (*file)[*num_file][len + 1] = NUL; } } } @@ -5259,7 +5254,7 @@ save_patterns(num_pat, pat, num_file, file) mch_has_exp_wildcard(p) char_u *p; { - for ( ; *p; ++p) + for ( ; *p; mb_ptr_adv(p)) { #ifndef OS2 if (*p == '\\' && p[1] != NUL) @@ -5278,10 +5273,6 @@ mch_has_exp_wildcard(p) #endif , *p) != NULL) return TRUE; -#ifdef FEAT_MBYTE - if (has_mbyte) - p += (*mb_ptr2len_check)(p) - 1; -#endif } return FALSE; } @@ -5294,7 +5285,7 @@ mch_has_exp_wildcard(p) mch_has_wildcard(p) char_u *p; { - for ( ; *p; ++p) + for ( ; *p; mb_ptr_adv(p)) { #ifndef OS2 if (*p == '\\' && p[1] != NUL) @@ -5318,10 +5309,6 @@ mch_has_wildcard(p) , *p) != NULL || (*p == '~' && p[1] != NUL)) return TRUE; -#ifdef FEAT_MBYTE - if (has_mbyte) - p += (*mb_ptr2len_check)(p) - 1; -#endif } return FALSE; } diff --git a/src/os_win32.c b/src/os_win32.c index 23a31f36e..40544b20c 100644 --- a/src/os_win32.c +++ b/src/os_win32.c @@ -4345,9 +4345,9 @@ mch_rename( * filename.asc.txt by its SFN, filena~1.txt. If we rename filena~1.txt * to filena~1.txt~ (i.e., we're making a backup while writing it), the * SFN for filena~1.txt~ will be filena~1.txt, by default, which will - * cause all sorts of problems later in buf_write. So, we create an empty - * file called filena~1.txt and the system will have to find some other - * SFN for filena~1.txt~, such as filena~2.txt + * cause all sorts of problems later in buf_write(). So, we create an + * empty file called filena~1.txt and the system will have to find some + * other SFN for filena~1.txt~, such as filena~2.txt */ if ((hf = CreateFile(pszOldFile, GENERIC_WRITE, 0, NULL, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, NULL)) == INVALID_HANDLE_VALUE) @@ -4538,15 +4538,12 @@ getout: int mch_open(char *name, int flags, int mode) { + /* _wopen() does not work with Borland C 5.5: creates a read-only file. */ +# ifndef __BORLANDC__ WCHAR *wn; int f; - if (enc_codepage >= 0 && (int)GetACP() != enc_codepage -# ifdef __BORLANDC__ - /* Wide functions of Borland C 5.5 do not work on Windows 98. */ - && g_PlatformId == VER_PLATFORM_WIN32_NT -# endif - ) + if (enc_codepage >= 0 && (int)GetACP() != enc_codepage) { wn = enc_to_ucs2(name, NULL); if (wn != NULL) @@ -4560,6 +4557,7 @@ mch_open(char *name, int flags, int mode) * the _wopen() fails for missing wide functions. */ } } +# endif return open(name, flags, mode); } diff --git a/src/proto/ex_cmds2.pro b/src/proto/ex_cmds2.pro index adf2d8f36..c66c702b2 100644 --- a/src/proto/ex_cmds2.pro +++ b/src/proto/ex_cmds2.pro @@ -18,7 +18,6 @@ int can_abandon __ARGS((buf_T *buf, int forceit)); int check_changed_any __ARGS((int hidden)); int check_fname __ARGS((void)); int buf_write_all __ARGS((buf_T *buf, int forceit)); -char_u *do_one_arg __ARGS((char_u *str)); void set_arglist __ARGS((char_u *str)); void check_arg_idx __ARGS((win_T *win)); void ex_args __ARGS((exarg_T *eap)); diff --git a/src/proto/main.pro b/src/proto/main.pro index 7e965fb94..bd75174ef 100644 --- a/src/proto/main.pro +++ b/src/proto/main.pro @@ -9,6 +9,7 @@ void time_pop __ARGS((void *tp)); void time_msg __ARGS((char *msg, void *tv_start)); void server_to_input_buf __ARGS((char_u *str)); char_u *eval_client_expr_to_string __ARGS((char_u *expr)); +char_u *serverConvert __ARGS((char_u *client_enc, char_u *data, char_u **tofree)); int toF_TyA __ARGS((int c)); int fkmap __ARGS((int c)); void conv_to_pvim __ARGS((void)); diff --git a/src/proto/memline.pro b/src/proto/memline.pro index 36d1086c9..4e0382a00 100644 --- a/src/proto/memline.pro +++ b/src/proto/memline.pro @@ -25,7 +25,7 @@ void ml_setmarked __ARGS((linenr_T lnum)); linenr_T ml_firstmarked __ARGS((void)); void ml_clearmarked __ARGS((void)); char_u *get_file_in_dir __ARGS((char_u *fname, char_u *dname)); -void ml_setdirty __ARGS((buf_T *buf, int flag)); +void ml_setflags __ARGS((buf_T *buf)); long ml_find_line_or_offset __ARGS((buf_T *buf, linenr_T line, long *offp)); void goto_byte __ARGS((long cnt)); /* vim: set ft=c : */ diff --git a/src/proto/misc1.pro b/src/proto/misc1.pro index feb968ae4..61b975ff8 100644 --- a/src/proto/misc1.pro +++ b/src/proto/misc1.pro @@ -55,6 +55,7 @@ void home_replace __ARGS((buf_T *buf, char_u *src, char_u *dst, int dstlen, int char_u *home_replace_save __ARGS((buf_T *buf, char_u *src)); int fullpathcmp __ARGS((char_u *s1, char_u *s2, int checkname)); char_u *gettail __ARGS((char_u *fname)); +char_u *gettail_sep __ARGS((char_u *fname)); char_u *getnextcomp __ARGS((char_u *fname)); char_u *get_past_head __ARGS((char_u *path)); int vim_ispathsep __ARGS((int c)); diff --git a/src/proto/misc2.pro b/src/proto/misc2.pro index 6419740b4..eb042f047 100644 --- a/src/proto/misc2.pro +++ b/src/proto/misc2.pro @@ -66,6 +66,8 @@ void set_fileformat __ARGS((int t, int opt_flags)); int default_fileformat __ARGS((void)); int call_shell __ARGS((char_u *cmd, int opt)); int get_real_state __ARGS((void)); +int after_pathsep __ARGS((char_u *b, char_u *p)); +int same_directory __ARGS((char_u *f1, char_u *f2)); int vim_chdirfile __ARGS((char_u *fname)); int illegal_slash __ARGS((char *name)); char_u *parse_shape_opt __ARGS((int what)); @@ -86,7 +88,7 @@ char_u *find_file_in_path_option __ARGS((char_u *ptr, int len, int options, int int vim_chdir __ARGS((char_u *new_dir)); int get_user_name __ARGS((char_u *buf, int len)); void sort_strings __ARGS((char_u **files, int count)); -int pathcmp __ARGS((const char *p, const char *q)); +int pathcmp __ARGS((const char *p, const char *q, int maxlen)); char_u *parse_list_options __ARGS((char_u *option_str, option_table_T *table, int table_size)); void msg_str __ARGS((char_u *s, char_u *arg)); /* vim: set ft=c : */ diff --git a/src/proto/option.pro b/src/proto/option.pro index c0a567ba6..c0c5504eb 100644 --- a/src/proto/option.pro +++ b/src/proto/option.pro @@ -22,6 +22,7 @@ int get_option_value __ARGS((char_u *name, long *numval, char_u **stringval, int void set_option_value __ARGS((char_u *name, long number, char_u *string, int opt_flags)); char_u *get_term_code __ARGS((char_u *tname)); char_u *get_highlight_default __ARGS((void)); +char_u *get_encoding_default __ARGS((void)); int makeset __ARGS((FILE *fd, int opt_flags, int local_only)); int makefoldset __ARGS((FILE *fd)); void clear_termoptions __ARGS((void)); diff --git a/src/proto/os_mswin.pro b/src/proto/os_mswin.pro index c9e495d61..de96a0477 100644 --- a/src/proto/os_mswin.pro +++ b/src/proto/os_mswin.pro @@ -58,5 +58,5 @@ void serverForeground __ARGS((char_u *name)); char_u *serverGetReply __ARGS((HWND server, int *expr_res, int remove, int wait)); void serverProcessPendingMessages __ARGS((void)); char *charset_id2name __ARGS((int id)); -int get_logfont __ARGS((LOGFONT *lf, char_u *name, HDC printer_dc)); +int get_logfont __ARGS((LOGFONT *lf, char_u *name, HDC printer_dc, int verbose)); /* vim: set ft=c : */ diff --git a/src/regexp.c b/src/regexp.c index 23e31af22..2e828541a 100644 --- a/src/regexp.c +++ b/src/regexp.c @@ -497,14 +497,7 @@ skip_anyof(p) { ++p; if (*p != ']' && *p != NUL) - { -#ifdef FEAT_MBYTE - if (has_mbyte) - p += (*mb_ptr2len_check)(p); - else -#endif - ++p; - } + mb_ptr_adv(p); } else if (*p == '\\' && (vim_strchr(REGEXP_INRANGE, p[1]) != NULL @@ -755,7 +748,7 @@ skip_regexp(startp, dirc, magic, newp) else mymagic = MAGIC_OFF; - for (; p[0] != NUL; ++p) + for (; p[0] != NUL; mb_ptr_adv(p)) { if (p[0] == dirc) /* found end of regexp */ break; @@ -789,10 +782,6 @@ skip_regexp(startp, dirc, magic, newp) else if (*p == 'V') mymagic = MAGIC_NONE; } -#ifdef FEAT_MBYTE - else if (has_mbyte) - p += (*mb_ptr2len_check)(p) - 1; -#endif } return p; } @@ -2935,7 +2924,8 @@ vim_regexec(rmp, line, col) return (vim_regexec_both(line, col) != 0); } -#if defined(FEAT_MODIFY_FNAME) || defined(FEAT_EVAL) || defined(PROTO) +#if defined(FEAT_MODIFY_FNAME) || defined(FEAT_EVAL) \ + || defined(FIND_REPLACE_DIALOG) || defined(PROTO) /* * Like vim_regexec(), but consider a "\n" in "line" to be a line break. */ @@ -3105,12 +3095,7 @@ vim_regexec_both(line, col) { if (cstrncmp(s, prog->regmust, &prog->regmlen) == 0) break; /* Found it. */ -#ifdef FEAT_MBYTE - if (has_mbyte) - s += (*mb_ptr2len_check)(s); - else -#endif - ++s; + mb_ptr_adv(s); } if (s == NULL) /* Not present. */ goto theend; @@ -3338,21 +3323,8 @@ regtry(prog, col) } #ifdef FEAT_MBYTE -/* multi-byte: advance reginput with a function */ -# define ADVANCE_REGINPUT() advance_reginput() - -static void advance_reginput __ARGS((void)); static int reg_prev_class __ARGS((void)); - static void -advance_reginput() -{ - if (has_mbyte) - reginput += (*mb_ptr2len_check)(reginput); - else - ++reginput; -} - /* * Get class of previous character. */ @@ -3365,10 +3337,8 @@ reg_prev_class() return -1; } -#else -/* No multi-byte: It's too simple to make a function for. */ -# define ADVANCE_REGINPUT() ++reginput #endif +#define ADVANCE_REGINPUT() mb_ptr_adv(reginput) /* * The arguments from BRACE_LIMITS are stored here. They are actually local @@ -4270,13 +4240,7 @@ regmatch(scan) return FALSE; } else - { - --reginput; -#ifdef FEAT_MBYTE - if (has_mbyte) - reginput -= (*mb_head_off)(regline, reginput); -#endif - } + mb_ptr_back(regline, reginput); } } else @@ -4466,12 +4430,6 @@ regmatch(scan) return FALSE; } -#ifdef FEAT_MBYTE -# define ADVANCE_P(x) if (has_mbyte) x += (*mb_ptr2len_check)(x); else ++x -#else -# define ADVANCE_P(x) ++x -#endif - /* * regrepeat - repeatedly match something simple, return how many. * Advances reginput (and reglnum) to just after the matched chars. @@ -4500,7 +4458,7 @@ regrepeat(p, maxcount) while (*scan != NUL && count < maxcount) { ++count; - ADVANCE_P(scan); + mb_ptr_adv(scan); } if (!WITH_NL(OP(p)) || reglnum == reg_maxline || count == maxcount) break; @@ -4522,7 +4480,7 @@ regrepeat(p, maxcount) { if (vim_isIDc(*scan) && (testval || !VIM_ISDIGIT(*scan))) { - ADVANCE_P(scan); + mb_ptr_adv(scan); } else if (*scan == NUL) { @@ -4551,7 +4509,7 @@ regrepeat(p, maxcount) { if (vim_iswordp(scan) && (testval || !VIM_ISDIGIT(*scan))) { - ADVANCE_P(scan); + mb_ptr_adv(scan); } else if (*scan == NUL) { @@ -4580,7 +4538,7 @@ regrepeat(p, maxcount) { if (vim_isfilec(*scan) && (testval || !VIM_ISDIGIT(*scan))) { - ADVANCE_P(scan); + mb_ptr_adv(scan); } else if (*scan == NUL) { @@ -4618,7 +4576,7 @@ regrepeat(p, maxcount) } else if (ptr2cells(scan) == 1 && (testval || !VIM_ISDIGIT(*scan))) { - ADVANCE_P(scan); + mb_ptr_adv(scan); } else if (reg_line_lbr && *scan == '\n' && WITH_NL(OP(p))) ++scan; @@ -5975,7 +5933,7 @@ vim_regsub_both(source, dest, copy, magic, backslash) eval_result = eval_to_string(source + 2, NULL); if (eval_result != NULL) { - for (s = eval_result; *s != NUL; ++s) + for (s = eval_result; *s != NUL; mb_ptr_adv(s)) { /* Change NL to CR, so that it becomes a line break. * Skip over a backslashed character. */ @@ -5983,10 +5941,6 @@ vim_regsub_both(source, dest, copy, magic, backslash) *s = CAR; else if (*s == '\\' && s[1] != NUL) ++s; -#ifdef FEAT_MBYTE - if (has_mbyte) - s += (*mb_ptr2len_check)(s) - 1; -#endif } dst += STRLEN(eval_result); diff --git a/src/screen.c b/src/screen.c index 88b17d4be..abd9be7e6 100644 --- a/src/screen.c +++ b/src/screen.c @@ -2779,11 +2779,8 @@ win_line(wp, lnum, startrow, endrow) vcol += c; #ifdef FEAT_MBYTE prev_ptr = ptr; - if (has_mbyte) - ptr += (*mb_ptr2len_check)(ptr); - else #endif - ++ptr; + mb_ptr_adv(ptr); } #ifdef FEAT_VIRTUALEDIT @@ -3640,7 +3637,9 @@ win_line(wp, lnum, startrow, endrow) && ((wp->w_p_list && lcs_eol > 0) || ((fromcol >= 0 || fromcol_prev >= 0) && tocol > vcol +#ifdef FEAT_VISUAL && VIsual_mode != Ctrl_V +#endif && ( # ifdef FEAT_RIGHTLEFT wp->w_p_rl ? (col >= 0) : @@ -4772,16 +4771,8 @@ status_match_len(xp, s) #endif ) ++s; -#ifdef FEAT_MBYTE - if (has_mbyte) - { - len += ptr2cells(s); - s += (*mb_ptr2len_check)(s); - } - else -#endif - len += ptr2cells(s++); - + len += ptr2cells(s++); + mb_ptr_adv(s); } return len; @@ -4827,7 +4818,12 @@ win_redr_status_matches(xp, num_matches, matches, match, showtail) if (matches == NULL) /* interrupted completion? */ return; - buf = alloc((unsigned)Columns + 1); +#ifdef FEAT_MBYTE + if (has_mbyte) + buf = alloc((unsigned)Columns * MB_MAXBYTES + 1); + else +#endif + buf = alloc((unsigned)Columns + 1); if (buf == NULL) return; @@ -3258,7 +3258,7 @@ simplify_filename(filename) tail = p + 1; if (p[1] != NUL) while (vim_ispathsep(*tail)) - ++tail; + mb_ptr_adv(tail); else if (p > start) --p; /* strip preceding path separator */ movetail(p, tail); @@ -3270,7 +3270,7 @@ simplify_filename(filename) /* Skip to after ".." or "../" or "..///". */ tail = p + 2; while (vim_ispathsep(*tail)) - ++tail; + mb_ptr_adv(tail); if (components > 0) /* strip one preceding component */ { @@ -3296,8 +3296,8 @@ simplify_filename(filename) --p; /* Skip back to after previous '/'. */ - while (p > start && !vim_ispathsep(p[-1])) - --p; + while (p > start && !after_pathsep(start, p)) + mb_ptr_back(start, p); if (!do_strip) { diff --git a/src/term.c b/src/term.c index a83f50679..8144fad53 100644 --- a/src/term.c +++ b/src/term.c @@ -3400,6 +3400,7 @@ cursor_off() } } +#if defined(CURSOR_SHAPE) || defined(PROTO) /* * Set cursor shape to match Insert mode. */ @@ -3424,6 +3425,7 @@ term_cursor_shape() showing_insert_mode = FALSE; } } +#endif /* * Set scrolling region for window 'wp'. @@ -2952,12 +2952,7 @@ vcol2col(wp, lnum, vcol) { ++col; count += win_lbr_chartabsize(wp, ptr, count, NULL); -# ifdef FEAT_MBYTE - if (has_mbyte) - ptr += (*mb_ptr2len_check)(ptr); - else -# endif - ++ptr; + mb_ptr_adv(ptr); } return col; } diff --git a/src/version.h b/src/version.h index e8f1078c1..7596af66d 100644 --- a/src/version.h +++ b/src/version.h @@ -36,5 +36,5 @@ #define VIM_VERSION_NODOT "vim70aa" #define VIM_VERSION_SHORT "7.0aa" #define VIM_VERSION_MEDIUM "7.0aa ALPHA" -#define VIM_VERSION_LONG "VIM - Vi IMproved 7.0aa ALPHA (2004 Dec 9)" -#define VIM_VERSION_LONG_DATE "VIM - Vi IMproved 7.0aa ALPHA (2004 Dec 9, compiled " +#define VIM_VERSION_LONG "VIM - Vi IMproved 7.0aa ALPHA (2004 Dec 17)" +#define VIM_VERSION_LONG_DATE "VIM - Vi IMproved 7.0aa ALPHA (2004 Dec 17, compiled " @@ -320,12 +320,12 @@ # endif #endif #ifdef BACKSLASH_IN_FILENAME -# define PATH_ESC_CHARS ((char_u *)" *?[{`%#") +# define PATH_ESC_CHARS ((char_u *)" \t*?[{`%#") #else # ifdef COLON_AS_PATHSEP -# define PATH_ESC_CHARS ((char_u *)" *?[{`$%#/") +# define PATH_ESC_CHARS ((char_u *)" \t*?[{`$%#/") # else -# define PATH_ESC_CHARS ((char_u *)" *?[{`$\\%#'\"|") +# define PATH_ESC_CHARS ((char_u *)" \t*?[{`$\\%#'\"|") # endif #endif diff --git a/src/vim.rc b/src/vim.rc index 27d35a96b..4ceb63824 100644 --- a/src/vim.rc +++ b/src/vim.rc @@ -9,25 +9,13 @@ // Icon and version information for the Win32 version of Vim // Must be in DOS format <CR><NL>! -#ifdef __MINGW32__ -# include <windows.h> -# ifndef VS_FFI_FILEFLAGSMASK -# define VS_FFI_FILEFLAGSMASK 0x0000003FL -# endif -# ifndef VOS__WINDOWS32 -# define VOS__WINDOWS32 0x00000004L -# endif -#else -# include <winver.h> -#endif +#include <winver.h> #include "version.h" #include "gui_w32_rc.h" -#if defined(__BORLANDC__) || defined(__CYGWIN32__) +#if defined(__BORLANDC__) || defined(__CYGWIN32__) || defined(__MINGW32__) # include <winresrc.h> #else -# ifndef __MINGW32__ -# include <winres.h> -# endif +# include <winres.h> #endif // |