diff --git a/Filelist b/Filelist index 15d000e4b8..bf752c5e57 100644 --- a/Filelist +++ b/Filelist @@ -114,6 +114,7 @@ SRC_ALL = \ src/netbeans.c \ src/normal.c \ src/nv_cmdidxs.h \ + src/nv_cmds.h \ src/ops.c \ src/option.c \ src/option.h \ @@ -444,6 +445,7 @@ SRC_UNIX = \ src/configure \ src/configure.ac \ src/create_cmdidxs.vim \ + src/create_nvcmdidxs.c \ src/create_nvcmdidxs.vim \ src/gui_at_fs.c \ src/gui_at_sb.c \ @@ -661,10 +663,7 @@ SRC_HAIKU = \ # source files for the Mac (also in the extra archive) SRC_MAC = \ src/INSTALLmac.txt \ - src/dehqx.py \ - src/os_mac_rsrc/*.icns \ src/os_mac.h \ - src/os_mac.rsr.hqx \ src/os_mac_conv.c \ src/os_macosx.m \ src/proto/os_mac_conv.pro \ @@ -702,7 +701,6 @@ SRC_EXTRA = \ $(SRC_QNX) \ $(SRC_VMS) \ README_os390.txt \ - src/infplist.xml \ src/link.390 \ src/os_vms_fix.com \ src/toolbar.phi \ diff --git a/runtime/autoload/ccomplete.vim b/runtime/autoload/ccomplete.vim index d8675faf6b..3bddba7a95 100644 --- a/runtime/autoload/ccomplete.vim +++ b/runtime/autoload/ccomplete.vim @@ -4,13 +4,13 @@ vim9script noclear # Language: C # Maintainer: Bram Moolenaar # Rewritten in Vim9 script by github user lacygoill -# Last Change: 2021 Dec 27 +# Last Change: 2022 Jan 31 var prepended: string var grepCache: dict>> # This function is used for the 'omnifunc' option. -def ccomplete#Complete(findstart: bool, abase: string): any # {{{1 +export def Complete(findstart: bool, abase: string): any # {{{1 if findstart # Locate the start of the item, including ".", "->" and "[...]". var line: string = getline('.') @@ -202,7 +202,7 @@ def ccomplete#Complete(findstart: bool, abase: string): any # {{{1 || !v['static'] || bufnr('%') == bufnr(v['filename'])) - res = extendnew(res, tags->map((_, v: dict) => Tag2item(v))) + res = res->extend(tags->map((_, v: dict) => Tag2item(v))) endif if len(res) == 0 @@ -216,9 +216,9 @@ def ccomplete#Complete(findstart: bool, abase: string): any # {{{1 for i: number in len(diclist)->range() # New ctags has the "typeref" field. Patched version has "typename". if diclist[i]->has_key('typename') - res = extendnew(res, diclist[i]['typename']->StructMembers(items[1 :], true)) + res = res->extend(diclist[i]['typename']->StructMembers(items[1 :], true)) elseif diclist[i]->has_key('typeref') - res = extendnew(res, diclist[i]['typeref']->StructMembers(items[1 :], true)) + res = res->extend(diclist[i]['typeref']->StructMembers(items[1 :], true)) endif # For a variable use the command, which must be a search pattern that @@ -227,7 +227,7 @@ def ccomplete#Complete(findstart: bool, abase: string): any # {{{1 var line: string = diclist[i]['cmd'] if line[: 1] == '/^' var col: number = line->charidx(match(line, '\<' .. items[0] .. '\>')) - res = extendnew(res, line[2 : col - 1]->Nextitem(items[1 :], 0, true)) + res = res->extend(line[2 : col - 1]->Nextitem(items[1 :], 0, true)) endif endif endfor @@ -256,11 +256,10 @@ def ccomplete#Complete(findstart: bool, abase: string): any # {{{1 enddef def GetAddition( # {{{1 - line: string, - match: string, - memarg: list>, - bracket: bool -): string + line: string, + match: string, + memarg: list>, + bracket: bool): string # Guess if the item is an array. if bracket && match(line, match .. '\s*\[') > 0 return '[' @@ -403,10 +402,9 @@ def Tagline2item(val: dict, brackets: string): dict # {{{1 enddef def Tagcmd2extra( # {{{1 - cmd: string, - name: string, - fname: string -): string + cmd: string, + name: string, + fname: string): string # Turn a command from a tag line to something that is useful in the menu var x: string if cmd =~ '^/^' @@ -427,11 +425,10 @@ def Tagcmd2extra( # {{{1 enddef def Nextitem( # {{{1 - lead: string, - items: list, - depth: number, - all: bool -): list> + lead: string, + items: list, + depth: number, + all: bool): list> # Find composing type in "lead" and match items[0] with it. # Repeat this recursively for items[1], if it's there. # When resolving typedefs "depth" is used to avoid infinite recursion. @@ -473,11 +470,11 @@ def Nextitem( # {{{1 # New ctags has the "typeref" field. Patched version has "typename". if item->has_key('typeref') - res = extendnew(res, item['typeref']->StructMembers(items, all)) + res = res->extend(item['typeref']->StructMembers(items, all)) continue endif if item->has_key('typename') - res = extendnew(res, item['typename']->StructMembers(items, all)) + res = res->extend(item['typename']->StructMembers(items, all)) continue endif @@ -511,11 +508,11 @@ def Nextitem( # {{{1 endif endfor if name != '' - res = extendnew(res, StructMembers(cmdtokens[0] .. ':' .. name, items, all)) + res = res->extend(StructMembers(cmdtokens[0] .. ':' .. name, items, all)) endif elseif depth < 10 # Could be "typedef other_T some_T". - res = extendnew(res, cmdtokens[0]->Nextitem(items, depth + 1, all)) + res = res->extend(cmdtokens[0]->Nextitem(items, depth + 1, all)) endif endif endif @@ -529,10 +526,9 @@ def Nextitem( # {{{1 enddef def StructMembers( # {{{1 - atypename: string, - items: list, - all: bool -): list> + atypename: string, + items: list, + all: bool): list> # Search for members of structure "typename" in tags files. # Return a list with resulting matches. @@ -641,10 +637,9 @@ def StructMembers( # {{{1 enddef def SearchMembers( # {{{1 - matches: list>, - items: list, - all: bool -): list> + matches: list>, + items: list, + all: bool): list> # For matching members, find matches for following items. # When "all" is true find all, otherwise just return 1 if there is any member. @@ -674,7 +669,7 @@ def SearchMembers( # {{{1 endif if typename != '' - res = extendnew(res, StructMembers(typename, items, all)) + res = res->extend(StructMembers(typename, items, all)) else # Use the search command (the declaration itself). var sb: number = line->match('\t\zs/^') @@ -683,7 +678,7 @@ def SearchMembers( # {{{1 var e: number = line ->charidx(match(line, '\<' .. matches[i]['match'] .. '\>', sb)) if e > 0 - res = extendnew(res, line[s : e - 1]->Nextitem(items, 0, all)) + res = res->extend(line[s : e - 1]->Nextitem(items, 0, all)) endif endif endif diff --git a/runtime/autoload/dist/ft.vim b/runtime/autoload/dist/ft.vim index f6ef9be891..5d8734a625 100644 --- a/runtime/autoload/dist/ft.vim +++ b/runtime/autoload/dist/ft.vim @@ -1,7 +1,7 @@ " Vim functions for file type detection " " Maintainer: Bram Moolenaar -" Last Change: 2022 Jan 28 +" Last Change: 2022 Jan 31 " These functions are moved here from runtime/filetype.vim to make startup " faster. @@ -67,6 +67,9 @@ func dist#ft#FTasmsyntax() endif endfunc +let s:ft_visual_basic_content = '\cVB_Name\|Begin VB\.\(Form\|MDIForm\|UserControl\)' + +" See FTfrm() for Visual Basic form file detection func dist#ft#FTbas() if exists("g:filetype_bas") exe "setf " . g:filetype_bas @@ -86,7 +89,7 @@ func dist#ft#FTbas() setf freebasic elseif match(lines, qb64_preproc) > -1 setf qb64 - elseif match(lines, '\cVB_Name\|Begin VB\.\(Form\|MDIForm\|UserControl\)') > -1 + elseif match(lines, s:ft_visual_basic_content) > -1 setf vb else setf basic @@ -235,6 +238,21 @@ func dist#ft#FTe() endif endfunc +func dist#ft#FTfrm() + if exists("g:filetype_frm") + exe "setf " . g:filetype_frm + return + endif + + let lines = getline(1, min([line("$"), 5])) + + if match(lines, s:ft_visual_basic_content) > -1 + setf vb + else + setf form + endif +endfunc + " Distinguish between Forth and F#. " Provided by Doug Kearns. func dist#ft#FTfs() diff --git a/runtime/doc/builtin.txt b/runtime/doc/builtin.txt index 33bb907378..98c358d6a5 100644 --- a/runtime/doc/builtin.txt +++ b/runtime/doc/builtin.txt @@ -292,7 +292,6 @@ inputrestore() Number restore typeahead inputsave() Number save and clear typeahead inputsecret({prompt} [, {text}]) String like input() but hiding the text insert({object}, {item} [, {idx}]) List insert {item} in {object} [before {idx}] -internal_get_nv_cmdchar({idx}) Number command character at this index interrupt() none interrupt script execution invert({expr}) Number bitwise invert isdirectory({directory}) Number |TRUE| if {directory} is a directory @@ -655,8 +654,6 @@ test_null_string() String null value for testing test_option_not_set({name}) none reset flag indicating option was set test_override({expr}, {val}) none test with Vim internal overrides test_refcount({expr}) Number get the reference count of {expr} -test_scrollbar({which}, {value}, {dragging}) - none scroll in the GUI for testing test_setmouse({row}, {col}) none set the mouse position for testing test_settime({expr}) none set current time for testing test_srand_seed([seed]) none set seed for testing srand() @@ -4618,11 +4615,6 @@ insert({object}, {item} [, {idx}]) *insert()* Can also be used as a |method|: > mylist->insert(item) -< - *internal_get_nv_cmdchar()* -internal_get_nv_cmdchar({idx}) - Return the normal/visual mode command character at the - specified index. To be used only during the Vim build process. interrupt() *interrupt()* Interrupt script execution. It works more or less like the diff --git a/runtime/doc/indent.txt b/runtime/doc/indent.txt index d82f7423a3..6e8f35b2d2 100644 --- a/runtime/doc/indent.txt +++ b/runtime/doc/indent.txt @@ -1,4 +1,4 @@ -*indent.txt* For Vim version 8.2. Last change: 2019 Dec 07 +*indent.txt* For Vim version 8.2. Last change: 2022 Jan 31 VIM REFERENCE MANUAL by Bram Moolenaar @@ -778,6 +778,15 @@ You can set the indent for the first line after +
+text +
% END_INDENT diff --git a/runtime/indent/testdir/html.ok b/runtime/indent/testdir/html.ok index c0dfc9dc72..938e965d8c 100644 --- a/runtime/indent/testdir/html.ok +++ b/runtime/indent/testdir/html.ok @@ -1,4 +1,4 @@ -" vim: set ft=html sw=4 : +" vim: set ft=html sw=4 ts=8 : " START_INDENT @@ -41,6 +41,11 @@ div#d2 { color: green; } dt text +
+ text +
@@ -50,6 +55,7 @@ div#d2 { color: green; } % START_INDENT % INDENT_EXE let g:html_indent_style1 = "inc" % INDENT_EXE let g:html_indent_script1 = "zero" +% INDENT_EXE let g:html_indent_attribute = 1 % INDENT_EXE call HtmlIndent_CheckUserSettings() @@ -61,6 +67,11 @@ div#d2 { color: green; } var v1 = "v1"; var v2 = "v2"; +
+ text +
% END_INDENT diff --git a/runtime/syntax/vim.vim b/runtime/syntax/vim.vim index abdce6aeab..022439cf39 100644 --- a/runtime/syntax/vim.vim +++ b/runtime/syntax/vim.vim @@ -1,8 +1,8 @@ " Vim syntax file " Language: Vim 8.2 script " Maintainer: Charles E. Campbell -" Last Change: January 11, 2022 -" Version: 8.2-24 +" Last Change: January 30, 2022 +" Version: 8.2-26 " URL: http://www.drchip.org/astronaut/vim/index.html#SYNTAX_VIM " Automatically generated keyword lists: {{{1 @@ -78,11 +78,11 @@ syn match vimHLGroup contained "Conceal" syn case match " Function Names {{{2 -syn keyword vimFuncName contained abs argc assert_equal assert_match atan browse bufloaded byteidx charclass chdir ch_log ch_sendexpr col copy debugbreak diff_hlID empty execute expandcmd filter floor foldlevel function getchangelist getcmdline getcursorcharpos getftime getmarklist getreg gettagstack getwinvar has_key histget hlset input inputsecret isinf job_info join keys line2byte listener_flush luaeval mapset matchdelete matchstr mkdir or popup_clear popup_filter_yesno popup_hide popup_notification prevnonblank prompt_setprompt prop_list prop_type_get pyeval readdir reg_recording remote_foreground remove round screencol searchcount server2client setcharpos setfperm setqflist setwinvar sign_getdefined sign_undefine sinh sound_playevent split str2list strdisplaywidth strlen strwidth synconcealed system tagfiles term_dumpdiff term_getattr term_getsize term_list term_setkill test_alloc_fail test_getvalue test_null_channel test_null_partial test_scrollbar test_void timer_stopall trunc uniq winbufnr win_getid win_id2win winnr win_splitmove -syn keyword vimFuncName contained acos argidx assert_equalfile assert_nobeep atan2 browsedir bufname byteidxcomp charcol ch_evalexpr ch_logfile ch_sendraw complete cos deepcopy digraph_get environ exepath extend finddir fmod foldtext garbagecollect getchar getcmdpos getcwd getftype getmatches getreginfo gettext glob haslocaldir histnr hostname inputdialog insert islocked job_setoptions js_decode len lispindent listener_remove map match matchend matchstrpos mode pathshorten popup_close popup_findinfo popup_list popup_setoptions printf prop_add prop_remove prop_type_list pyxeval readdirex reltime remote_peek rename rubyeval screenpos searchdecl serverlist setcharsearch setline setreg sha256 sign_getplaced sign_unplace slice sound_playfile sqrt str2nr strftime strpart submatch synID systemlist taglist term_dumpload term_getcursor term_getstatus term_scrape term_setrestore test_autochdir test_gui_drop_files test_null_dict test_null_string test_setmouse timer_info tolower type values wincol win_gettype winlayout winrestcmd winwidth -syn keyword vimFuncName contained add arglistid assert_exception assert_notequal balloon_gettext bufadd bufnr call charidx ch_evalraw ch_open ch_setoptions complete_add cosh delete digraph_getlist escape exists extendnew findfile fnameescape foldtextresult get getcharmod getcmdtype getenv getimstatus getmousepos getregtype getwininfo glob2regpat hasmapto hlexists iconv inputlist interrupt isnan job_start js_encode libcall list2blob localtime maparg matchadd matchfuzzy max mzeval perleval popup_create popup_findpreview popup_locate popup_settext prompt_getprompt prop_add_list prop_type_add pum_getpos rand readfile reltimefloat remote_read repeat screenattr screenrow searchpair setbufline setcmdpos setloclist settabvar shellescape sign_jump sign_unplacelist sort sound_stop srand strcharlen strgetchar strptime substitute synIDattr tabpagebuflist tan term_dumpwrite term_getjob term_gettitle term_sendkeys term_setsize test_feedinput test_gui_mouse_event test_null_function test_option_not_set test_settime timer_pause toupper typename virtcol windowsversion win_gotoid winline winrestview wordcount -syn keyword vimFuncName contained and argv assert_fails assert_notmatch balloon_show bufexists bufwinid ceil ch_canread ch_getbufnr ch_read ch_status complete_check count deletebufline digraph_set eval exists_compiled feedkeys flatten fnamemodify foreground getbufinfo getcharpos getcmdwintype getfontname getjumplist getpid gettabinfo getwinpos globpath histadd hlget indent inputrestore invert items job_status json_decode libcallnr list2str log mapcheck matchaddpos matchfuzzypos menu_info nextnonblank popup_atcursor popup_dialog popup_getoptions popup_menu popup_show prompt_setcallback prop_clear prop_type_change pumvisible range reduce reltimestr remote_send resolve screenchar screenstring searchpairpos setbufvar setcursorcharpos setmatches settabwinvar shiftwidth sign_place simplify sound_clear spellbadword state strcharpart stridx strridx swapinfo synIDtrans tabpagenr tanh term_getaltscreen term_getline term_gettty term_setansicolors term_start test_garbagecollect_now test_ignore_error test_null_job test_override test_srand_seed timer_start tr undofile visualmode win_execute winheight win_move_separator winsaveview writefile -syn keyword vimFuncName contained append asin assert_false assert_report balloon_split buflisted bufwinnr changenr ch_close ch_getjob ch_readblob cindent complete_info cscope_connection did_filetype digraph_setlist eventhandler exp filereadable flattennew foldclosed fullcommand getbufline getcharsearch getcompletion getfperm getline getpos gettabvar getwinposx has histdel hlID index inputsave isdirectory job_getchannel job_stop json_encode line listener_add log10 mapnew matcharg matchlist min nr2char popup_beval popup_filter_menu popup_getpos popup_move pow prompt_setinterrupt prop_find prop_type_delete py3eval readblob reg_executing remote_expr remote_startserver reverse screenchars search searchpos setcellwidths setenv setpos settagstack sign_define sign_placelist sin soundfold spellsuggest str2float strchars string strtrans swapname synstack tabpagewinnr tempname term_getansicolors term_getscrolled terminalprops term_setapi term_wait test_garbagecollect_soon test_null_blob test_null_list test_refcount test_unknown timer_stop trim undotree wildmenumode win_findbuf win_id2tabwin win_move_statusline win_screenpos xor +syn keyword vimFuncName contained abs argc assert_equal assert_match atan browse bufloaded byteidx charclass chdir ch_log ch_sendexpr col copy debugbreak diff_hlID empty execute expandcmd filter floor foldlevel function getchangelist getcmdline getcursorcharpos getftime getmarklist getreg gettagstack getwinvar has_key histget hlset input inputsecret isdirectory job_getchannel job_stop json_encode line listener_add log10 mapnew matcharg matchlist min nr2char popup_beval popup_filter_menu popup_getpos popup_move pow prompt_setinterrupt prop_find prop_type_delete py3eval readblob reg_executing remote_expr remote_startserver reverse screenchars search searchpos setcellwidths setenv setpos settagstack sign_define sign_placelist sin soundfold spellsuggest str2float strchars string strtrans swapname synstack tabpagewinnr tempname term_getansicolors term_getscrolled terminalprops term_setapi term_wait test_garbagecollect_soon test_null_channel test_null_partial test_scrollbar test_void timer_stopall trunc uniq winbufnr win_getid win_id2win winnr win_splitmove +syn keyword vimFuncName contained acos argidx assert_equalfile assert_nobeep atan2 browsedir bufname byteidxcomp charcol ch_evalexpr ch_logfile ch_sendraw complete cos deepcopy digraph_get environ exepath extend finddir fmod foldtext garbagecollect getchar getcmdpos getcwd getftype getmatches getreginfo gettext glob haslocaldir histnr hostname inputdialog insert isinf job_info join keys line2byte listener_flush luaeval mapset matchdelete matchstr mkdir or popup_clear popup_filter_yesno popup_hide popup_notification prevnonblank prompt_setprompt prop_list prop_type_get pyeval readdir reg_recording remote_foreground remove round screencol searchcount server2client setcharpos setfperm setqflist setwinvar sign_getdefined sign_undefine sinh sound_playevent split str2list strdisplaywidth strlen strwidth synconcealed system tagfiles term_dumpdiff term_getattr term_getsize term_list term_setkill test_alloc_fail test_getvalue test_null_dict test_null_string test_setmouse timer_info tolower type values wincol win_gettype winlayout winrestcmd winwidth +syn keyword vimFuncName contained add arglistid assert_exception assert_notequal balloon_gettext bufadd bufnr call charidx ch_evalraw ch_open ch_setoptions complete_add cosh delete digraph_getlist escape exists extendnew findfile fnameescape foldtextresult get getcharmod getcmdtype getenv getimstatus getmousepos getregtype getwininfo glob2regpat hasmapto hlexists iconv inputlist internal_get_nv_cmdchar islocked job_setoptions js_decode len lispindent listener_remove map match matchend matchstrpos mode pathshorten popup_close popup_findinfo popup_list popup_setoptions printf prop_add prop_remove prop_type_list pyxeval readdirex reltime remote_peek rename rubyeval screenpos searchdecl serverlist setcharsearch setline setreg sha256 sign_getplaced sign_unplace slice sound_playfile sqrt str2nr strftime strpart submatch synID systemlist taglist term_dumpload term_getcursor term_getstatus term_scrape term_setrestore test_autochdir test_gui_event test_null_function test_option_not_set test_settime timer_pause toupper typename virtcol windowsversion win_gotoid winline winrestview wordcount +syn keyword vimFuncName contained and argv assert_fails assert_notmatch balloon_show bufexists bufwinid ceil ch_canread ch_getbufnr ch_read ch_status complete_check count deletebufline digraph_set eval exists_compiled feedkeys flatten fnamemodify foreground getbufinfo getcharpos getcmdwintype getfontname getjumplist getpid gettabinfo getwinpos globpath histadd hlget indent inputrestore interrupt isnan job_start js_encode libcall list2blob localtime maparg matchadd matchfuzzy max mzeval perleval popup_create popup_findpreview popup_locate popup_settext prompt_getprompt prop_add_list prop_type_add pum_getpos rand readfile reltimefloat remote_read repeat screenattr screenrow searchpair setbufline setcmdpos setloclist settabvar shellescape sign_jump sign_unplacelist sort sound_stop srand strcharlen strgetchar strptime substitute synIDattr tabpagebuflist tan term_dumpwrite term_getjob term_gettitle term_sendkeys term_setsize test_feedinput test_ignore_error test_null_job test_override test_srand_seed timer_start tr undofile visualmode win_execute winheight win_move_separator winsaveview writefile +syn keyword vimFuncName contained append asin assert_false assert_report balloon_split buflisted bufwinnr changenr ch_close ch_getjob ch_readblob cindent complete_info cscope_connection did_filetype digraph_setlist eventhandler exp filereadable flattennew foldclosed fullcommand getbufline getcharsearch getcompletion getfperm getline getpos gettabvar getwinposx has histdel hlID index inputsave invert items job_status json_decode libcallnr list2str log mapcheck matchaddpos matchfuzzypos menu_info nextnonblank popup_atcursor popup_dialog popup_getoptions popup_menu popup_show prompt_setcallback prop_clear prop_type_change pumvisible range reduce reltimestr remote_send resolve screenchar screenstring searchpairpos setbufvar setcursorcharpos setmatches settabwinvar shiftwidth sign_place simplify sound_clear spellbadword state strcharpart stridx strridx swapinfo synIDtrans tabpagenr tanh term_getaltscreen term_getline term_gettty term_setansicolors term_start test_garbagecollect_now test_null_blob test_null_list test_refcount test_unknown timer_stop trim undotree wildmenumode win_findbuf win_id2tabwin win_move_statusline win_screenpos xor syn keyword vimFuncName contained appendbufline assert_beeps assert_inrange assert_true blob2list bufload byte2line char2nr ch_close_in ch_info ch_readraw clearmatches confirm cursor diff_filler echoraw executable expand filewritable float2nr foldclosedend funcref getbufvar getcharstr getcurpos getfsize getloclist getqflist gettabwinvar getwinposy "--- syntax here and above generated by mkvimvim --- diff --git a/src/Make_cyg_ming.mak b/src/Make_cyg_ming.mak index 46e95b44b4..585539d484 100644 --- a/src/Make_cyg_ming.mak +++ b/src/Make_cyg_ming.mak @@ -466,6 +466,8 @@ RUBY_PLATFORM = i586-mswin32 RUBY_PLATFORM = i386-mingw32 else ifneq ($(wildcard $(RUBY)/lib/ruby/$(RUBY_API_VER_LONG)/x64-mingw32),) RUBY_PLATFORM = x64-mingw32 + else ifneq ($(wildcard $(RUBY)/lib/ruby/$(RUBY_API_VER_LONG)/x64-mingw-ucrt),) +RUBY_PLATFORM = x64-mingw-ucrt else RUBY_PLATFORM = i386-mswin32 endif @@ -479,7 +481,9 @@ RUBY_INSTALL_NAME = mswin32-ruby$(RUBY_API_VER) # Base name of msvcrXX.dll which is used by ruby's dll. RUBY_MSVCRT_NAME = msvcrt endif - ifeq ($(ARCH),x86-64) + ifeq ($(RUBY_PLATFORM),x64-mingw-ucrt) +RUBY_INSTALL_NAME = x64-ucrt-ruby$(RUBY_API_VER) + else ifeq ($(ARCH),x86-64) RUBY_INSTALL_NAME = x64-$(RUBY_MSVCRT_NAME)-ruby$(RUBY_API_VER) else RUBY_INSTALL_NAME = $(RUBY_MSVCRT_NAME)-ruby$(RUBY_API_VER) @@ -1145,17 +1149,17 @@ endif # If this fails because you don't have Vim yet, first build and install Vim # without changes. cmdidxs: ex_cmds.h - vim --clean -X --not-a-term -u create_cmdidxs.vim + vim --clean -N -X --not-a-term -u create_cmdidxs.vim -c quit # Run vim script to generate the normal/visual mode command lookup table. # This only needs to be run when a new normal/visual mode command has been # added. If this fails because you don't have Vim yet: -# - change nv_cmds[] in normal.c to add the new normal/visual mode command. -# - build Vim -# - run "make nvcmdidxs" using the new Vim to generate nv_cmdidxs.h -# - rebuild Vim to use the newly generated nv_cmdidxs.h file. -nvcmdidxs: normal.c - ./$(TARGET) --clean -X --not-a-term -u create_nvcmdidxs.vim +# - change nv_cmds[] in nv_cmds.h to add the new normal/visual mode command. +# - run "make nvcmdidxs" to generate nv_cmdidxs.h +nvcmdidxs: nv_cmds.h + $(CC) $(CFLAGS) -o create_nvcmdidxs.exe create_nvcmdidxs.c $(LIB) + vim --clean -N -X --not-a-term -u create_nvcmdidxs.vim -c quit + -$(DEL) create_nvcmdidxs.exe ########################################################################### INCL = vim.h alloc.h ascii.h ex_cmds.h feature.h errors.h globals.h \ @@ -1219,7 +1223,7 @@ $(OUTDIR)/hardcopy.o: hardcopy.c $(INCL) version.h $(OUTDIR)/misc1.o: misc1.c $(INCL) version.h -$(OUTDIR)/normal.o: normal.c $(INCL) nv_cmdidxs.h +$(OUTDIR)/normal.o: normal.c $(INCL) nv_cmdidxs.h nv_cmds.h $(OUTDIR)/netbeans.o: netbeans.c $(INCL) version.h diff --git a/src/Make_mvc.mak b/src/Make_mvc.mak index 7852150563..00fe774856 100644 --- a/src/Make_mvc.mak +++ b/src/Make_mvc.mak @@ -1186,7 +1186,11 @@ RUBY_MSVCRT_NAME = $(MSVCRT_NAME) ! if "$(CPU)" == "i386" RUBY_INSTALL_NAME = $(RUBY_MSVCRT_NAME)-ruby$(RUBY_API_VER) ! else # CPU +! if EXIST($(RUBY)/lib/ruby/$(RUBY_API_VER_LONG)/x64-mingw-ucrt) +RUBY_INSTALL_NAME = x64-ucrt-ruby$(RUBY_API_VER) +! else RUBY_INSTALL_NAME = x64-$(RUBY_MSVCRT_NAME)-ruby$(RUBY_API_VER) +! endif ! endif # CPU ! endif # RUBY_INSTALL_NAME @@ -1444,17 +1448,17 @@ clean: testclean # If this fails because you don't have Vim yet, first build and install Vim # without changes. cmdidxs: ex_cmds.h - vim --clean -X --not-a-term -u create_cmdidxs.vim + vim --clean -N -X --not-a-term -u create_cmdidxs.vim -c quit # Run vim script to generate the normal/visual mode command lookup table. # This only needs to be run when a new normal/visual mode command has been # added. If this fails because you don't have Vim yet: -# - change nv_cmds[] in normal.c to add the new normal/visual mode command. -# - build Vim -# - run "make nvcmdidxs" using the new Vim to generate nv_cmdidxs.h -# - rebuild Vim to use the newly generated nv_cmdidxs.h file. -nvcmdidxs: normal.c - .\$(VIM) --clean -X --not-a-term -u create_nvcmdidxs.vim +# - change nv_cmds[] in nv_cmds.h to add the new normal/visual mode command. +# - run "make nvcmdidxs" to generate nv_cmdidxs.h +nvcmdidxs: nv_cmds.h + $(CC) /nologo -I. -Iproto -DNDEBUG create_nvcmdidxs.c -link -subsystem:$(SUBSYSTEM_TOOLS) + vim --clean -N -X --not-a-term -u create_nvcmdidxs.vim -c quit + -del create_nvcmdidxs.exe test: cd testdir @@ -1719,7 +1723,7 @@ $(OUTDIR)/netbeans.obj: $(OUTDIR) netbeans.c $(NBDEBUG_SRC) $(INCL) version.h $(OUTDIR)/channel.obj: $(OUTDIR) channel.c $(INCL) -$(OUTDIR)/normal.obj: $(OUTDIR) normal.c $(INCL) nv_cmdidxs.h +$(OUTDIR)/normal.obj: $(OUTDIR) normal.c $(INCL) nv_cmdidxs.h nv_cmds.h $(OUTDIR)/option.obj: $(OUTDIR) option.c $(INCL) optiondefs.h diff --git a/src/Make_vms.mms b/src/Make_vms.mms index 0569054f65..f1689bef3c 100644 --- a/src/Make_vms.mms +++ b/src/Make_vms.mms @@ -977,7 +977,7 @@ mbyte.obj : mbyte.c vim.h [.auto]config.h feature.h os_unix.h \ normal.obj : normal.c vim.h [.auto]config.h feature.h os_unix.h \ ascii.h keymap.h termdefs.h macros.h structs.h regexp.h \ gui.h beval.h [.proto]gui_beval.pro option.h ex_cmds.h proto.h \ - errors.h globals.h nv_cmdidxs.h + errors.h globals.h nv_cmdidxs.h nv_cmds.h ops.obj : ops.c vim.h [.auto]config.h feature.h os_unix.h \ ascii.h keymap.h termdefs.h macros.h structs.h regexp.h gui.h beval.h \ [.proto]gui_beval.pro option.h ex_cmds.h proto.h errors.h globals.h diff --git a/src/Makefile b/src/Makefile index 4c1f9cc056..569f91e49d 100644 --- a/src/Makefile +++ b/src/Makefile @@ -2070,9 +2070,6 @@ PRO_AUTO = \ $(ALL_GUI_PRO) \ $(TCL_PRO) -# Resources used for the Mac are in one directory. -RSRC_DIR = os_mac_rsrc - PRO_MANUAL = os_amiga.pro os_win32.pro \ os_mswin.pro winclip.pro os_vms.pro $(PERL_PRO) @@ -2158,19 +2155,21 @@ autoconf: # This only needs to be run when a command name has been added or changed. # If this fails because you don't have Vim yet, first build and install Vim # without changes. +# This requires a "vim" executable with the +eval feature. cmdidxs: ex_cmds.h - vim --clean -X --not-a-term -u create_cmdidxs.vim + vim --clean -N -X --not-a-term -u create_cmdidxs.vim -c quit # Run vim script to generate the normal/visual mode command lookup table. # This only needs to be run when a new normal/visual mode command has been -# added. If this fails because you don't have Vim yet: -# - change nv_cmds[] in normal.c to add the new normal/visual mode command. -# - build Vim -# - run "make nvcmdidxs" using the new Vim to generate nv_cmdidxs.h -# - rebuild Vim to use the newly generated nv_cmdidxs.h file. -nvcmdidxs: normal.c - ./$(VIMTARGET) --clean -X --not-a-term -u create_nvcmdidxs.vim - +# added. +# This requires a "vim" executable with the +eval feature. +# If this fails because you don't have Vim yet: +# - change nv_cmds[] in nv_cmds.h to add the new normal/visual mode command. +# - run "make nvcmdidxs" to generate nv_cmdidxs.h +nvcmdidxs: auto/config.mk nv_cmds.h + $(CC) -I$(srcdir) $(ALL_CFLAGS) create_nvcmdidxs.c -o create_nvcmdidxs + vim --clean -N -X --not-a-term -u create_nvcmdidxs.vim -c quit + -rm -f create_nvcmdidxs # The normal command to compile a .c file to its .o file. # Without or with ALL_CFLAGS. @@ -3014,11 +3013,6 @@ shadow: runtime pixmaps cd $(SHADOWDIR)/xxd; ln -s ../../xxd/*.[ch] ../../xxd/Make* . $(MKDIR_P) $(SHADOWDIR)/xdiff cd $(SHADOWDIR)/xdiff; ln -s ../../xdiff/*.[ch] . - if test -d $(RSRC_DIR); then \ - cd $(SHADOWDIR); \ - ln -s ../infplist.xml .; \ - ln -s ../$(RSRC_DIR) ../os_mac.rsr.hqx ../dehqx.py .; \ - fi $(MKDIR_P) $(SHADOWDIR)/testdir cd $(SHADOWDIR)/testdir; ln -s ../../testdir/Makefile \ ../../testdir/Make_all.mak \ @@ -4087,7 +4081,7 @@ objects/move.o: move.c vim.h protodef.h auto/config.h feature.h os_unix.h \ objects/normal.o: normal.c vim.h protodef.h auto/config.h feature.h os_unix.h \ auto/osdef.h ascii.h keymap.h termdefs.h macros.h option.h beval.h \ proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \ - proto.h globals.h errors.h nv_cmdidxs.h + proto.h globals.h errors.h nv_cmdidxs.h nv_cmds.h objects/ops.o: ops.c vim.h protodef.h auto/config.h feature.h os_unix.h \ auto/osdef.h ascii.h keymap.h termdefs.h macros.h option.h beval.h \ proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \ diff --git a/src/arglist.c b/src/arglist.c index fbd99af0d3..5c2236927e 100644 --- a/src/arglist.c +++ b/src/arglist.c @@ -969,9 +969,9 @@ do_arg_all( old_curwin = curwin; old_curtab = curtab; -# ifdef FEAT_GUI +#ifdef FEAT_GUI need_mouse_correct = TRUE; -# endif +#endif // Try closing all windows that are not in the argument list. // Also close windows that are not full width; diff --git a/src/ascii.h b/src/ascii.h index 139e8a3554..ec839704ed 100644 --- a/src/ascii.h +++ b/src/ascii.h @@ -8,14 +8,8 @@ /* * Definitions of various common control characters. - * For EBCDIC we have to use different values. */ -#ifndef EBCDIC - -// IF_EB(ASCII_constant, EBCDIC_constant) -#define IF_EB(a, b) a - #define CharOrd(x) ((x) < 'a' ? (x) - 'A' : (x) - 'a') #define CharOrdLow(x) ((x) - 'a') #define CharOrdUp(x) ((x) - 'A') @@ -77,94 +71,6 @@ #define Ctrl_HAT 30 // ^ #define Ctrl__ 31 -#else - -// EBCDIC - -// IF_EB(ASCII_constant, EBCDIC_constant) -#define IF_EB(a, b) b - -/* - * Finding the position in the alphabet is not straightforward in EBCDIC. - * There are gaps in the code table. - * 'a' + 1 == 'b', but: 'i' + 7 == 'j' and 'r' + 8 == 's' - */ -#define CharOrd__(c) ((c) < ('j' - 'a') ? (c) : ((c) < ('s' - 'a') ? (c) - 7 : (c) - 7 - 8)) -#define CharOrdLow(x) (CharOrd__((x) - 'a')) -#define CharOrdUp(x) (CharOrd__((x) - 'A')) -#define CharOrd(x) (isupper(x) ? CharOrdUp(x) : CharOrdLow(x)) - -#define EBCDIC_CHAR_ADD_(x) ((x) < 0?'a':(x)>25?'z':"abcdefghijklmnopqrstuvwxyz"[x]) -#define EBCDIC_CHAR_ADD(c,s) (isupper(c) ? toupper(EBCDIC_CHAR_ADD_(CharOrdUp(c)+(s))) : EBCDIC_CHAR_ADD_(CharOrdLow(c)+(s))) - -#define R13_(c) ("abcdefghijklmnopqrstuvwxyz"[((c) + 13) % 26]) -#define ROT13(c, a) (isupper(c) ? toupper(R13_(CharOrdUp(c))) : R13_(CharOrdLow(c))) - -#define NUL '\000' -#define BELL '\x2f' -#define BS '\x16' -#define TAB '\x05' -#define NL '\x15' -#define NL_STR (char_u *)"\x15" -#define FF '\x0C' -#define CAR '\x0D' -#define ESC '\x27' -#define ESC_STR (char_u *)"\x27" -#define ESC_STR_nc "\x27" -#define DEL 0x07 -#define DEL_STR (char_u *)"\007" - -#define POUND 0xB1 - -#define CTRL_F_STR "\056" -#define CTRL_H_STR "\026" -#define CTRL_V_STR "\062" - -#define Ctrl_AT 0x00 // @ -#define Ctrl_A 0x01 -#define Ctrl_B 0x02 -#define Ctrl_C 0x03 -#define Ctrl_D 0x37 -#define Ctrl_E 0x2D -#define Ctrl_F 0x2E -#define Ctrl_G 0x2F -#define Ctrl_H 0x16 -#define Ctrl_I 0x05 -#define Ctrl_J 0x15 -#define Ctrl_K 0x0B -#define Ctrl_L 0x0C -#define Ctrl_M 0x0D -#define Ctrl_N 0x0E -#define Ctrl_O 0x0F -#define Ctrl_P 0x10 -#define Ctrl_Q 0x11 -#define Ctrl_R 0x12 -#define Ctrl_S 0x13 -#define Ctrl_T 0x3C -#define Ctrl_U 0x3D -#define Ctrl_V 0x32 -#define Ctrl_W 0x26 -#define Ctrl_X 0x18 -#define Ctrl_Y 0x19 -#define Ctrl_Z 0x3F - // CTRL- [ Left Square Bracket == ESC -#define Ctrl_RSB 0x1D // ] Right Square Bracket -#define Ctrl_BSL 0x1C // \ BackSLash -#define Ctrl_HAT 0x1E // ^ -#define Ctrl__ 0x1F - -#define Ctrl_chr(x) (CtrlTable[(x)]) -extern char CtrlTable[]; - -#define CtrlChar(x) ((x < ' ') ? CtrlCharTable[(x)] : 0) -extern char CtrlCharTable[]; - -#define MetaChar(x) ((x < ' ') ? MetaCharTable[(x)] : 0) -extern char MetaCharTable[]; - -#endif // defined EBCDIC - -// TODO: EBCDIC Code page dependent (here 1047) #define CSI 0x9b // Control Sequence Introducer #define CSI_STR "\233" #define DCS 0x90 // Device Control String diff --git a/src/buffer.c b/src/buffer.c index e070e227e3..c7a16aeb60 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -1710,6 +1710,7 @@ set_curbuf(buf_T *buf, int action) #endif bufref_T newbufref; bufref_T prevbufref; + int valid; setpcmark(); if ((cmdmod.cmod_flags & CMOD_KEEPALT) == 0) @@ -1767,13 +1768,19 @@ set_curbuf(buf_T *buf, int action) // An autocommand may have deleted "buf", already entered it (e.g., when // it did ":bunload") or aborted the script processing. // If curwin->w_buffer is null, enter_buffer() will make it valid again - if ((buf_valid(buf) && buf != curbuf + valid = buf_valid(buf); + if ((valid && buf != curbuf #ifdef FEAT_EVAL && !aborting() #endif ) || curwin->w_buffer == NULL) { - enter_buffer(buf); + // If the buffer is not valid but curwin->w_buffer is NULL we must + // enter some buffer. Using the last one is hopefully OK. + if (!valid) + enter_buffer(lastbuf); + else + enter_buffer(buf); #ifdef FEAT_SYN_HL if (old_tw != curbuf->b_p_tw) check_colorcolumn(curwin); @@ -2292,8 +2299,7 @@ free_buf_options( clear_string_option(&buf->b_p_vsts); vim_free(buf->b_p_vsts_nopaste); buf->b_p_vsts_nopaste = NULL; - vim_free(buf->b_p_vsts_array); - buf->b_p_vsts_array = NULL; + VIM_CLEAR(buf->b_p_vsts_array); clear_string_option(&buf->b_p_vts); VIM_CLEAR(buf->b_p_vts_array); #endif diff --git a/src/change.c b/src/change.c index 4eda695fbe..8f84bec353 100644 --- a/src/change.c +++ b/src/change.c @@ -1638,9 +1638,9 @@ open_line( #ifdef FEAT_CINDENT // May do indenting after opening a new line. do_cindent = !p_paste && (curbuf->b_p_cin -# ifdef FEAT_EVAL +# ifdef FEAT_EVAL || *curbuf->b_p_inde != NUL -# endif +# endif ) && in_cinkeys(dir == FORWARD ? KEY_OPEN_FORW diff --git a/src/charset.c b/src/charset.c index 12d6359708..df95ed1b50 100644 --- a/src/charset.c +++ b/src/charset.c @@ -87,18 +87,11 @@ buf_init_chartab( * Set the default size for printable characters: * From to '~' is 1 (printable), others are 2 (not printable). * This also inits all 'isident' and 'isfname' flags to FALSE. - * - * EBCDIC: all chars below ' ' are not printable, all others are - * printable. */ c = 0; while (c < ' ') g_chartab[c++] = (dy_flags & DY_UHEX) ? 4 : 2; -#ifdef EBCDIC - while (c < 255) -#else while (c <= '~') -#endif g_chartab[c++] = 1 + CT_PRINT_CHAR; while (c < 256) { @@ -221,10 +214,7 @@ buf_init_chartab( } else if (i == 1) // (re)set printable { - if ((c < ' ' -#ifndef EBCDIC - || c > '~' -#endif + if ((c < ' ' || c > '~' // For double-byte we keep the cell width, so // that we can detect it from the first byte. ) && !(enc_dbcs && MB_BYTE2LEN(c) == 2)) @@ -519,13 +509,8 @@ transchar_buf(buf_T *buf, int c) c = K_SECOND(c); } - if ((!chartab_initialized && ( -#ifdef EBCDIC - (c >= 64 && c < 255) -#else - (c >= ' ' && c <= '~') -#endif - )) || (c < 256 && vim_isprintc_strict(c))) + if ((!chartab_initialized && ((c >= ' ' && c <= '~'))) + || (c < 256 && vim_isprintc_strict(c))) { // printable character transchar_charbuf[i] = c; @@ -567,56 +552,26 @@ transchar_nonprint(buf_T *buf, char_u *charbuf, int c) if (dy_flags & DY_UHEX) // 'display' has "uhex" transchar_hex(charbuf, c); -#ifdef EBCDIC - // For EBCDIC only the characters 0-63 and 255 are not printable - else if (CtrlChar(c) != 0 || c == DEL) -#else else if (c <= 0x7f) // 0x00 - 0x1f and 0x7f -#endif { charbuf[0] = '^'; -#ifdef EBCDIC - if (c == DEL) - charbuf[1] = '?'; // DEL displayed as ^? - else - charbuf[1] = CtrlChar(c); -#else charbuf[1] = c ^ 0x40; // DEL displayed as ^? -#endif - charbuf[2] = NUL; } else if (enc_utf8 && c >= 0x80) { transchar_hex(charbuf, c); } -#ifndef EBCDIC else if (c >= ' ' + 0x80 && c <= '~' + 0x80) // 0xa0 - 0xfe { charbuf[0] = '|'; charbuf[1] = c - 0x80; charbuf[2] = NUL; } -#else - else if (c < 64) - { - charbuf[0] = '~'; - charbuf[1] = MetaChar(c); - charbuf[2] = NUL; - } -#endif else // 0x80 - 0x9f and 0xff { - /* - * TODO: EBCDIC I don't know what to do with this chars, so I display - * them as '~?' for now - */ charbuf[0] = '~'; -#ifdef EBCDIC - charbuf[1] = '?'; // 0xff displayed as ~? -#else charbuf[1] = (c - 0x80) ^ 0x40; // 0xff displayed as ~? -#endif charbuf[2] = NUL; } } @@ -2134,59 +2089,3 @@ backslash_halve_save(char_u *p) backslash_halve(res); return res; } - -#if (defined(EBCDIC) && defined(FEAT_POSTSCRIPT)) || defined(PROTO) -/* - * Table for EBCDIC to ASCII conversion unashamedly taken from xxd.c! - * The first 64 entries have been added to map control characters defined in - * ascii.h - */ -static char_u ebcdic2ascii_tab[256] = -{ - 0000, 0001, 0002, 0003, 0004, 0011, 0006, 0177, - 0010, 0011, 0012, 0013, 0014, 0015, 0016, 0017, - 0020, 0021, 0022, 0023, 0024, 0012, 0010, 0027, - 0030, 0031, 0032, 0033, 0033, 0035, 0036, 0037, - 0040, 0041, 0042, 0043, 0044, 0045, 0046, 0047, - 0050, 0051, 0052, 0053, 0054, 0055, 0056, 0057, - 0060, 0061, 0062, 0063, 0064, 0065, 0066, 0067, - 0070, 0071, 0072, 0073, 0074, 0075, 0076, 0077, - 0040, 0240, 0241, 0242, 0243, 0244, 0245, 0246, - 0247, 0250, 0325, 0056, 0074, 0050, 0053, 0174, - 0046, 0251, 0252, 0253, 0254, 0255, 0256, 0257, - 0260, 0261, 0041, 0044, 0052, 0051, 0073, 0176, - 0055, 0057, 0262, 0263, 0264, 0265, 0266, 0267, - 0270, 0271, 0313, 0054, 0045, 0137, 0076, 0077, - 0272, 0273, 0274, 0275, 0276, 0277, 0300, 0301, - 0302, 0140, 0072, 0043, 0100, 0047, 0075, 0042, - 0303, 0141, 0142, 0143, 0144, 0145, 0146, 0147, - 0150, 0151, 0304, 0305, 0306, 0307, 0310, 0311, - 0312, 0152, 0153, 0154, 0155, 0156, 0157, 0160, - 0161, 0162, 0136, 0314, 0315, 0316, 0317, 0320, - 0321, 0345, 0163, 0164, 0165, 0166, 0167, 0170, - 0171, 0172, 0322, 0323, 0324, 0133, 0326, 0327, - 0330, 0331, 0332, 0333, 0334, 0335, 0336, 0337, - 0340, 0341, 0342, 0343, 0344, 0135, 0346, 0347, - 0173, 0101, 0102, 0103, 0104, 0105, 0106, 0107, - 0110, 0111, 0350, 0351, 0352, 0353, 0354, 0355, - 0175, 0112, 0113, 0114, 0115, 0116, 0117, 0120, - 0121, 0122, 0356, 0357, 0360, 0361, 0362, 0363, - 0134, 0237, 0123, 0124, 0125, 0126, 0127, 0130, - 0131, 0132, 0364, 0365, 0366, 0367, 0370, 0371, - 0060, 0061, 0062, 0063, 0064, 0065, 0066, 0067, - 0070, 0071, 0372, 0373, 0374, 0375, 0376, 0377 -}; - -/* - * Convert a buffer worth of characters from EBCDIC to ASCII. Only useful if - * wanting 7-bit ASCII characters out the other end. - */ - void -ebcdic2ascii(char_u *buffer, int len) -{ - int i; - - for (i = 0; i < len; i++) - buffer[i] = ebcdic2ascii_tab[buffer[i]]; -} -#endif diff --git a/src/cindent.c b/src/cindent.c index 747b5093e9..ca21c123e0 100644 --- a/src/cindent.c +++ b/src/cindent.c @@ -3946,13 +3946,7 @@ in_cinkeys( try_match_word = FALSE; // does it look like a control character? - if (*look == '^' -#ifdef EBCDIC - && (Ctrl_chr(look[1]) != 0) -#else - && look[1] >= '?' && look[1] <= '_' -#endif - ) + if (*look == '^' && look[1] >= '?' && look[1] <= '_') { if (try_match && keytyped == Ctrl_chr(look[1])) return TRUE; diff --git a/src/cmdexpand.c b/src/cmdexpand.c index 9e701a6b81..ec7cc54af5 100644 --- a/src/cmdexpand.c +++ b/src/cmdexpand.c @@ -2002,11 +2002,11 @@ ExpandFromContext( #ifdef BACKSLASH_IN_FILENAME if (p_csl[0] != NUL && (options & WILD_IGNORE_COMPLETESLASH) == 0) { - int i; + int j; - for (i = 0; i < *num_file; ++i) + for (j = 0; j < *num_file; ++j) { - char_u *ptr = (*file)[i]; + char_u *ptr = (*file)[j]; while (*ptr != NUL) { diff --git a/src/create_nvcmdidxs.c b/src/create_nvcmdidxs.c new file mode 100644 index 0000000000..1d084f5657 --- /dev/null +++ b/src/create_nvcmdidxs.c @@ -0,0 +1,38 @@ +/* vi:set ts=8 sts=4 sw=4 noet: + * + * VIM - Vi IMproved by Bram Moolenaar et al. + * + * Do ":help uganda" in Vim to read copying and usage conditions. + * Do ":help credits" in Vim to see a list of people who contributed. + * See README.txt for an overview of the Vim source code. + */ + +/* + * create_nvcmdidxs.c: helper program for `make nvcmdidxs` + * + * This outputs the list of command characters from the nv_cmds table in + * decimal form, one per line. + */ + +#include "vim.h" + +// Declare nv_cmds[]. +#include "nv_cmds.h" + +#include + +int main(void) +{ + size_t i; + + for (i = 0; i < NV_CMDS_SIZE; i++) + { + int cmdchar = nv_cmds[i]; + + // Special keys are negative, use the negated value for sorting. + if (cmdchar < 0) + cmdchar = -cmdchar; + printf("%d\n", cmdchar); + } + return 0; +} diff --git a/src/create_nvcmdidxs.vim b/src/create_nvcmdidxs.vim index 2dd5fdb546..13192761b3 100644 --- a/src/create_nvcmdidxs.vim +++ b/src/create_nvcmdidxs.vim @@ -1,72 +1,60 @@ -vim9script +" This script generates the table nv_cmd_idx[] which contains the index in +" nv_cmds[] table (normal.c) for each of the command character supported in +" normal/visual mode. +" This is used to speed up the command lookup in nv_cmds[]. +" +" Script should be run using "make nvcmdidxs", every time the nv_cmds[] table +" in src/nv_cmds.h changes. +" +" This is written in legacy Vim script so that it can be run by a slightly +" older Vim version. -# This script generates the table nv_cmd_idx[] which contains the index in -# nv_cmds[] table (normal.c) for each of the command character supported in -# normal/visual mode. -# This is used to speed up the command lookup in nv_cmds[]. -# -# Script should be run using "make nvcmdidxs", every time the nv_cmds[] table -# in src/normal.c changes. +" Generate the table of normal/visual mode command characters and their +" corresponding index. +let cmd = 'create_nvcmdidxs' +if has('unix') + let cmd = './' .. cmd +endif +let nv_cmdtbl = systemlist(cmd)->map({i, ch -> {'idx': i, 'cmdchar': ch}}) -def Create_nvcmdidxs_table() - var nv_cmdtbl: list> = [] +" sort the table by the command character +call sort(nv_cmdtbl, {a, b -> a.cmdchar - b.cmdchar}) - # Generate the table of normal/visual mode command characters and their - # corresponding index. - var idx: number = 0 - var ch: number - while true - ch = internal_get_nv_cmdchar(idx) - if ch == -1 - break - endif - add(nv_cmdtbl, {idx: idx, cmdchar: ch}) - idx += 1 - endwhile +" Compute the highest index upto which the command character can be directly +" used as an index. +let nv_max_linear = 0 +for i in range(nv_cmdtbl->len()) + if i != nv_cmdtbl[i].cmdchar + let nv_max_linear = i - 1 + break + endif +endfor - # sort the table by the command character - sort(nv_cmdtbl, (a, b) => a.cmdchar - b.cmdchar) +" Generate a header file with the table +let output =<< trim END + /* + * Automatically generated code by the create_nvcmdidxs.vim script. + * + * Table giving the index in nv_cmds[] to lookup based on + * the command character. + */ - # Compute the highest index upto which the command character can be directly - # used as an index. - var nv_max_linear: number = 0 - for i in range(nv_cmdtbl->len()) - if i != nv_cmdtbl[i].cmdchar - nv_max_linear = i - 1 - break - endif - endfor + // nv_cmd_idx[] => nv_cmds[] index + static const unsigned short nv_cmd_idx[] = + { +END - # Generate a header file with the table - var output: list =<< trim END - /* - * Automatically generated code by the create_nvcmdidxs.vim script. - * - * Table giving the index in nv_cmds[] to lookup based on - * the command character. - */ +" Add each command character in comment and the corresponding index +let output += nv_cmdtbl->map({_, v -> + \ printf(' /* %5d */ %3d,', v.cmdchar, v.idx)}) - // nv_cmd_idx[] => nv_cmds[] index - static const unsigned short nv_cmd_idx[] = - { - END +let output += ['};', '', + \ '// The highest index for which', + \ '// nv_cmds[idx].cmd_char == nv_cmd_idx[nv_cmds[idx].cmd_char]'] - # Add each command character in comment and the corresponding index - var tbl: list = mapnew(nv_cmdtbl, (k, v) => - ' /* ' .. printf('%5d', v.cmdchar) .. ' */ ' .. - printf('%3d', v.idx) .. ',' - ) - output += tbl +let output += ['static const int nv_max_linear = ' .. nv_max_linear .. ';'] - output += [ '};', '', - '// The highest index for which', - '// nv_cmds[idx].cmd_char == nv_cmd_idx[nv_cmds[idx].cmd_char]'] - output += ['static const int nv_max_linear = ' .. nv_max_linear .. ';'] - - writefile(output, "nv_cmdidxs.h") -enddef - -Create_nvcmdidxs_table() +call writefile(output, "nv_cmdidxs.h") quit -# vim: shiftwidth=2 sts=2 expandtab +" vim: shiftwidth=2 sts=2 expandtab diff --git a/src/dehqx.py b/src/dehqx.py deleted file mode 100644 index 00e8f9f340..0000000000 --- a/src/dehqx.py +++ /dev/null @@ -1,45 +0,0 @@ -# Python script to get both the data and resource fork from a BinHex encoded -# file. -# Author: MURAOKA Taro -# Last Change: 2018 Mar 27 -# -# Copyright (C) 2003,12 MURAOKA Taro -# THIS FILE IS DISTRIBUTED UNDER THE VIM LICENSE. - -import sys -import binhex - -input = sys.argv[1] -conv = binhex.HexBin(input) -info = conv.FInfo -out = conv.FName -out_data = out -out_rsrc = out + '.rsrcfork' - -# This uses the print statement on Python 2, print function on Python 3. -#print('out_rsrc=' + out_rsrc) -print('In file: ' + input) - -outfile = open(out_data, 'wb') -print(' Out data fork: ' + out_data) -while 1: - d = conv.read(128000) - if not d: break - outfile.write(d) -outfile.close() -conv.close_data() - -d = conv.read_rsrc(128000) -if d: - print(' Out rsrc fork: ' + out_rsrc) - outfile = open(out_rsrc, 'wb') - outfile.write(d) - while 1: - d = conv.read_rsrc(128000) - if not d: break - outfile.write(d) - outfile.close() - -conv.close() - -# vim:set ts=8 sts=4 sw=4 et: diff --git a/src/dict.c b/src/dict.c index 9c6b7d4532..06f38716b5 100644 --- a/src/dict.c +++ b/src/dict.c @@ -284,11 +284,11 @@ dictitem_free(dictitem_T *item) /* * Make a copy of dict "d". Shallow if "deep" is FALSE. * The refcount of the new dict is set to 1. - * See item_copy() for "copyID". + * See item_copy() for "top" and "copyID". * Returns NULL when out of memory. */ dict_T * -dict_copy(dict_T *orig, int deep, int copyID) +dict_copy(dict_T *orig, int deep, int top, int copyID) { dict_T *copy; dictitem_T *di; @@ -306,6 +306,8 @@ dict_copy(dict_T *orig, int deep, int copyID) orig->dv_copyID = copyID; orig->dv_copydict = copy; } + copy->dv_type = alloc_type(top || deep ? &t_dict_any : orig->dv_type); + todo = (int)orig->dv_hashtab.ht_used; for (hi = orig->dv_hashtab.ht_array; todo > 0 && !got_int; ++hi) { @@ -318,8 +320,8 @@ dict_copy(dict_T *orig, int deep, int copyID) break; if (deep) { - if (item_copy(&HI2DI(hi)->di_tv, &di->di_tv, deep, - copyID) == FAIL) + if (item_copy(&HI2DI(hi)->di_tv, &di->di_tv, + deep, FALSE, copyID) == FAIL) { vim_free(di); break; @@ -1239,7 +1241,7 @@ dict_extend_func( { if (is_new) { - d1 = dict_copy(d1, FALSE, get_copyID()); + d1 = dict_copy(d1, FALSE, TRUE, get_copyID()); if (d1 == NULL) return; } diff --git a/src/digraph.c b/src/digraph.c index f46e43f23e..bbab9584a6 100644 --- a/src/digraph.c +++ b/src/digraph.c @@ -138,119 +138,7 @@ static digr_T digraphdefault[] = }; #else // !HPUX_DIGRAPHS - -# ifdef EBCDIC - - /* - * EBCDIC - ISO digraphs - * TODO: EBCDIC Table is Code-Page 1047 - */ - {{'a', '^', 66}, // â - {'a', '"', 67}, // ä - {'a', '`', 68}, // à - {'a', '\'', 69}, // á - {'a', '~', 70}, // ã - {'a', '@', 71}, // å - {'a', 'a', 71}, // å - {'c', ',', 72}, // ç - {'n', '~', 73}, // ñ - {'c', '|', 74}, // ¢ - {'e', '\'', 81}, // é - {'e', '^', 82}, // ê - {'e', '"', 83}, // ë - {'e', '`', 84}, // è - {'i', '\'', 85}, // í - {'i', '^', 86}, // î - {'i', '"', 87}, // ï - {'i', '`', 88}, // ì - {'s', 's', 89}, // ß - {'A', '^', 98}, //  - {'A', '"', 99}, // Ä - {'A', '`', 100}, // À - {'A', '\'', 101}, // Á - {'A', '~', 102}, // à - {'A', '@', 103}, // Å - {'A', 'A', 103}, // Å - {'C', ',', 104}, // Ç - {'N', '~', 105}, // Ñ - {'|', '|', 106}, // ¦ - {'o', '/', 112}, // ø - {'E', '\'', 113}, // É - {'E', '^', 114}, // Ê - {'E', '"', 115}, // Ë - {'E', '`', 116}, // È - {'I', '\'', 117}, // Í - {'I', '^', 118}, // Î - {'I', '"', 119}, // Ï - {'I', '`', 120}, // Ì - {'O', '/', 128}, // 0/ XX - {'<', '<', 138}, // « - {'>', '>', 139}, // » - {'d', '-', 140}, // ð - {'y', '\'', 141}, // ý - {'i', 'p', 142}, // þ - {'+', '-', 143}, // ± - {'~', 'o', 144}, // ° - {'a', '-', 154}, // ª - {'o', '-', 155}, // º - {'a', 'e', 156}, // æ - {',', ',', 157}, // , XX - {'A', 'E', 158}, // Æ - {'o', 'x', 159}, // ¤ - currency symbol in ISO 8859-1 - {'e', '=', 159}, // ¤ - euro symbol in ISO 8859-15 - {'E', 'u', 159}, // ¤ - euro symbol in ISO 8859-15 - {'j', 'u', 160}, // µ - {'y', '"', 167}, // x XX - {'~', '!', 170}, // ¡ - {'~', '?', 171}, // ¿ - {'D', '-', 172}, // Ð - {'I', 'p', 174}, // Þ - {'r', 'O', 175}, // ® - {'-', ',', 176}, // ¬ - {'$', '$', 177}, // £ - {'Y', '-', 178}, // ¥ - {'~', '.', 179}, // · - {'c', 'O', 180}, // © - {'p', 'a', 181}, // § - {'p', 'p', 182}, // ¶ - {'1', '4', 183}, // ¼ - {'1', '2', 184}, // ½ - {'3', '4', 185}, // ¾ - {'Y', '\'', 186}, // Ý - {'"', '"', 187}, // ¨ - {'-', '=', 188}, // ¯ - {'\'', '\'', 190}, // ´ - {'O', 'E', 191}, // × - OE in ISO 8859-15 - {'/', '\\', 191}, // × - multiplication symbol in ISO 8859-1 - {'-', '-', 202}, // ­ - {'o', '^', 203}, // ô - {'o', '"', 204}, // ö - {'o', '`', 205}, // ò - {'o', '\'', 206}, // ó - {'o', '~', 207}, // õ - {'1', '1', 218}, // ¹ - {'u', '^', 219}, // û - {'u', '"', 220}, // ü - {'u', '`', 221}, // ù - {'u', '\'', 222}, // ú - {':', '-', 225}, // ÷ - division symbol in ISO 8859-1 - {'o', 'e', 225}, // ÷ - oe in ISO 8859-15 - {'2', '2', 234}, // ² - {'O', '^', 235}, // Ô - {'O', '"', 236}, // Ö - {'O', '`', 237}, // Ò - {'O', '\'', 238}, // Ó - {'O', '~', 239}, // Õ - {'3', '3', 250}, // ³ - {'U', '^', 251}, // Û - {'U', '"', 252}, // Ü - {'U', '`', 253}, // Ù - {'U', '\'', 254}, // Ú - {NUL, NUL, NUL} - }; - -# else // EBCDIC -# ifdef OLD_DIGRAPHS +# ifdef OLD_DIGRAPHS /* * digraphs compatible with Vim 5.x @@ -357,7 +245,7 @@ static digr_T digraphdefault[] = {'y', '"', 255}, // x XX {NUL, NUL, NUL} }; -# else // OLD_DIGRAPHS +# else // OLD_DIGRAPHS /* * digraphs for Unicode from RFC1345 @@ -1761,8 +1649,7 @@ static digr_T digraphdefault[] = {NUL, NUL, NUL} }; -# endif // OLD_DIGRAPHS -# endif // EBCDIC +# endif // OLD_DIGRAPHS #endif // !HPUX_DIGRAPHS /* diff --git a/src/drawscreen.c b/src/drawscreen.c index 82b9f0571a..3f1a08087a 100644 --- a/src/drawscreen.c +++ b/src/drawscreen.c @@ -2554,17 +2554,17 @@ win_update(win_T *wp) // See the version that was fixed. if (use_vtp() && get_conpty_fix_type() < 1) { - int i; + int k; - for (i = 0; i < Rows; ++i) + for (k = 0; k < Rows; ++k) if (enc_utf8) - if ((*mb_off2cells)(LineOffset[i] + Columns - 2, - LineOffset[i] + screen_Columns) > 1) - screen_draw_rectangle(i, Columns - 2, 1, 2, FALSE); + if ((*mb_off2cells)(LineOffset[k] + Columns - 2, + LineOffset[k] + screen_Columns) > 1) + screen_draw_rectangle(k, Columns - 2, 1, 2, FALSE); else - screen_draw_rectangle(i, Columns - 1, 1, 1, FALSE); + screen_draw_rectangle(k, Columns - 1, 1, 1, FALSE); else - screen_char(LineOffset[i] + Columns - 1, i, Columns - 1); + screen_char(LineOffset[k] + Columns - 1, k, Columns - 1); } #endif diff --git a/src/edit.c b/src/edit.c index 649ea8d236..50a46adf11 100644 --- a/src/edit.c +++ b/src/edit.c @@ -2061,11 +2061,7 @@ insert_special( * stop and defer processing to the "normal" mechanism. * '0' and '^' are special, because they can be followed by CTRL-D. */ -#ifdef EBCDIC -# define ISSPECIAL(c) ((c) < ' ' || (c) == '0' || (c) == '^') -#else -# define ISSPECIAL(c) ((c) < ' ' || (c) >= DEL || (c) == '0' || (c) == '^') -#endif +#define ISSPECIAL(c) ((c) < ' ' || (c) >= DEL || (c) == '0' || (c) == '^') /* * "flags": INSCHAR_FORMAT - force formatting @@ -2935,9 +2931,8 @@ stuff_inserted( stuffReadbuff(ptr); // a trailing "0" is inserted as "048", "^" as "^" if (last) - stuffReadbuff((char_u *)(last == '0' - ? IF_EB("\026\060\064\070", CTRL_V_STR "xf0") - : IF_EB("\026^", CTRL_V_STR "^"))); + stuffReadbuff( + (char_u *)(last == '0' ? "\026\060\064\070" : "\026^")); } while (--count > 0); @@ -3325,15 +3320,11 @@ hkmap(int c) return ' '; // \"a --> ' ' -- / -- else if (c == 252) return ' '; // \"u --> ' ' -- / -- -#ifdef EBCDIC - else if (islower(c)) -#else // NOTE: islower() does not do the right thing for us on Linux so we // do this the same was as 5.7 and previous, so it works correctly on // all systems. Specifically, the e.g. Delete and Arrow keys are // munged and won't work if e.g. searching for Hebrew text. else if (c >= 'a' && c <= 'z') -#endif return (int)(map[CharOrdLow(c)] + p_aleph); else return c; @@ -3355,12 +3346,7 @@ hkmap(int c) default: { static char str[] = "zqbcxlsjphmkwonu ydafe rig"; -#ifdef EBCDIC - // see note about islower() above - if (!islower(c)) -#else if (c < 'a' || c > 'z') -#endif return c; c = str[CharOrdLow(c)]; break; @@ -4233,7 +4219,7 @@ ins_bs( } else want_vcol = tabstop_start(want_vcol, get_sts_value(), - curbuf->b_p_vsts_array); + curbuf->b_p_vsts_array); #else if (p_sta && in_indent) ts = (int)get_sw_value(curbuf); diff --git a/src/errors.h b/src/errors.h index d49c53f8a6..d8aaaa7582 100644 --- a/src/errors.h +++ b/src/errors.h @@ -2814,7 +2814,8 @@ EXTERN char e_cannot_assign_to_argument[] INIT(= N_("E1090: Cannot assign to argument %s")); EXTERN char e_function_is_not_compiled_str[] INIT(= N_("E1091: Function is not compiled: %s")); -// E1092 unused +EXTERN char e_cannot_nest_redir[] + INIT(= N_("E1092: Cannot nest :redir")); EXTERN char e_expected_nr_items_but_got_nr[] INIT(= N_("E1093: Expected %d items but got %d")); EXTERN char e_import_can_only_be_used_in_script[] @@ -3017,8 +3018,6 @@ EXTERN char e_cannot_use_range_with_assignment_operator_str[] #ifdef FEAT_EVAL EXTERN char e_blob_not_set[] INIT(= N_("E1184: Blob not set")); -EXTERN char e_cannot_nest_redir[] - INIT(= N_("E1185: Cannot nest :redir")); EXTERN char e_missing_redir_end[] INIT(= N_("E1185: Missing :redir END")); EXTERN char e_expression_does_not_result_in_value_str[] diff --git a/src/eval.c b/src/eval.c index c2357884af..b5ccc4bdfb 100644 --- a/src/eval.c +++ b/src/eval.c @@ -111,13 +111,6 @@ eval_init(void) { evalvars_init(); func_init(); - -#ifdef EBCDIC - /* - * Sort the function table, to enable binary search. - */ - sortFunctions(); -#endif } #if defined(EXITFREE) || defined(PROTO) @@ -6167,6 +6160,7 @@ handle_subscript( /* * Make a copy of an item. * Lists and Dictionaries are also copied. A deep copy if "deep" is set. + * "top" is TRUE for the toplevel of copy(). * For deepcopy() "copyID" is zero for a full copy or the ID for when a * reference to an already copied list/dict can be used. * Returns FAIL or OK. @@ -6176,6 +6170,7 @@ item_copy( typval_T *from, typval_T *to, int deep, + int top, int copyID) { static int recurse = 0; @@ -6214,7 +6209,8 @@ item_copy( ++to->vval.v_list->lv_refcount; } else - to->vval.v_list = list_copy(from->vval.v_list, deep, copyID); + to->vval.v_list = list_copy(from->vval.v_list, + deep, top, copyID); if (to->vval.v_list == NULL) ret = FAIL; break; @@ -6233,7 +6229,8 @@ item_copy( ++to->vval.v_dict->dv_refcount; } else - to->vval.v_dict = dict_copy(from->vval.v_dict, deep, copyID); + to->vval.v_dict = dict_copy(from->vval.v_dict, + deep, top, copyID); if (to->vval.v_dict == NULL) ret = FAIL; break; diff --git a/src/evalfunc.c b/src/evalfunc.c index 40037f7666..f6b47f61fd 100644 --- a/src/evalfunc.c +++ b/src/evalfunc.c @@ -933,7 +933,6 @@ static argcheck_T arg3_string_any_string[] = {arg_string, NULL, arg_string}; static argcheck_T arg3_string_bool_bool[] = {arg_string, arg_bool, arg_bool}; static argcheck_T arg3_string_bool_dict[] = {arg_string, arg_bool, arg_dict_any}; static argcheck_T arg3_string_number_bool[] = {arg_string, arg_number, arg_bool}; -static argcheck_T arg3_string_number_number[] = {arg_string, arg_number, arg_number}; static argcheck_T arg3_string_string_bool[] = {arg_string, arg_string, arg_bool}; static argcheck_T arg3_string_string_dict[] = {arg_string, arg_string, arg_dict_any}; static argcheck_T arg3_string_string_number[] = {arg_string, arg_string, arg_number}; @@ -993,127 +992,236 @@ static argcheck_T arg24_match_func[] = {arg_string_or_list_any, arg_string, arg_ * Note that "argtypes" is NULL if "argcount" is zero. */ static type_T * -ret_void(int argcount UNUSED, type2_T *argtypes UNUSED) +ret_void(int argcount UNUSED, + type2_T *argtypes UNUSED, + type_T **decl_type UNUSED) { return &t_void; } static type_T * -ret_any(int argcount UNUSED, type2_T *argtypes UNUSED) +ret_any(int argcount UNUSED, + type2_T *argtypes UNUSED, + type_T **decl_type UNUSED) { return &t_any; } static type_T * -ret_bool(int argcount UNUSED, type2_T *argtypes UNUSED) +ret_bool(int argcount UNUSED, + type2_T *argtypes UNUSED, + type_T **decl_type UNUSED) { return &t_bool; } static type_T * -ret_number_bool(int argcount UNUSED, type2_T *argtypes UNUSED) +ret_number_bool(int argcount UNUSED, + type2_T *argtypes UNUSED, + type_T **decl_type UNUSED) { return &t_number_bool; } static type_T * -ret_number(int argcount UNUSED, type2_T *argtypes UNUSED) +ret_number(int argcount UNUSED, + type2_T *argtypes UNUSED, + type_T **decl_type UNUSED) { return &t_number; } static type_T * -ret_float(int argcount UNUSED, type2_T *argtypes UNUSED) +ret_float(int argcount UNUSED, + type2_T *argtypes UNUSED, + type_T **decl_type UNUSED) { return &t_float; } static type_T * -ret_string(int argcount UNUSED, type2_T *argtypes UNUSED) +ret_string(int argcount UNUSED, + type2_T *argtypes UNUSED, + type_T **decl_type UNUSED) { return &t_string; } static type_T * -ret_list_any(int argcount UNUSED, type2_T *argtypes UNUSED) +ret_list_any(int argcount UNUSED, + type2_T *argtypes UNUSED, + type_T **decl_type UNUSED) { return &t_list_any; } static type_T * -ret_list_number(int argcount UNUSED, type2_T *argtypes UNUSED) +ret_list_number(int argcount UNUSED, + type2_T *argtypes UNUSED, + type_T **decl_type UNUSED) { return &t_list_number; } static type_T * -ret_list_string(int argcount UNUSED, type2_T *argtypes UNUSED) +ret_range(int argcount UNUSED, + type2_T *argtypes UNUSED, + type_T **decl_type) +{ + // returning a list, but it's not declared as such + *decl_type = &t_list_any; + return &t_list_number; +} + static type_T * +ret_list_string(int argcount UNUSED, + type2_T *argtypes UNUSED, + type_T **decl_type UNUSED) { return &t_list_string; } static type_T * -ret_list_dict_any(int argcount UNUSED, type2_T *argtypes UNUSED) +ret_list_dict_any(int argcount UNUSED, + type2_T *argtypes UNUSED, + type_T **decl_type UNUSED) { return &t_list_dict_any; } static type_T * -ret_list_items(int argcount UNUSED, type2_T *argtypes UNUSED) +ret_list_items(int argcount UNUSED, + type2_T *argtypes UNUSED, + type_T **decl_type UNUSED) { return &t_list_list_any; } static type_T * -ret_list_string_items(int argcount UNUSED, type2_T *argtypes UNUSED) +ret_list_string_items(int argcount UNUSED, + type2_T *argtypes UNUSED, + type_T **decl_type UNUSED) { return &t_list_list_string; } static type_T * -ret_dict_any(int argcount UNUSED, type2_T *argtypes UNUSED) +ret_dict_any(int argcount UNUSED, + type2_T *argtypes UNUSED, + type_T **decl_type UNUSED) { return &t_dict_any; } static type_T * -ret_job_info(int argcount, type2_T *argtypes UNUSED) +ret_job_info(int argcount, + type2_T *argtypes UNUSED, + type_T **decl_type UNUSED) { if (argcount == 0) return &t_list_job; return &t_dict_any; } static type_T * -ret_dict_number(int argcount UNUSED, type2_T *argtypes UNUSED) +ret_dict_number(int argcount UNUSED, + type2_T *argtypes UNUSED, + type_T **decl_type UNUSED) { return &t_dict_number; } static type_T * -ret_dict_string(int argcount UNUSED, type2_T *argtypes UNUSED) +ret_dict_string(int argcount UNUSED, + type2_T *argtypes UNUSED, + type_T **decl_type UNUSED) { return &t_dict_string; } static type_T * -ret_blob(int argcount UNUSED, type2_T *argtypes UNUSED) +ret_blob(int argcount UNUSED, + type2_T *argtypes UNUSED, + type_T **decl_type UNUSED) { return &t_blob; } static type_T * -ret_func_any(int argcount UNUSED, type2_T *argtypes UNUSED) +ret_func_any(int argcount UNUSED, + type2_T *argtypes UNUSED, + type_T **decl_type UNUSED) { return &t_func_any; } static type_T * -ret_func_unknown(int argcount UNUSED, type2_T *argtypes UNUSED) +ret_func_unknown(int argcount UNUSED, + type2_T *argtypes UNUSED, + type_T **decl_type UNUSED) { return &t_func_unknown; } static type_T * -ret_channel(int argcount UNUSED, type2_T *argtypes UNUSED) +ret_channel(int argcount UNUSED, + type2_T *argtypes UNUSED, + type_T **decl_type UNUSED) { return &t_channel; } static type_T * -ret_job(int argcount UNUSED, type2_T *argtypes UNUSED) +ret_job(int argcount UNUSED, + type2_T *argtypes UNUSED, + type_T **decl_type UNUSED) { return &t_job; } static type_T * -ret_first_arg(int argcount, type2_T *argtypes) +ret_first_arg(int argcount, + type2_T *argtypes, + type_T **decl_type) { if (argcount > 0) + { + *decl_type = argtypes[0].type_decl; return argtypes[0].type_curr; + } return &t_void; } static type_T * -ret_repeat(int argcount, type2_T *argtypes) +ret_copy(int argcount, + type2_T *argtypes, + type_T **decl_type) +{ + if (argcount > 0) + { + if (argtypes[0].type_decl != NULL) + { + if (argtypes[0].type_decl->tt_type == VAR_LIST) + *decl_type = &t_list_any; + else if (argtypes[0].type_decl->tt_type == VAR_DICT) + *decl_type = &t_dict_any; + else + *decl_type = argtypes[0].type_decl; + } + if (argtypes[0].type_curr != NULL) + { + if (argtypes[0].type_curr->tt_type == VAR_LIST) + return &t_list_any; + else if (argtypes[0].type_curr->tt_type == VAR_DICT) + return &t_dict_any; + } + return argtypes[0].type_curr; + } + return &t_void; +} + static type_T * +ret_extend(int argcount, + type2_T *argtypes, + type_T **decl_type) +{ + if (argcount > 0) + { + *decl_type = argtypes[0].type_decl; + // if the second argument has a different current type then the current + // type is "any" + if (argcount > 1 && !equal_type(argtypes[0].type_curr, + argtypes[1].type_curr, 0)) + { + if (argtypes[0].type_curr->tt_type == VAR_LIST) + return &t_list_any; + if (argtypes[0].type_curr->tt_type == VAR_DICT) + return &t_dict_any; + } + return argtypes[0].type_curr; + } + return &t_void; +} + static type_T * +ret_repeat(int argcount, + type2_T *argtypes, + type_T **decl_type UNUSED) { if (argcount == 0) return &t_any; @@ -1123,7 +1231,9 @@ ret_repeat(int argcount, type2_T *argtypes) } // for map(): returns first argument but item type may differ static type_T * -ret_first_cont(int argcount, type2_T *argtypes) +ret_first_cont(int argcount, + type2_T *argtypes, + type_T **decl_type UNUSED) { if (argcount > 0) { @@ -1138,13 +1248,17 @@ ret_first_cont(int argcount, type2_T *argtypes) } // for getline() static type_T * -ret_getline(int argcount, type2_T *argtypes UNUSED) +ret_getline(int argcount, + type2_T *argtypes UNUSED, + type_T **decl_type UNUSED) { return argcount == 1 ? &t_string : &t_list_string; } // for finddir() static type_T * -ret_finddir(int argcount, type2_T *argtypes UNUSED) +ret_finddir(int argcount, + type2_T *argtypes UNUSED, + type_T **decl_type UNUSED) { if (argcount < 3) return &t_string; @@ -1157,7 +1271,9 @@ ret_finddir(int argcount, type2_T *argtypes UNUSED) * one. */ static type_T * -ret_list_or_dict_0(int argcount, type2_T *argtypes UNUSED) +ret_list_or_dict_0(int argcount, + type2_T *argtypes UNUSED, + type_T **decl_type UNUSED) { if (argcount > 0) return &t_dict_any; @@ -1169,7 +1285,9 @@ ret_list_or_dict_0(int argcount, type2_T *argtypes UNUSED) * are two. */ static type_T * -ret_list_or_dict_1(int argcount, type2_T *argtypes UNUSED) +ret_list_or_dict_1(int argcount, + type2_T *argtypes UNUSED, + type_T **decl_type UNUSED) { if (argcount > 1) return &t_dict_any; @@ -1177,7 +1295,9 @@ ret_list_or_dict_1(int argcount, type2_T *argtypes UNUSED) } static type_T * -ret_argv(int argcount, type2_T *argtypes UNUSED) +ret_argv(int argcount, + type2_T *argtypes UNUSED, + type_T **decl_type UNUSED) { // argv() returns list of strings if (argcount == 0) @@ -1188,13 +1308,20 @@ ret_argv(int argcount, type2_T *argtypes UNUSED) } static type_T * -ret_remove(int argcount, type2_T *argtypes) +ret_remove(int argcount, + type2_T *argtypes, + type_T **decl_type UNUSED) { if (argcount > 0) { if (argtypes[0].type_curr->tt_type == VAR_LIST || argtypes[0].type_curr->tt_type == VAR_DICT) + { + if (argtypes[0].type_curr->tt_type + == argtypes[0].type_decl->tt_type) + *decl_type = argtypes[0].type_decl->tt_member; return argtypes[0].type_curr->tt_member; + } if (argtypes[0].type_curr->tt_type == VAR_BLOB) return &t_number; } @@ -1202,7 +1329,9 @@ ret_remove(int argcount, type2_T *argtypes) } static type_T * -ret_getreg(int argcount, type2_T *argtypes UNUSED) +ret_getreg(int argcount, + type2_T *argtypes UNUSED, + type_T **decl_type UNUSED) { // Assume that if the third argument is passed it's non-zero if (argcount == 3) @@ -1211,7 +1340,9 @@ ret_getreg(int argcount, type2_T *argtypes UNUSED) } static type_T * -ret_maparg(int argcount, type2_T *argtypes UNUSED) +ret_maparg(int argcount, + type2_T *argtypes UNUSED, + type_T **decl_type UNUSED) { // Assume that if the fourth argument is passed it's non-zero if (argcount == 4) @@ -1230,7 +1361,8 @@ typedef struct char f_max_argc; // maximal number of arguments char f_argtype; // for method: FEARG_ values argcheck_T *f_argcheck; // list of functions to check argument types - type_T *(*f_retfunc)(int argcount, type2_T *argtypes); + type_T *(*f_retfunc)(int argcount, type2_T *argtypes, + type_T **decl_type); // return type function void (*f_func)(typval_T *args, typval_T *rvar); // implementation of function @@ -1466,7 +1598,7 @@ static funcentry_T global_functions[] = {"confirm", 1, 4, FEARG_1, arg4_string_string_number_string, ret_number, f_confirm}, {"copy", 1, 1, FEARG_1, NULL, - ret_first_arg, f_copy}, + ret_copy, f_copy}, {"cos", 1, 1, FEARG_1, arg1_float_or_nr, ret_float, FLOAT_FUNC(f_cos)}, {"cosh", 1, 1, FEARG_1, arg1_float_or_nr, @@ -1486,7 +1618,7 @@ static funcentry_T global_functions[] = #endif }, {"deepcopy", 1, 2, FEARG_1, arg12_deepcopy, - ret_first_arg, f_deepcopy}, + ret_copy, f_deepcopy}, {"delete", 1, 2, FEARG_1, arg2_string, ret_number_bool, f_delete}, {"deletebufline", 2, 3, FEARG_1, arg3_buffer_lnum_lnum, @@ -1534,7 +1666,7 @@ static funcentry_T global_functions[] = {"expandcmd", 1, 1, FEARG_1, arg1_string, ret_string, f_expandcmd}, {"extend", 2, 3, FEARG_1, arg23_extend, - ret_first_arg, f_extend}, + ret_extend, f_extend}, {"extendnew", 2, 3, FEARG_1, arg23_extendnew, ret_first_cont, f_extendnew}, {"feedkeys", 1, 2, FEARG_1, arg2_string, @@ -1735,8 +1867,6 @@ static funcentry_T global_functions[] = ret_string, f_inputsecret}, {"insert", 2, 3, FEARG_1, arg23_insert, ret_first_arg, f_insert}, - {"internal_get_nv_cmdchar", 1, 1, FEARG_1, arg1_number, - ret_number, f_internal_get_nv_cmdchar}, {"interrupt", 0, 0, 0, NULL, ret_void, f_interrupt}, {"invert", 1, 1, FEARG_1, arg1_number, @@ -1994,7 +2124,7 @@ static funcentry_T global_functions[] = {"rand", 0, 1, FEARG_1, arg1_list_number, ret_number, f_rand}, {"range", 1, 3, FEARG_1, arg3_number, - ret_list_number, f_range}, + ret_range, f_range}, {"readblob", 1, 1, FEARG_1, arg1_string, ret_blob, f_readblob}, {"readdir", 1, 3, FEARG_1, arg3_string_any_dict, @@ -2361,14 +2491,6 @@ static funcentry_T global_functions[] = ret_void, f_test_override}, {"test_refcount", 1, 1, FEARG_1, NULL, ret_number, f_test_refcount}, - {"test_scrollbar", 3, 3, FEARG_2, arg3_string_number_number, - ret_void, -#ifdef FEAT_GUI - f_test_scrollbar -#else - NULL -#endif - }, {"test_setmouse", 2, 2, 0, arg2_number, ret_void, f_test_setmouse}, {"test_settime", 1, 1, FEARG_1, arg1_number, @@ -2469,33 +2591,6 @@ static funcentry_T global_functions[] = ret_number, f_xor}, }; -#if defined(EBCDIC) || defined(PROTO) -/* - * Compare funcentry_T by function name. - */ - static int -compare_func_name(const void *s1, const void *s2) -{ - funcentry_T *p1 = (funcentry_T *)s1; - funcentry_T *p2 = (funcentry_T *)s2; - - return STRCMP(p1->f_name, p2->f_name); -} - -/* - * Sort the function table by function name. - * The sorting of the table above is ASCII dependent. - * On machines using EBCDIC we have to sort it. - */ - void -sortFunctions(void) -{ - size_t funcCnt = ARRAY_LENGTH(global_functions); - - qsort(global_functions, funcCnt, sizeof(funcentry_T), compare_func_name); -} -#endif - /* * Function given to ExpandGeneric() to obtain the list of internal * or user defined function names. @@ -2660,14 +2755,25 @@ internal_func_get_argcount(int idx, int *argcount, int *min_argcount) /* * Call the "f_retfunc" function to obtain the return type of function "idx". + * "decl_type" is set to the declared type. * "argtypes" is the list of argument types or NULL when there are no * arguments. * "argcount" may be less than the actual count when only getting the type. */ type_T * -internal_func_ret_type(int idx, int argcount, type2_T *argtypes) +internal_func_ret_type( + int idx, + int argcount, + type2_T *argtypes, + type_T **decl_type) { - return global_functions[idx].f_retfunc(argcount, argtypes); + type_T *ret; + + *decl_type = NULL; + ret = global_functions[idx].f_retfunc(argcount, argtypes, decl_type); + if (*decl_type == NULL) + *decl_type = ret; + return ret; } /* @@ -3218,7 +3324,7 @@ f_confirm(typval_T *argvars UNUSED, typval_T *rettv UNUSED) static void f_copy(typval_T *argvars, typval_T *rettv) { - item_copy(&argvars[0], rettv, FALSE, 0); + item_copy(&argvars[0], rettv, FALSE, TRUE, 0); } /* @@ -3360,7 +3466,7 @@ f_deepcopy(typval_T *argvars, typval_T *rettv) else { copyID = get_copyID(); - item_copy(&argvars[0], rettv, TRUE, noref == 0 ? copyID : 0); + item_copy(&argvars[0], rettv, TRUE, TRUE, noref == 0 ? copyID : 0); } } @@ -5103,13 +5209,7 @@ f_has(typval_T *argvars, typval_T *rettv) 0 #endif }, - {"ebcdic", -#ifdef EBCDIC - 1 -#else - 0 -#endif - }, + {"ebcdic", 0 }, {"fname_case", #ifndef CASE_INSENSITIVE_FILENAME 1 diff --git a/src/evalvars.c b/src/evalvars.c index 155742e1df..b6beb5236b 100644 --- a/src/evalvars.c +++ b/src/evalvars.c @@ -3697,24 +3697,7 @@ set_var_const( free_tv_arg = FALSE; if (vim9script && type != NULL) - { - if (type->tt_type == VAR_DICT && dest_tv->vval.v_dict != NULL) - { - if (dest_tv->vval.v_dict->dv_type != type) - { - free_type(dest_tv->vval.v_dict->dv_type); - dest_tv->vval.v_dict->dv_type = alloc_type(type); - } - } - else if (type->tt_type == VAR_LIST && dest_tv->vval.v_list != NULL) - { - if (dest_tv->vval.v_list->lv_type != type) - { - free_type(dest_tv->vval.v_list->lv_type); - dest_tv->vval.v_list->lv_type = alloc_type(type); - } - } - } + set_tv_type(dest_tv, type); // ":const var = value" locks the value // ":final var = value" locks "var" diff --git a/src/ex_cmds.c b/src/ex_cmds.c index 9d99571f72..91a2fa722d 100644 --- a/src/ex_cmds.c +++ b/src/ex_cmds.c @@ -61,23 +61,17 @@ do_ascii(exarg_T *eap UNUSED) cval = NL; // NL is stored as CR else cval = c; - if (vim_isprintc_strict(c) && (c < ' ' -#ifndef EBCDIC - || c > '~' -#endif - )) + if (vim_isprintc_strict(c) && (c < ' ' || c > '~')) { transchar_nonprint(curbuf, buf3, c); vim_snprintf(buf1, sizeof(buf1), " <%s>", (char *)buf3); } else buf1[0] = NUL; -#ifndef EBCDIC if (c >= 0x80) vim_snprintf(buf2, sizeof(buf2), " ", (char *)transchar(c & 0x7f)); else -#endif buf2[0] = NUL; #ifdef FEAT_DIGRAPHS dig = get_digraph_for_char(cval); @@ -105,9 +99,9 @@ do_ascii(exarg_T *eap UNUSED) IObuff[len++] = ' '; IObuff[len++] = '<'; if (enc_utf8 && utf_iscomposing(c) -# ifdef USE_GUI +#ifdef USE_GUI && !gui.in_use -# endif +#endif ) IObuff[len++] = ' '; // draw composing char on top of a space len += (*mb_char2bytes)(c, IObuff + len); @@ -1506,7 +1500,7 @@ do_shell( } else if (term_console) { - OUT_STR(IF_EB("\033[0 q", ESC_STR "[0 q")); // get window size + OUT_STR("\033[0 q"); // get window size if (got_int && msg_silent == 0) redraw_later_clear(); // if got_int is TRUE, redraw needed else diff --git a/src/ex_docmd.c b/src/ex_docmd.c index 06e2b4cea9..f103a0c8cb 100644 --- a/src/ex_docmd.c +++ b/src/ex_docmd.c @@ -2715,7 +2715,7 @@ ex_range_without_command(exarg_T *eap) /* * Check for an Ex command with optional tail. * If there is a match advance "pp" to the argument and return TRUE. - * If "noparen" is TRUE do not recognize the command followed by "(". + * If "noparen" is TRUE do not recognize the command followed by "(" or ".". */ static int checkforcmd_opt( @@ -2729,8 +2729,8 @@ checkforcmd_opt( for (i = 0; cmd[i] != NUL; ++i) if (((char_u *)cmd)[i] != (*pp)[i]) break; - if (i >= len && !isalpha((*pp)[i]) - && (*pp)[i] != '_' && (!noparen || (*pp)[i] != '(')) + if (i >= len && !isalpha((*pp)[i]) && (*pp)[i] != '_' + && (!noparen || ((*pp)[i] != '(' && (*pp)[i] != '.'))) { *pp = skipwhite(*pp + i); return TRUE; @@ -2752,7 +2752,7 @@ checkforcmd( } /* - * Check for an Ex command with optional tail, not followed by "(". + * Check for an Ex command with optional tail, not followed by "(" or ".". * If there is a match advance "pp" to the argument and return TRUE. */ int @@ -7366,7 +7366,8 @@ changedir_func( { char_u *pdir = NULL; int dir_differs; - int retval = FALSE; + char_u *acmd_fname; + char_u **pp; if (new_dir == NULL || allbuf_locked()) return FALSE; @@ -7423,38 +7424,32 @@ changedir_func( { emsg(_(e_command_failed)); vim_free(pdir); + return FALSE; } + + if (scope == CDSCOPE_WINDOW) + pp = &curwin->w_prevdir; + else if (scope == CDSCOPE_TABPAGE) + pp = &curtab->tp_prevdir; else + pp = &prev_dir; + vim_free(*pp); + *pp = pdir; + + post_chdir(scope); + + if (dir_differs) { - char_u *acmd_fname; - char_u **pp; - if (scope == CDSCOPE_WINDOW) - pp = &curwin->w_prevdir; + acmd_fname = (char_u *)"window"; else if (scope == CDSCOPE_TABPAGE) - pp = &curtab->tp_prevdir; + acmd_fname = (char_u *)"tabpage"; else - pp = &prev_dir; - vim_free(*pp); - *pp = pdir; - - post_chdir(scope); - - if (dir_differs) - { - if (scope == CDSCOPE_WINDOW) - acmd_fname = (char_u *)"window"; - else if (scope == CDSCOPE_TABPAGE) - acmd_fname = (char_u *)"tabpage"; - else - acmd_fname = (char_u *)"global"; - apply_autocmds(EVENT_DIRCHANGED, acmd_fname, new_dir, FALSE, - curbuf); - } - retval = TRUE; + acmd_fname = (char_u *)"global"; + apply_autocmds(EVENT_DIRCHANGED, acmd_fname, new_dir, FALSE, + curbuf); } - - return retval; + return TRUE; } /* diff --git a/src/feature.h b/src/feature.h index 227649d93d..36cd065c3e 100644 --- a/src/feature.h +++ b/src/feature.h @@ -222,20 +222,16 @@ /* * +rightleft Right-to-left editing/typing support. - * - * Disabled for EBCDIC as it requires multibyte. */ -#if defined(FEAT_BIG) && !defined(DISABLE_RIGHTLEFT) && !defined(EBCDIC) +#if defined(FEAT_BIG) && !defined(DISABLE_RIGHTLEFT) # define FEAT_RIGHTLEFT #endif /* * +arabic Arabic keymap and shaping support. * Requires FEAT_RIGHTLEFT - * - * Disabled for EBCDIC as it requires multibyte. */ -#if defined(FEAT_BIG) && !defined(DISABLE_ARABIC) && !defined(EBCDIC) +#if defined(FEAT_BIG) && !defined(DISABLE_ARABIC) # define FEAT_ARABIC #endif #ifdef FEAT_ARABIC @@ -254,16 +250,8 @@ /* * +tag_binary Can use a binary search for the tags file. - * - * Disabled for EBCDIC: - * On z/OS Unix we have the problem that /bin/sort sorts ASCII instead of - * EBCDIC. With this binary search doesn't work, as VIM expects a tag file - * sorted by character values. I'm not sure how to fix this. Should we really - * do a EBCDIC to ASCII conversion for this?? */ -#if !defined(EBCDIC) -# define FEAT_TAG_BINS -#endif +#define FEAT_TAG_BINS /* * +cscope Unix only: Cscope support. @@ -416,10 +404,8 @@ /* * +spell spell checking - * - * Disabled for EBCDIC: * Doesn't work (SIGSEGV). */ -#if (defined(FEAT_NORMAL) || defined(PROTO)) && !defined(EBCDIC) +#if (defined(FEAT_NORMAL) || defined(PROTO)) # define FEAT_SPELL #endif diff --git a/src/filepath.c b/src/filepath.c index 7018bb178d..fa4c6dc0db 100644 --- a/src/filepath.c +++ b/src/filepath.c @@ -372,12 +372,12 @@ repeat: { if (GetLongPathNameW(wfname, buf, _MAX_PATH)) { - char_u *p = utf16_to_enc(buf, NULL); + char_u *q = utf16_to_enc(buf, NULL); - if (p != NULL) + if (q != NULL) { vim_free(*bufp); // free any allocated file name - *bufp = *fnamep = p; + *bufp = *fnamep = q; } } vim_free(wfname); @@ -2208,16 +2208,7 @@ f_tempname(typval_T *argvars UNUSED, typval_T *rettv) else if (x == '9') x = 'A'; else - { -#ifdef EBCDIC - if (x == 'I') - x = 'J'; - else if (x == 'R') - x = 'S'; - else -#endif - ++x; - } + ++x; } while (x == 'I' || x == 'O'); } diff --git a/src/findfile.c b/src/findfile.c index e8b3fa656d..12e76b444a 100644 --- a/src/findfile.c +++ b/src/findfile.c @@ -489,7 +489,6 @@ vim_findfile_init( * The octet after a '**' is used as a (binary) counter. * So '**3' is transposed to '**^C' ('^C' is ASCII value 3) * or '**76' is transposed to '**N'( 'N' is ASCII value 76). - * For EBCDIC you get different character values. * If no restrict is given after '**' the default is used. * Due to this technique the path looks awful if you print it as a * string. diff --git a/src/getchar.c b/src/getchar.c index 20cecfc61e..50fc1f2185 100644 --- a/src/getchar.c +++ b/src/getchar.c @@ -571,11 +571,7 @@ AppendToRedobuffLit( // Put a string of normal characters in the redo buffer (that's // faster). start = s; - while (*s >= ' ' -#ifndef EBCDIC - && *s < DEL // EBCDIC: all chars above space are normal -#endif - && (len < 0 || s - str < len)) + while (*s >= ' ' && *s < DEL && (len < 0 || s - str < len)) ++s; // Don't put '0' or '^' as last character, just in case a CTRL-D is @@ -597,13 +593,9 @@ AppendToRedobuffLit( if (c < ' ' || c == DEL || (*s == NUL && (c == '0' || c == '^'))) add_char_buff(&redobuff, Ctrl_V); - // CTRL-V '0' must be inserted as CTRL-V 048 (EBCDIC: xf0) + // CTRL-V '0' must be inserted as CTRL-V 048 if (*s == NUL && c == '0') -#ifdef EBCDIC - add_buff(&redobuff, (char_u *)"xf0", 3L); -#else add_buff(&redobuff, (char_u *)"048", 3L); -#endif else add_char_buff(&redobuff, c); } @@ -721,11 +713,7 @@ stuffescaped(char_u *arg, int literally) // stuff K_SPECIAL to get the effect of a special key when "literally" // is TRUE. start = arg; - while ((*arg >= ' ' -#ifndef EBCDIC - && *arg < DEL // EBCDIC: chars above space are normal -#endif - ) + while ((*arg >= ' ' && *arg < DEL) || (*arg == K_SPECIAL && !literally)) ++arg; if (arg > start) @@ -1780,16 +1768,16 @@ vgetc(void) c == K_TEAROFF) { char_u name[200]; - int i; + int j; // get menu path, it ends with a - for (i = 0; (c = vgetorpeek(TRUE)) != '\r'; ) + for (j = 0; (c = vgetorpeek(TRUE)) != '\r'; ) { - name[i] = c; - if (i < 199) - ++i; + name[j] = c; + if (j < 199) + ++j; } - name[i] = NUL; + name[j] = NUL; gui_make_tearoff(name); continue; } diff --git a/src/gui.c b/src/gui.c index b5f32cb89a..804407e398 100644 --- a/src/gui.c +++ b/src/gui.c @@ -292,11 +292,11 @@ gui_do_fork(void) } // Child -#ifdef FEAT_GUI_GTK +# ifdef FEAT_GUI_GTK // Call gtk_init_check() here after fork(). See gui_init_check(). if (gui_mch_init_check() != OK) getout_preserve_modified(1); -#endif +# endif # if defined(HAVE_SETSID) || defined(HAVE_SETPGID) /* @@ -348,11 +348,11 @@ gui_do_fork(void) gui_read_child_pipe(int fd) { long bytes_read; -#define READ_BUFFER_SIZE 10 +# define READ_BUFFER_SIZE 10 char buffer[READ_BUFFER_SIZE]; bytes_read = read_eintr(fd, buffer, READ_BUFFER_SIZE - 1); -#undef READ_BUFFER_SIZE +# undef READ_BUFFER_SIZE close(fd); if (bytes_read < 0) return GUI_CHILD_IO_ERROR; @@ -459,7 +459,7 @@ gui_init_check(void) gui.scrollbar_width = gui.scrollbar_height = SB_DEFAULT_WIDTH; gui.prev_wrap = -1; -# ifdef FEAT_GUI_GTK +#ifdef FEAT_GUI_GTK CLEAR_FIELD(gui.ligatures_map); #endif @@ -1456,7 +1456,7 @@ gui_position_components(int total_width UNUSED) text_area_y += gui.menu_height; #endif -# if defined(FEAT_GUI_TABLINE) && (defined(FEAT_GUI_MSWIN) \ +#if defined(FEAT_GUI_TABLINE) && (defined(FEAT_GUI_MSWIN) \ || defined(FEAT_GUI_MOTIF)) if (gui_has_tabline()) text_area_y += gui.tabline_height; @@ -1474,7 +1474,7 @@ gui_position_components(int total_width UNUSED) } #endif -# if defined(FEAT_GUI_TABLINE) && defined(FEAT_GUI_HAIKU) +#if defined(FEAT_GUI_TABLINE) && defined(FEAT_GUI_HAIKU) gui_mch_set_tabline_pos(0, text_area_y, gui.menu_width, gui.tabline_height); if (gui_has_tabline()) @@ -1866,7 +1866,7 @@ gui_clear_block( void gui_update_cursor_later(void) { - OUT_STR(IF_EB("\033|s", ESC_STR "|s")); + OUT_STR("\033|s"); } void @@ -1993,12 +1993,7 @@ gui_write( len -= (int)(++p - s); s = p; } - else if ( -#ifdef EBCDIC - CtrlChar(s[0]) != 0 // Ctrl character -#else - s[0] < 0x20 // Ctrl character -#endif + else if (s[0] < 0x20 // Ctrl character #ifdef FEAT_SIGN_ICONS && s[0] != SIGN_BYTE # ifdef FEAT_NETBEANS_INTG @@ -2041,11 +2036,7 @@ gui_write( { p = s; while (len > 0 && ( -#ifdef EBCDIC - CtrlChar(*p) == 0 -#else *p >= 0x20 -#endif #ifdef FEAT_SIGN_ICONS || *p == SIGN_BYTE # ifdef FEAT_NETBEANS_INTG @@ -5296,10 +5287,10 @@ gui_update_screen(void) { if (has_cursormoved()) apply_autocmds(EVENT_CURSORMOVED, NULL, NULL, FALSE, curbuf); -#ifdef FEAT_PROP_POPUP +# ifdef FEAT_PROP_POPUP if (popup_visible) popup_check_cursor_pos(); -#endif +# endif # ifdef FEAT_CONCEAL if (curwin->w_p_cole > 0) { diff --git a/src/gui_motif.c b/src/gui_motif.c index 1d95651fbb..8328045bab 100644 --- a/src/gui_motif.c +++ b/src/gui_motif.c @@ -1259,10 +1259,6 @@ gui_mch_add_menu_item(vimmenu_T *menu, int idx) XmString label; vimmenu_T *parent = menu->parent; -# ifdef EBCDIC - menu->mnemonic = 0; -# endif - # if (XmVersion <= 1002) // Don't add Popup menu items when the popup menu isn't used. if (menu_is_child_of_popup(menu) && !mouse_model_popup()) diff --git a/src/gui_w32.c b/src/gui_w32.c index 11ab2346af..b5ddc5dace 100644 --- a/src/gui_w32.c +++ b/src/gui_w32.c @@ -517,7 +517,7 @@ static int s_getting_focus = FALSE; static int s_x_pending; static int s_y_pending; static UINT s_kFlags_pending; -static UINT s_wait_timer = 0; // Timer for get char from user +static UINT_PTR s_wait_timer = 0; // Timer for get char from user static int s_timed_out = FALSE; static int dead_key = 0; // 0: no dead key, 1: dead key pressed static UINT surrogate_pending_ch = 0; // 0: no surrogate pending, @@ -526,7 +526,7 @@ static UINT surrogate_pending_ch = 0; // 0: no surrogate pending, #ifdef FEAT_BEVAL_GUI // balloon-eval WM_NOTIFY_HANDLER static void Handle_WM_Notify(HWND hwnd, LPNMHDR pnmh); -static void TrackUserActivity(UINT uMsg); +static void track_user_activity(UINT uMsg); #endif /* @@ -584,7 +584,7 @@ static int blink_state = BLINK_NONE; static long_u blink_waittime = 700; static long_u blink_ontime = 400; static long_u blink_offtime = 250; -static UINT blink_timer = 0; +static UINT_PTR blink_timer = 0; int gui_mch_is_blinking(void) @@ -610,7 +610,7 @@ gui_mch_set_blinking(long wait, long on, long off) _OnBlinkTimer( HWND hwnd, UINT uMsg UNUSED, - UINT idEvent, + UINT_PTR idEvent, DWORD dwTime UNUSED) { MSG msg; @@ -629,15 +629,13 @@ _OnBlinkTimer( { gui_undraw_cursor(); blink_state = BLINK_OFF; - blink_timer = (UINT) SetTimer(NULL, 0, (UINT)blink_offtime, - (TIMERPROC)_OnBlinkTimer); + blink_timer = SetTimer(NULL, 0, (UINT)blink_offtime, _OnBlinkTimer); } else { gui_update_cursor(TRUE, FALSE); blink_state = BLINK_ON; - blink_timer = (UINT) SetTimer(NULL, 0, (UINT)blink_ontime, - (TIMERPROC)_OnBlinkTimer); + blink_timer = SetTimer(NULL, 0, (UINT)blink_ontime, _OnBlinkTimer); } gui_mch_flush(); } @@ -684,8 +682,7 @@ gui_mch_start_blink(void) // Only switch blinking on if none of the times is zero if (blink_waittime && blink_ontime && blink_offtime && gui.in_focus) { - blink_timer = (UINT)SetTimer(NULL, 0, (UINT)blink_waittime, - (TIMERPROC)_OnBlinkTimer); + blink_timer = SetTimer(NULL, 0, (UINT)blink_waittime, _OnBlinkTimer); blink_state = BLINK_ON; gui_update_cursor(TRUE, FALSE); gui_mch_flush(); @@ -700,7 +697,7 @@ gui_mch_start_blink(void) _OnTimer( HWND hwnd, UINT uMsg UNUSED, - UINT idEvent, + UINT_PTR idEvent, DWORD dwTime UNUSED) { MSG msg; @@ -1257,7 +1254,7 @@ _TextAreaWndProc( s_lParam = lParam; #ifdef FEAT_BEVAL_GUI - TrackUserActivity(uMsg); + track_user_activity(uMsg); #endif switch (uMsg) @@ -2117,8 +2114,8 @@ gui_mch_wait_for_chars(int wtime) return FAIL; // When called with "wtime" zero, just want one msec. - s_wait_timer = (UINT)SetTimer(NULL, 0, (UINT)(wtime == 0 ? 1 : wtime), - (TIMERPROC)_OnTimer); + s_wait_timer = SetTimer(NULL, 0, (UINT)(wtime == 0 ? 1 : wtime), + _OnTimer); } allow_scrollbar = TRUE; @@ -3892,8 +3889,8 @@ _OnScroll( # define BEVAL_TEXT_LEN MAXPATHL static BalloonEval *cur_beval = NULL; -static UINT_PTR BevalTimerId = 0; -static DWORD LastActivity = 0; +static UINT_PTR beval_timer_id = 0; +static DWORD last_user_activity = 0; #endif // defined(FEAT_BEVAL_GUI) @@ -8238,10 +8235,10 @@ delete_tooltip(BalloonEval *beval) } static VOID CALLBACK -BevalTimerProc( +beval_timer_proc( HWND hwnd UNUSED, UINT uMsg UNUSED, - UINT_PTR idEvent UNUSED, + UINT_PTR idEvent UNUSED, DWORD dwTime) { POINT pt; @@ -8259,8 +8256,8 @@ BevalTimerProc( if (!PtInRect(&rect, pt)) return; - if (LastActivity > 0 - && (dwTime - LastActivity) >= (DWORD)p_bdlay + if (last_user_activity > 0 + && (dwTime - last_user_activity) >= (DWORD)p_bdlay && (cur_beval->showState != ShS_PENDING || abs(cur_beval->x - pt.x) > 3 || abs(cur_beval->y - pt.y) > 3)) @@ -8271,8 +8268,6 @@ BevalTimerProc( cur_beval->x = pt.x; cur_beval->y = pt.y; - // TRACE0("BevalTimerProc: sending request"); - if (cur_beval->msgCB != NULL) (*cur_beval->msgCB)(cur_beval, 0); } @@ -8281,20 +8276,16 @@ BevalTimerProc( void gui_mch_disable_beval_area(BalloonEval *beval UNUSED) { - // TRACE0("gui_mch_disable_beval_area {{{"); - KillTimer(s_textArea, BevalTimerId); - // TRACE0("gui_mch_disable_beval_area }}}"); + KillTimer(s_textArea, beval_timer_id); } void gui_mch_enable_beval_area(BalloonEval *beval) { - // TRACE0("gui_mch_enable_beval_area |||"); if (beval == NULL) return; - // TRACE0("gui_mch_enable_beval_area {{{"); - BevalTimerId = SetTimer(s_textArea, 0, (UINT)(p_bdlay / 2), BevalTimerProc); - // TRACE0("gui_mch_enable_beval_area }}}"); + beval_timer_id = SetTimer(s_textArea, 0, (UINT)(p_bdlay / 2), + beval_timer_proc); } void @@ -8311,7 +8302,6 @@ gui_mch_post_balloon(BalloonEval *beval, char_u *mesg) return; } - // TRACE0("gui_mch_post_balloon {{{"); if (beval->showState == ShS_SHOWING) return; GetCursorPos(&pt); @@ -8324,7 +8314,6 @@ gui_mch_post_balloon(BalloonEval *beval, char_u *mesg) beval->showState = ShS_SHOWING; make_tooltip(beval, (char *)mesg, pt); } - // TRACE0("gui_mch_post_balloon }}}"); } BalloonEval * @@ -8373,14 +8362,10 @@ Handle_WM_Notify(HWND hwnd UNUSED, LPNMHDR pnmh) switch (pnmh->code) { case TTN_SHOW: - // TRACE0("TTN_SHOW {{{"); - // TRACE0("TTN_SHOW }}}"); break; case TTN_POP: // Before tooltip disappear - // TRACE0("TTN_POP {{{"); delete_tooltip(cur_beval); gui_mch_enable_beval_area(cur_beval); - // TRACE0("TTN_POP }}}"); cur_beval->showState = ShS_NEUTRAL; break; @@ -8405,11 +8390,11 @@ Handle_WM_Notify(HWND hwnd UNUSED, LPNMHDR pnmh) } static void -TrackUserActivity(UINT uMsg) +track_user_activity(UINT uMsg) { if ((uMsg >= WM_MOUSEFIRST && uMsg <= WM_MOUSELAST) || (uMsg >= WM_KEYFIRST && uMsg <= WM_KEYLAST)) - LastActivity = GetTickCount(); + last_user_activity = GetTickCount(); } void diff --git a/src/hardcopy.c b/src/hardcopy.c index a41f330317..e2e5211624 100644 --- a/src/hardcopy.c +++ b/src/hardcopy.c @@ -1419,9 +1419,6 @@ prt_write_file(char_u *buffer) static void prt_write_file_len(char_u *buffer, int bytes) { -#ifdef EBCDIC - ebcdic2ascii(buffer, bytes); -#endif prt_write_file_raw_len(buffer, bytes); } @@ -1626,8 +1623,6 @@ prt_flush_buffer(void) prt_write_string("ul\n"); } // Draw the text - // Note: we write text out raw - EBCDIC conversion is handled in the - // PostScript world via the font encoding vector. if (prt_out_mbyte) prt_write_string("<"); else @@ -3119,7 +3114,7 @@ mch_print_end(prt_settings_T *psettings) // Write CTRL-D to close serial communication link if used. // NOTHING MUST BE WRITTEN AFTER THIS! - prt_write_file((char_u *)IF_EB("\004", "\067")); + prt_write_file((char_u *)"\004"); if (!prt_file_error && psettings->outfile == NULL && !got_int && !psettings->user_abort) @@ -3379,26 +3374,21 @@ mch_print_text_out(char_u *textp, int len UNUSED) { // Convert non-printing characters to either their escape or octal // sequence, ensures PS sent over a serial line does not interfere - // with the comms protocol. Note: For EBCDIC we need to write out - // the escape sequences as ASCII codes! - // Note 2: Char codes < 32 are identical in EBCDIC and ASCII AFAIK! - ga_append(&prt_ps_buffer, IF_EB('\\', 0134)); + // with the comms protocol. + ga_append(&prt_ps_buffer, '\\'); switch (ch) { - case BS: ga_append(&prt_ps_buffer, IF_EB('b', 0142)); break; - case TAB: ga_append(&prt_ps_buffer, IF_EB('t', 0164)); break; - case NL: ga_append(&prt_ps_buffer, IF_EB('n', 0156)); break; - case FF: ga_append(&prt_ps_buffer, IF_EB('f', 0146)); break; - case CAR: ga_append(&prt_ps_buffer, IF_EB('r', 0162)); break; - case '(': ga_append(&prt_ps_buffer, IF_EB('(', 0050)); break; - case ')': ga_append(&prt_ps_buffer, IF_EB(')', 0051)); break; - case '\\': ga_append(&prt_ps_buffer, IF_EB('\\', 0134)); break; + case BS: ga_append(&prt_ps_buffer, 'b'); break; + case TAB: ga_append(&prt_ps_buffer, 't'); break; + case NL: ga_append(&prt_ps_buffer, 'n'); break; + case FF: ga_append(&prt_ps_buffer, 'f'); break; + case CAR: ga_append(&prt_ps_buffer, 'r'); break; + case '(': ga_append(&prt_ps_buffer, '('); break; + case ')': ga_append(&prt_ps_buffer, ')'); break; + case '\\': ga_append(&prt_ps_buffer, '\\'); break; default: sprintf((char *)ch_buff, "%03o", (unsigned int)ch); -#ifdef EBCDIC - ebcdic2ascii(ch_buff, 3); -#endif ga_append(&prt_ps_buffer, ch_buff[0]); ga_append(&prt_ps_buffer, ch_buff[1]); ga_append(&prt_ps_buffer, ch_buff[2]); diff --git a/src/hashtab.c b/src/hashtab.c index 482d83005e..a7470ecdc1 100644 --- a/src/hashtab.c +++ b/src/hashtab.c @@ -189,13 +189,13 @@ hash_lookup(hashtab_T *ht, char_u *key, hash_T hash) void hash_debug_results(void) { -#ifdef HT_DEBUG +# ifdef HT_DEBUG fprintf(stderr, "\r\n\r\n\r\n\r\n"); fprintf(stderr, "Number of hashtable lookups: %ld\r\n", hash_count_lookup); fprintf(stderr, "Number of perturb loops: %ld\r\n", hash_count_perturb); fprintf(stderr, "Percentage of perturb loops: %ld%%\r\n", hash_count_perturb * 100 / hash_count_lookup); -#endif +# endif } #endif diff --git a/src/help.c b/src/help.c index 16fbafc061..661d5b5c3c 100644 --- a/src/help.c +++ b/src/help.c @@ -481,11 +481,7 @@ find_help_tags( d += 5; if (*s < ' ') { -#ifdef EBCDIC - *d++ = CtrlChar(*s); -#else *d++ = *s + '@'; -#endif if (d[-1] == '\\') *d++ = '\\'; // double a backslash } @@ -651,12 +647,7 @@ prepare_help_buffer(void) // Accept all ASCII chars for keywords, except ' ', '*', '"', '|', and // latin1 word characters (for translated help files). // Only set it when needed, buf_init_chartab() is some work. - p = -#ifdef EBCDIC - (char_u *)"65-255,^*,^|,^\""; -#else - (char_u *)"!-~,^*,^|,^\",192-255"; -#endif + p = (char_u *)"!-~,^*,^|,^\",192-255"; if (STRCMP(curbuf->b_p_isk, p) != 0) { set_string_option_direct((char_u *)"isk", -1, p, OPT_FREE|OPT_LOCAL, 0); diff --git a/src/indent.c b/src/indent.c index 8e9b0d148c..b62308d2a4 100644 --- a/src/indent.c +++ b/src/indent.c @@ -2173,7 +2173,7 @@ f_indent(typval_T *argvars, typval_T *rettv) void f_lispindent(typval_T *argvars UNUSED, typval_T *rettv) { -#ifdef FEAT_LISP +# ifdef FEAT_LISP pos_T pos; linenr_T lnum; @@ -2191,7 +2191,7 @@ f_lispindent(typval_T *argvars UNUSED, typval_T *rettv) else if (in_vim9script()) semsg(_(e_invalid_line_number_nr), lnum); else -#endif +# endif rettv->vval.v_number = -1; } #endif diff --git a/src/infplist.xml b/src/infplist.xml deleted file mode 100644 index c58cf74802..0000000000 --- a/src/infplist.xml +++ /dev/null @@ -1,74 +0,0 @@ - - - - - - - CFBundleIdentifier - org.vim.Vim-APP_VER - CFBundleInfoDictionaryVersion - 6.0 - - CFBundleExecutable - APP_EXE - CFBundleName - APP_NAME - CFBundlePackageType - APPL - CFBundleVersion - APP_VER - CFBundleShortVersionString - APP_VER - CFBundleSignature - VIM! - - CFBundleDevelopmentRegion - English - CSResourcesFileMapped - - CFBundleIconFile - app.icns - - CFBundleDocumentTypes - - - CFBundleTypeExtensions - - txt - text - - CFBundleTypeMIMETypes - - text/plain - - CFBundleTypeIconFile - doc-txt.icns - CFBundleTypeName - Text File - CFBundleTypeRole - Editor - - - CFBundleTypeExtensions - - * - - CFBundleTypeMIMETypes - - text/* - - CFBundleTypeIconFile - doc.icns - CFBundleTypeName - File - CFBundleTypeOSTypes - - **** - - CFBundleTypeRole - Editor - - - - - diff --git a/src/keymap.h b/src/keymap.h index 9efc966032..7d6743d1d3 100644 --- a/src/keymap.h +++ b/src/keymap.h @@ -150,9 +150,7 @@ */ enum key_extra { - KE_NAME = 3 // name of this terminal entry - - , KE_S_UP = 4 // shift-up + KE_S_UP = 4 // shift-up , KE_S_DOWN = 5 // shift-down , KE_S_F1 = 6 // shifted function keys @@ -253,7 +251,8 @@ enum key_extra , KE_CSI = 81 // CSI typed directly , KE_SNR = 82 // , KE_PLUG = 83 // - , KE_CMDWIN = 84 // open command-line window from Command-line Mode + , KE_CMDWIN = 84 // open command-line window from Command-line + // Mode , KE_C_LEFT = 85 // control-left , KE_C_RIGHT = 86 // control-right diff --git a/src/list.c b/src/list.c index ff7d5ab9ba..3a6ea97668 100644 --- a/src/list.c +++ b/src/list.c @@ -1015,7 +1015,7 @@ flatten_common(typval_T *argvars, typval_T *rettv, int make_copy) if (make_copy) { - l = list_copy(l, TRUE, get_copyID()); + l = list_copy(l, TRUE, TRUE, get_copyID()); rettv->vval.v_list = l; if (l == NULL) return; @@ -1102,7 +1102,7 @@ list_concat(list_T *l1, list_T *l2, typval_T *tv) if (l1 == NULL) l = list_alloc(); else - l = list_copy(l1, FALSE, 0); + l = list_copy(l1, FALSE, TRUE, 0); if (l == NULL) return FAIL; tv->v_type = VAR_LIST; @@ -1200,11 +1200,11 @@ list_slice_or_index( /* * Make a copy of list "orig". Shallow if "deep" is FALSE. * The refcount of the new list is set to 1. - * See item_copy() for "copyID". + * See item_copy() for "top" and "copyID". * Returns NULL when out of memory. */ list_T * -list_copy(list_T *orig, int deep, int copyID) +list_copy(list_T *orig, int deep, int top, int copyID) { list_T *copy; listitem_T *item; @@ -1216,7 +1216,11 @@ list_copy(list_T *orig, int deep, int copyID) copy = list_alloc(); if (copy != NULL) { - copy->lv_type = alloc_type(orig->lv_type); + if (orig->lv_type == NULL) + copy->lv_type = NULL; + else + copy->lv_type = alloc_type(top || deep + ? &t_list_any: orig->lv_type); if (copyID != 0) { // Do this before adding the items, because one of the items may @@ -1233,7 +1237,8 @@ list_copy(list_T *orig, int deep, int copyID) break; if (deep) { - if (item_copy(&item->li_tv, &ni->li_tv, deep, copyID) == FAIL) + if (item_copy(&item->li_tv, &ni->li_tv, + deep, FALSE, copyID) == FAIL) { vim_free(ni); break; @@ -2701,11 +2706,11 @@ list_extend_func( } l2 = argvars[1].vval.v_list; if ((is_new || !value_check_lock(l1->lv_lock, arg_errmsg, TRUE)) - && l2 != NULL) + && l2 != NULL) { if (is_new) { - l1 = list_copy(l1, FALSE, get_copyID()); + l1 = list_copy(l1, FALSE, TRUE, get_copyID()); if (l1 == NULL) return; } diff --git a/src/macros.h b/src/macros.h index 31b52194d4..763db4f568 100644 --- a/src/macros.h +++ b/src/macros.h @@ -77,13 +77,8 @@ #endif // toupper() and tolower() for ASCII only and ignore the current locale. -#ifdef EBCDIC -# define TOUPPER_ASC(c) (islower(c) ? toupper(c) : (c)) -# define TOLOWER_ASC(c) (isupper(c) ? tolower(c) : (c)) -#else -# define TOUPPER_ASC(c) (((c) < 'a' || (c) > 'z') ? (c) : (c) - ('a' - 'A')) -# define TOLOWER_ASC(c) (((c) < 'A' || (c) > 'Z') ? (c) : (c) + ('a' - 'A')) -#endif +#define TOUPPER_ASC(c) (((c) < 'a' || (c) > 'z') ? (c) : (c) - ('a' - 'A')) +#define TOLOWER_ASC(c) (((c) < 'A' || (c) > 'Z') ? (c) : (c) + ('a' - 'A')) /* * MB_ISLOWER() and MB_ISUPPER() are to be used on multi-byte characters. But @@ -102,17 +97,10 @@ // Like isalpha() but reject non-ASCII characters. Can't be used with a // special key (negative value). -#ifdef EBCDIC -# define ASCII_ISALPHA(c) isalpha(c) -# define ASCII_ISALNUM(c) isalnum(c) -# define ASCII_ISLOWER(c) islower(c) -# define ASCII_ISUPPER(c) isupper(c) -#else -# define ASCII_ISLOWER(c) ((unsigned)(c) - 'a' < 26) -# define ASCII_ISUPPER(c) ((unsigned)(c) - 'A' < 26) -# define ASCII_ISALPHA(c) (ASCII_ISUPPER(c) || ASCII_ISLOWER(c)) -# define ASCII_ISALNUM(c) (ASCII_ISALPHA(c) || VIM_ISDIGIT(c)) -#endif +#define ASCII_ISLOWER(c) ((unsigned)(c) - 'a' < 26) +#define ASCII_ISUPPER(c) ((unsigned)(c) - 'A' < 26) +#define ASCII_ISALPHA(c) (ASCII_ISUPPER(c) || ASCII_ISLOWER(c)) +#define ASCII_ISALNUM(c) (ASCII_ISALPHA(c) || VIM_ISDIGIT(c)) // Returns empty string if it is NULL. #define EMPTY_IF_NULL(x) ((x) ? (x) : (char_u *)"") diff --git a/src/map.c b/src/map.c index 6974113659..a565481bb7 100644 --- a/src/map.c +++ b/src/map.c @@ -2018,7 +2018,7 @@ put_escstr(FILE *fd, char_u *strstart, int what) { if (what == 2) { - if (fprintf(fd, IF_EB("\\\026\n", "\\" CTRL_V_STR "\n")) < 0) + if (fprintf(fd, "\\\026\n") < 0) return FAIL; } else diff --git a/src/mark.c b/src/mark.c index 4765b79c17..11f20a61a9 100644 --- a/src/mark.c +++ b/src/mark.c @@ -310,12 +310,9 @@ getmark_buf_fnum( // to crash. if (c < 0) return posp; -#ifndef EBCDIC if (c > '~') // check for islower()/isupper() ; - else -#endif - if (c == '\'' || c == '`') // previous context mark + else if (c == '\'' || c == '`') // previous context mark { pos_copy = curwin->w_pcmark; // need to make a copy because posp = &pos_copy; // w_pcmark may be changed soon diff --git a/src/menu.c b/src/menu.c index b3596b5084..62faec48ff 100644 --- a/src/menu.c +++ b/src/menu.c @@ -678,7 +678,7 @@ add_menu_path( } } -# if defined(FEAT_GUI_MSWIN) & defined(FEAT_TEAROFF) +# if defined(FEAT_GUI_MSWIN) && defined(FEAT_TEAROFF) // When adding a new submenu, may add a tearoff item if ( addtearoff && *next_name diff --git a/src/misc2.c b/src/misc2.c index c1f7e65468..92437027f9 100644 --- a/src/misc2.c +++ b/src/misc2.c @@ -1208,11 +1208,7 @@ get_special_key_name(int c, int modifiers) } if (table_idx < 0 && !vim_isprintc(c) && c < ' ') { -#ifdef EBCDIC - c = CtrlChar(c); -#else c += '@'; -#endif modifiers |= MOD_MASK_CTRL; } } @@ -1567,16 +1563,7 @@ extract_modifiers(int key, int *modp, int simplify, int *did_simplify) key = TOUPPER_ASC(key); if (simplify && (modifiers & MOD_MASK_CTRL) -#ifdef EBCDIC - // TODO: EBCDIC Better use: - // && (Ctrl_chr(key) || key == '?') - // ??? - && strchr("?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_", key) - != NULL -#else - && ((key >= '?' && key <= '_') || ASCII_ISALPHA(key)) -#endif - ) + && ((key >= '?' && key <= '_') || ASCII_ISALPHA(key))) { key = Ctrl_chr(key); modifiers &= ~MOD_MASK_CTRL; @@ -1923,7 +1910,6 @@ vim_chdirfile(char_u *fname, char *trigger_autocmd) { char_u old_dir[MAXPATHL]; char_u new_dir[MAXPATHL]; - int res; if (mch_dirname(old_dir, MAXPATHL) != OK) *old_dir = NUL; @@ -1933,16 +1919,15 @@ vim_chdirfile(char_u *fname, char *trigger_autocmd) if (pathcmp((char *)old_dir, (char *)new_dir, -1) == 0) // nothing to do - res = OK; - else - { - res = mch_chdir((char *)new_dir) == 0 ? OK : FAIL; + return OK; - if (res == OK && trigger_autocmd != NULL) - apply_autocmds(EVENT_DIRCHANGED, (char_u *)trigger_autocmd, + if (mch_chdir((char *)new_dir) != 0) + return FAIL; + + if (trigger_autocmd != NULL) + apply_autocmds(EVENT_DIRCHANGED, (char_u *)trigger_autocmd, new_dir, FALSE, curbuf); - } - return res; + return OK; } #endif diff --git a/src/normal.c b/src/normal.c index 338ee6862a..b73534f2d9 100644 --- a/src/normal.c +++ b/src/normal.c @@ -1,6 +1,6 @@ /* vi:set ts=8 sts=4 sw=4 noet: * - * VIM - Vi IMproved by Bram Moolenaar + * VIM - Vi IMproved by Bram Moolenaar et al. * * Do ":help uganda" in Vim to read copying and usage conditions. * Do ":help credits" in Vim to see a list of people who contributed. @@ -127,320 +127,13 @@ static void nv_drop(cmdarg_T *cap); #endif static void nv_cursorhold(cmdarg_T *cap); -#ifdef FEAT_GUI -#define NV_VER_SCROLLBAR nv_ver_scrollbar -#define NV_HOR_SCROLLBAR nv_hor_scrollbar -#else -#define NV_VER_SCROLLBAR nv_error -#define NV_HOR_SCROLLBAR nv_error -#endif - -#ifdef FEAT_GUI_TABLINE -#define NV_TABLINE nv_tabline -#define NV_TABMENU nv_tabmenu -#else -#define NV_TABLINE nv_error -#define NV_TABMENU nv_error -#endif - -#ifdef FEAT_NETBEANS_INTG -#define NV_NBCMD nv_nbcmd -#else -#define NV_NBCMD nv_error -#endif - -#ifdef FEAT_DND -#define NV_DROP nv_drop -#else -#define NV_DROP nv_error -#endif - -/* - * Function to be called for a Normal or Visual mode command. - * The argument is a cmdarg_T. - */ -typedef void (*nv_func_T)(cmdarg_T *cap); - -// Values for cmd_flags. -#define NV_NCH 0x01 // may need to get a second char -#define NV_NCH_NOP (0x02|NV_NCH) // get second char when no operator pending -#define NV_NCH_ALW (0x04|NV_NCH) // always get a second char -#define NV_LANG 0x08 // second char needs language adjustment - -#define NV_SS 0x10 // may start selection -#define NV_SSS 0x20 // may start selection with shift modifier -#define NV_STS 0x40 // may stop selection without shift modif. -#define NV_RL 0x80 // 'rightleft' modifies command -#define NV_KEEPREG 0x100 // don't clear regname -#define NV_NCW 0x200 // not allowed in command-line window - -/* - * Generally speaking, every Normal mode command should either clear any - * pending operator (with *clearop*()), or set the motion type variable - * oap->motion_type. - * - * When a cursor motion command is made, it is marked as being a character or - * line oriented motion. Then, if an operator is in effect, the operation - * becomes character or line oriented accordingly. - */ - -/* - * This table contains one entry for every Normal or Visual mode command. - * The order doesn't matter, this will be sorted by the create_nvcmdidx.vim - * script to generate the nv_cmd_idx[] lookup table. - * It is faster when all keys from zero to '~' are present. - * - * After changing the "nv_cmds" table: - * 1. Build Vim with "make" - * 2. Run "make nvcmdidxs" to re-generate the nv_cmdidxs.h file. - * 3. Build Vim with "make" to use the newly generated index table. - */ -static const struct nv_cmd -{ - int cmd_char; // (first) command character - nv_func_T cmd_func; // function for this command - short_u cmd_flags; // NV_ flags - short cmd_arg; // value for ca.arg -} nv_cmds[] = -{ - {NUL, nv_error, 0, 0}, - {Ctrl_A, nv_addsub, 0, 0}, - {Ctrl_B, nv_page, NV_STS, BACKWARD}, - {Ctrl_C, nv_esc, 0, TRUE}, - {Ctrl_D, nv_halfpage, 0, 0}, - {Ctrl_E, nv_scroll_line, 0, TRUE}, - {Ctrl_F, nv_page, NV_STS, FORWARD}, - {Ctrl_G, nv_ctrlg, 0, 0}, - {Ctrl_H, nv_ctrlh, 0, 0}, - {Ctrl_I, nv_pcmark, 0, 0}, - {NL, nv_down, 0, FALSE}, - {Ctrl_K, nv_error, 0, 0}, - {Ctrl_L, nv_clear, 0, 0}, - {CAR, nv_down, 0, TRUE}, - {Ctrl_N, nv_down, NV_STS, FALSE}, - {Ctrl_O, nv_ctrlo, 0, 0}, - {Ctrl_P, nv_up, NV_STS, FALSE}, - {Ctrl_Q, nv_visual, 0, FALSE}, - {Ctrl_R, nv_redo_or_register, 0, 0}, - {Ctrl_S, nv_ignore, 0, 0}, - {Ctrl_T, nv_tagpop, NV_NCW, 0}, - {Ctrl_U, nv_halfpage, 0, 0}, - {Ctrl_V, nv_visual, 0, FALSE}, - {Ctrl_W, nv_window, 0, 0}, - {Ctrl_X, nv_addsub, 0, 0}, - {Ctrl_Y, nv_scroll_line, 0, FALSE}, - {Ctrl_Z, nv_suspend, 0, 0}, - {ESC, nv_esc, 0, FALSE}, - {Ctrl_BSL, nv_normal, NV_NCH_ALW, 0}, - {Ctrl_RSB, nv_ident, NV_NCW, 0}, - {Ctrl_HAT, nv_hat, NV_NCW, 0}, - {Ctrl__, nv_error, 0, 0}, - {' ', nv_right, 0, 0}, - {'!', nv_operator, 0, 0}, - {'"', nv_regname, NV_NCH_NOP|NV_KEEPREG, 0}, - {'#', nv_ident, 0, 0}, - {'$', nv_dollar, 0, 0}, - {'%', nv_percent, 0, 0}, - {'&', nv_optrans, 0, 0}, - {'\'', nv_gomark, NV_NCH_ALW, TRUE}, - {'(', nv_brace, 0, BACKWARD}, - {')', nv_brace, 0, FORWARD}, - {'*', nv_ident, 0, 0}, - {'+', nv_down, 0, TRUE}, - {',', nv_csearch, 0, TRUE}, - {'-', nv_up, 0, TRUE}, - {'.', nv_dot, NV_KEEPREG, 0}, - {'/', nv_search, 0, FALSE}, - {'0', nv_beginline, 0, 0}, - {'1', nv_ignore, 0, 0}, - {'2', nv_ignore, 0, 0}, - {'3', nv_ignore, 0, 0}, - {'4', nv_ignore, 0, 0}, - {'5', nv_ignore, 0, 0}, - {'6', nv_ignore, 0, 0}, - {'7', nv_ignore, 0, 0}, - {'8', nv_ignore, 0, 0}, - {'9', nv_ignore, 0, 0}, - {':', nv_colon, 0, 0}, - {';', nv_csearch, 0, FALSE}, - {'<', nv_operator, NV_RL, 0}, - {'=', nv_operator, 0, 0}, - {'>', nv_operator, NV_RL, 0}, - {'?', nv_search, 0, FALSE}, - {'@', nv_at, NV_NCH_NOP, FALSE}, - {'A', nv_edit, 0, 0}, - {'B', nv_bck_word, 0, 1}, - {'C', nv_abbrev, NV_KEEPREG, 0}, - {'D', nv_abbrev, NV_KEEPREG, 0}, - {'E', nv_wordcmd, 0, TRUE}, - {'F', nv_csearch, NV_NCH_ALW|NV_LANG, BACKWARD}, - {'G', nv_goto, 0, TRUE}, - {'H', nv_scroll, 0, 0}, - {'I', nv_edit, 0, 0}, - {'J', nv_join, 0, 0}, - {'K', nv_ident, 0, 0}, - {'L', nv_scroll, 0, 0}, - {'M', nv_scroll, 0, 0}, - {'N', nv_next, 0, SEARCH_REV}, - {'O', nv_open, 0, 0}, - {'P', nv_put, 0, 0}, - {'Q', nv_exmode, NV_NCW, 0}, - {'R', nv_Replace, 0, FALSE}, - {'S', nv_subst, NV_KEEPREG, 0}, - {'T', nv_csearch, NV_NCH_ALW|NV_LANG, BACKWARD}, - {'U', nv_Undo, 0, 0}, - {'V', nv_visual, 0, FALSE}, - {'W', nv_wordcmd, 0, TRUE}, - {'X', nv_abbrev, NV_KEEPREG, 0}, - {'Y', nv_abbrev, NV_KEEPREG, 0}, - {'Z', nv_Zet, NV_NCH_NOP|NV_NCW, 0}, - {'[', nv_brackets, NV_NCH_ALW, BACKWARD}, - {'\\', nv_error, 0, 0}, - {']', nv_brackets, NV_NCH_ALW, FORWARD}, - {'^', nv_beginline, 0, BL_WHITE | BL_FIX}, - {'_', nv_lineop, 0, 0}, - {'`', nv_gomark, NV_NCH_ALW, FALSE}, - {'a', nv_edit, NV_NCH, 0}, - {'b', nv_bck_word, 0, 0}, - {'c', nv_operator, 0, 0}, - {'d', nv_operator, 0, 0}, - {'e', nv_wordcmd, 0, FALSE}, - {'f', nv_csearch, NV_NCH_ALW|NV_LANG, FORWARD}, - {'g', nv_g_cmd, NV_NCH_ALW, FALSE}, - {'h', nv_left, NV_RL, 0}, - {'i', nv_edit, NV_NCH, 0}, - {'j', nv_down, 0, FALSE}, - {'k', nv_up, 0, FALSE}, - {'l', nv_right, NV_RL, 0}, - {'m', nv_mark, NV_NCH_NOP, 0}, - {'n', nv_next, 0, 0}, - {'o', nv_open, 0, 0}, - {'p', nv_put, 0, 0}, - {'q', nv_record, NV_NCH, 0}, - {'r', nv_replace, NV_NCH_NOP|NV_LANG, 0}, - {'s', nv_subst, NV_KEEPREG, 0}, - {'t', nv_csearch, NV_NCH_ALW|NV_LANG, FORWARD}, - {'u', nv_undo, 0, 0}, - {'v', nv_visual, 0, FALSE}, - {'w', nv_wordcmd, 0, FALSE}, - {'x', nv_abbrev, NV_KEEPREG, 0}, - {'y', nv_operator, 0, 0}, - {'z', nv_zet, NV_NCH_ALW, 0}, - {'{', nv_findpar, 0, BACKWARD}, - {'|', nv_pipe, 0, 0}, - {'}', nv_findpar, 0, FORWARD}, - {'~', nv_tilde, 0, 0}, - - // pound sign - {POUND, nv_ident, 0, 0}, - {K_MOUSEUP, nv_mousescroll, 0, MSCR_UP}, - {K_MOUSEDOWN, nv_mousescroll, 0, MSCR_DOWN}, - {K_MOUSELEFT, nv_mousescroll, 0, MSCR_LEFT}, - {K_MOUSERIGHT, nv_mousescroll, 0, MSCR_RIGHT}, - {K_LEFTMOUSE, nv_mouse, 0, 0}, - {K_LEFTMOUSE_NM, nv_mouse, 0, 0}, - {K_LEFTDRAG, nv_mouse, 0, 0}, - {K_LEFTRELEASE, nv_mouse, 0, 0}, - {K_LEFTRELEASE_NM, nv_mouse, 0, 0}, - {K_MOUSEMOVE, nv_mouse, 0, 0}, - {K_MIDDLEMOUSE, nv_mouse, 0, 0}, - {K_MIDDLEDRAG, nv_mouse, 0, 0}, - {K_MIDDLERELEASE, nv_mouse, 0, 0}, - {K_RIGHTMOUSE, nv_mouse, 0, 0}, - {K_RIGHTDRAG, nv_mouse, 0, 0}, - {K_RIGHTRELEASE, nv_mouse, 0, 0}, - {K_X1MOUSE, nv_mouse, 0, 0}, - {K_X1DRAG, nv_mouse, 0, 0}, - {K_X1RELEASE, nv_mouse, 0, 0}, - {K_X2MOUSE, nv_mouse, 0, 0}, - {K_X2DRAG, nv_mouse, 0, 0}, - {K_X2RELEASE, nv_mouse, 0, 0}, - {K_IGNORE, nv_ignore, NV_KEEPREG, 0}, - {K_NOP, nv_nop, 0, 0}, - {K_INS, nv_edit, 0, 0}, - {K_KINS, nv_edit, 0, 0}, - {K_BS, nv_ctrlh, 0, 0}, - {K_UP, nv_up, NV_SSS|NV_STS, FALSE}, - {K_S_UP, nv_page, NV_SS, BACKWARD}, - {K_DOWN, nv_down, NV_SSS|NV_STS, FALSE}, - {K_S_DOWN, nv_page, NV_SS, FORWARD}, - {K_LEFT, nv_left, NV_SSS|NV_STS|NV_RL, 0}, - {K_S_LEFT, nv_bck_word, NV_SS|NV_RL, 0}, - {K_C_LEFT, nv_bck_word, NV_SSS|NV_RL|NV_STS, 1}, - {K_RIGHT, nv_right, NV_SSS|NV_STS|NV_RL, 0}, - {K_S_RIGHT, nv_wordcmd, NV_SS|NV_RL, FALSE}, - {K_C_RIGHT, nv_wordcmd, NV_SSS|NV_RL|NV_STS, TRUE}, - {K_PAGEUP, nv_page, NV_SSS|NV_STS, BACKWARD}, - {K_KPAGEUP, nv_page, NV_SSS|NV_STS, BACKWARD}, - {K_PAGEDOWN, nv_page, NV_SSS|NV_STS, FORWARD}, - {K_KPAGEDOWN, nv_page, NV_SSS|NV_STS, FORWARD}, - {K_END, nv_end, NV_SSS|NV_STS, FALSE}, - {K_KEND, nv_end, NV_SSS|NV_STS, FALSE}, - {K_S_END, nv_end, NV_SS, FALSE}, - {K_C_END, nv_end, NV_SSS|NV_STS, TRUE}, - {K_HOME, nv_home, NV_SSS|NV_STS, 0}, - {K_KHOME, nv_home, NV_SSS|NV_STS, 0}, - {K_S_HOME, nv_home, NV_SS, 0}, - {K_C_HOME, nv_goto, NV_SSS|NV_STS, FALSE}, - {K_DEL, nv_abbrev, 0, 0}, - {K_KDEL, nv_abbrev, 0, 0}, - {K_UNDO, nv_kundo, 0, 0}, - {K_HELP, nv_help, NV_NCW, 0}, - {K_F1, nv_help, NV_NCW, 0}, - {K_XF1, nv_help, NV_NCW, 0}, - {K_SELECT, nv_select, 0, 0}, - {K_VER_SCROLLBAR, NV_VER_SCROLLBAR, 0, 0}, - {K_HOR_SCROLLBAR, NV_HOR_SCROLLBAR, 0, 0}, - {K_TABLINE, NV_TABLINE, 0, 0}, - {K_TABMENU, NV_TABMENU, 0, 0}, - {K_F21, NV_NBCMD, NV_NCH_ALW, 0}, - {K_DROP, NV_DROP, NV_STS, 0}, - {K_CURSORHOLD, nv_cursorhold, NV_KEEPREG, 0}, - {K_PS, nv_edit, 0, 0}, - {K_COMMAND, nv_colon, 0, 0}, - {K_SCRIPT_COMMAND, nv_colon, 0, 0}, -}; - -// Number of commands in nv_cmds[]. -#define NV_CMDS_SIZE ARRAY_LENGTH(nv_cmds) +// Declare nv_cmds[]. +#define DO_DECLARE_NVCMD +#include "nv_cmds.h" // Include the lookuptable generated by create_nvcmdidx.vim. #include "nv_cmdidxs.h" -#if defined(FEAT_EVAL) || defined(PROTO) -/* - * Return the command character for the given command index. This function is - * used to auto-generate nv_cmd_idx[]. - */ - void -f_internal_get_nv_cmdchar(typval_T *argvars, typval_T *rettv) -{ - int idx; - int cmd_char; - - rettv->v_type = VAR_NUMBER; - rettv->vval.v_number = -1; - - if (check_for_number_arg(argvars, 0) == FAIL) - return; - - idx = tv_get_number(&argvars[0]); - if (idx < 0 || idx >= (int)NV_CMDS_SIZE) - return; - - cmd_char = nv_cmds[idx].cmd_char; - - // We use the absolute value of the character. Special keys have a - // negative value, but are sorted on their absolute value. - if (cmd_char < 0) - cmd_char = -cmd_char; - - rettv->vval.v_number = cmd_char; - - return; -} -#endif - /* * Search for a command in the commands table. * Returns -1 for invalid command. @@ -4745,13 +4438,7 @@ nv_brackets(cmdarg_T *cap) // fwd bwd fwd bwd fwd bwd // identifier "]i" "[i" "]I" "[I" "]^I" "[^I" // define "]d" "[d" "]D" "[D" "]^D" "[^D" - if (vim_strchr((char_u *) -# ifdef EBCDIC - "iI\005dD\067", -# else - "iI\011dD\004", -# endif - cap->nchar) != NULL) + if (vim_strchr((char_u *)"iI\011dD\004", cap->nchar) != NULL) { char_u *ptr; int len; @@ -6244,12 +5931,6 @@ nv_g_cmd(cmdarg_T *cap) case 'h': case 'H': case Ctrl_H: -# ifdef EBCDIC - // EBCDIC: 'v'-'h' != '^v'-'^h' - if (cap->nchar == Ctrl_H) - cap->cmdchar = Ctrl_V; - else -# endif cap->cmdchar = cap->nchar + ('v' - 'h'); cap->arg = TRUE; nv_visual(cap); diff --git a/src/nv_cmds.h b/src/nv_cmds.h new file mode 100644 index 0000000000..d4b2c95c84 --- /dev/null +++ b/src/nv_cmds.h @@ -0,0 +1,310 @@ +/* vi:set ts=8 sts=4 sw=4 noet: + * + * VIM - Vi IMproved by Bram Moolenaar et al. + * + * Do ":help uganda" in Vim to read copying and usage conditions. + * Do ":help credits" in Vim to see a list of people who contributed. + * See README.txt for an overview of the Vim source code. + */ +/* + * This file defines the Normal mode commands. + */ + +/* + * When adding a Normal/Visual mode command: + * 1. Add an entry in the table `nv_cmds[]` below. + * 2. Run "make nvcmdidxs" to re-generate nv_cmdidxs.h. + * 3. Add an entry in the index for Normal/Visual commands at + * ":help normal-index" and ":help visual-index" . + * 4. Add documentation in ../doc/xxx.txt. Add a tag for both the short and + * long name of the command. + */ + +#ifdef DO_DECLARE_NVCMD + +/* + * Used when building Vim. + */ +# define NVCMD(a, b, c, d) {a, b, c, d} + +#ifdef FEAT_GUI +#define NV_VER_SCROLLBAR nv_ver_scrollbar +#define NV_HOR_SCROLLBAR nv_hor_scrollbar +#else +#define NV_VER_SCROLLBAR nv_error +#define NV_HOR_SCROLLBAR nv_error +#endif + +#ifdef FEAT_GUI_TABLINE +#define NV_TABLINE nv_tabline +#define NV_TABMENU nv_tabmenu +#else +#define NV_TABLINE nv_error +#define NV_TABMENU nv_error +#endif + +#ifdef FEAT_NETBEANS_INTG +#define NV_NBCMD nv_nbcmd +#else +#define NV_NBCMD nv_error +#endif + +#ifdef FEAT_DND +#define NV_DROP nv_drop +#else +#define NV_DROP nv_error +#endif + +/* + * Function to be called for a Normal or Visual mode command. + * The argument is a cmdarg_T. + */ +typedef void (*nv_func_T)(cmdarg_T *cap); + +// Values for cmd_flags. +#define NV_NCH 0x01 // may need to get a second char +#define NV_NCH_NOP (0x02|NV_NCH) // get second char when no operator pending +#define NV_NCH_ALW (0x04|NV_NCH) // always get a second char +#define NV_LANG 0x08 // second char needs language adjustment + +#define NV_SS 0x10 // may start selection +#define NV_SSS 0x20 // may start selection with shift modifier +#define NV_STS 0x40 // may stop selection without shift modif. +#define NV_RL 0x80 // 'rightleft' modifies command +#define NV_KEEPREG 0x100 // don't clear regname +#define NV_NCW 0x200 // not allowed in command-line window + +/* + * Generally speaking, every Normal mode command should either clear any + * pending operator (with *clearop*()), or set the motion type variable + * oap->motion_type. + * + * When a cursor motion command is made, it is marked as being a character or + * line oriented motion. Then, if an operator is in effect, the operation + * becomes character or line oriented accordingly. + */ + +/* + * This table contains one entry for every Normal or Visual mode command. + * The order doesn't matter, this will be sorted by the create_nvcmdidx.vim + * script to generate the nv_cmd_idx[] lookup table. + * It is faster when all keys from zero to '~' are present. + */ +static const struct nv_cmd +{ + int cmd_char; // (first) command character + nv_func_T cmd_func; // function for this command + short_u cmd_flags; // NV_ flags + short cmd_arg; // value for ca.arg +} nv_cmds[] = + +#else // DO_DECLARE_NVCMD + +/* + * Used when creating nv_cmdidxs.h. + */ +# define NVCMD(a, b, c, d) a +static const int nv_cmds[] = + +#endif // DO_DECLARE_NVCMD +{ + NVCMD(NUL, nv_error, 0, 0), + NVCMD(Ctrl_A, nv_addsub, 0, 0), + NVCMD(Ctrl_B, nv_page, NV_STS, BACKWARD), + NVCMD(Ctrl_C, nv_esc, 0, TRUE), + NVCMD(Ctrl_D, nv_halfpage, 0, 0), + NVCMD(Ctrl_E, nv_scroll_line, 0, TRUE), + NVCMD(Ctrl_F, nv_page, NV_STS, FORWARD), + NVCMD(Ctrl_G, nv_ctrlg, 0, 0), + NVCMD(Ctrl_H, nv_ctrlh, 0, 0), + NVCMD(Ctrl_I, nv_pcmark, 0, 0), + NVCMD(NL, nv_down, 0, FALSE), + NVCMD(Ctrl_K, nv_error, 0, 0), + NVCMD(Ctrl_L, nv_clear, 0, 0), + NVCMD(CAR, nv_down, 0, TRUE), + NVCMD(Ctrl_N, nv_down, NV_STS, FALSE), + NVCMD(Ctrl_O, nv_ctrlo, 0, 0), + NVCMD(Ctrl_P, nv_up, NV_STS, FALSE), + NVCMD(Ctrl_Q, nv_visual, 0, FALSE), + NVCMD(Ctrl_R, nv_redo_or_register, 0, 0), + NVCMD(Ctrl_S, nv_ignore, 0, 0), + NVCMD(Ctrl_T, nv_tagpop, NV_NCW, 0), + NVCMD(Ctrl_U, nv_halfpage, 0, 0), + NVCMD(Ctrl_V, nv_visual, 0, FALSE), + NVCMD(Ctrl_W, nv_window, 0, 0), + NVCMD(Ctrl_X, nv_addsub, 0, 0), + NVCMD(Ctrl_Y, nv_scroll_line, 0, FALSE), + NVCMD(Ctrl_Z, nv_suspend, 0, 0), + NVCMD(ESC, nv_esc, 0, FALSE), + NVCMD(Ctrl_BSL, nv_normal, NV_NCH_ALW, 0), + NVCMD(Ctrl_RSB, nv_ident, NV_NCW, 0), + NVCMD(Ctrl_HAT, nv_hat, NV_NCW, 0), + NVCMD(Ctrl__, nv_error, 0, 0), + NVCMD(' ', nv_right, 0, 0), + NVCMD('!', nv_operator, 0, 0), + NVCMD('"', nv_regname, NV_NCH_NOP|NV_KEEPREG, 0), + NVCMD('#', nv_ident, 0, 0), + NVCMD('$', nv_dollar, 0, 0), + NVCMD('%', nv_percent, 0, 0), + NVCMD('&', nv_optrans, 0, 0), + NVCMD('\'', nv_gomark, NV_NCH_ALW, TRUE), + NVCMD('(', nv_brace, 0, BACKWARD), + NVCMD(')', nv_brace, 0, FORWARD), + NVCMD('*', nv_ident, 0, 0), + NVCMD('+', nv_down, 0, TRUE), + NVCMD(',', nv_csearch, 0, TRUE), + NVCMD('-', nv_up, 0, TRUE), + NVCMD('.', nv_dot, NV_KEEPREG, 0), + NVCMD('/', nv_search, 0, FALSE), + NVCMD('0', nv_beginline, 0, 0), + NVCMD('1', nv_ignore, 0, 0), + NVCMD('2', nv_ignore, 0, 0), + NVCMD('3', nv_ignore, 0, 0), + NVCMD('4', nv_ignore, 0, 0), + NVCMD('5', nv_ignore, 0, 0), + NVCMD('6', nv_ignore, 0, 0), + NVCMD('7', nv_ignore, 0, 0), + NVCMD('8', nv_ignore, 0, 0), + NVCMD('9', nv_ignore, 0, 0), + NVCMD(':', nv_colon, 0, 0), + NVCMD(';', nv_csearch, 0, FALSE), + NVCMD('<', nv_operator, NV_RL, 0), + NVCMD('=', nv_operator, 0, 0), + NVCMD('>', nv_operator, NV_RL, 0), + NVCMD('?', nv_search, 0, FALSE), + NVCMD('@', nv_at, NV_NCH_NOP, FALSE), + NVCMD('A', nv_edit, 0, 0), + NVCMD('B', nv_bck_word, 0, 1), + NVCMD('C', nv_abbrev, NV_KEEPREG, 0), + NVCMD('D', nv_abbrev, NV_KEEPREG, 0), + NVCMD('E', nv_wordcmd, 0, TRUE), + NVCMD('F', nv_csearch, NV_NCH_ALW|NV_LANG, BACKWARD), + NVCMD('G', nv_goto, 0, TRUE), + NVCMD('H', nv_scroll, 0, 0), + NVCMD('I', nv_edit, 0, 0), + NVCMD('J', nv_join, 0, 0), + NVCMD('K', nv_ident, 0, 0), + NVCMD('L', nv_scroll, 0, 0), + NVCMD('M', nv_scroll, 0, 0), + NVCMD('N', nv_next, 0, SEARCH_REV), + NVCMD('O', nv_open, 0, 0), + NVCMD('P', nv_put, 0, 0), + NVCMD('Q', nv_exmode, NV_NCW, 0), + NVCMD('R', nv_Replace, 0, FALSE), + NVCMD('S', nv_subst, NV_KEEPREG, 0), + NVCMD('T', nv_csearch, NV_NCH_ALW|NV_LANG, BACKWARD), + NVCMD('U', nv_Undo, 0, 0), + NVCMD('V', nv_visual, 0, FALSE), + NVCMD('W', nv_wordcmd, 0, TRUE), + NVCMD('X', nv_abbrev, NV_KEEPREG, 0), + NVCMD('Y', nv_abbrev, NV_KEEPREG, 0), + NVCMD('Z', nv_Zet, NV_NCH_NOP|NV_NCW, 0), + NVCMD('[', nv_brackets, NV_NCH_ALW, BACKWARD), + NVCMD('\\', nv_error, 0, 0), + NVCMD(']', nv_brackets, NV_NCH_ALW, FORWARD), + NVCMD('^', nv_beginline, 0, BL_WHITE | BL_FIX), + NVCMD('_', nv_lineop, 0, 0), + NVCMD('`', nv_gomark, NV_NCH_ALW, FALSE), + NVCMD('a', nv_edit, NV_NCH, 0), + NVCMD('b', nv_bck_word, 0, 0), + NVCMD('c', nv_operator, 0, 0), + NVCMD('d', nv_operator, 0, 0), + NVCMD('e', nv_wordcmd, 0, FALSE), + NVCMD('f', nv_csearch, NV_NCH_ALW|NV_LANG, FORWARD), + NVCMD('g', nv_g_cmd, NV_NCH_ALW, FALSE), + NVCMD('h', nv_left, NV_RL, 0), + NVCMD('i', nv_edit, NV_NCH, 0), + NVCMD('j', nv_down, 0, FALSE), + NVCMD('k', nv_up, 0, FALSE), + NVCMD('l', nv_right, NV_RL, 0), + NVCMD('m', nv_mark, NV_NCH_NOP, 0), + NVCMD('n', nv_next, 0, 0), + NVCMD('o', nv_open, 0, 0), + NVCMD('p', nv_put, 0, 0), + NVCMD('q', nv_record, NV_NCH, 0), + NVCMD('r', nv_replace, NV_NCH_NOP|NV_LANG, 0), + NVCMD('s', nv_subst, NV_KEEPREG, 0), + NVCMD('t', nv_csearch, NV_NCH_ALW|NV_LANG, FORWARD), + NVCMD('u', nv_undo, 0, 0), + NVCMD('v', nv_visual, 0, FALSE), + NVCMD('w', nv_wordcmd, 0, FALSE), + NVCMD('x', nv_abbrev, NV_KEEPREG, 0), + NVCMD('y', nv_operator, 0, 0), + NVCMD('z', nv_zet, NV_NCH_ALW, 0), + NVCMD('{', nv_findpar, 0, BACKWARD), + NVCMD('|', nv_pipe, 0, 0), + NVCMD('}', nv_findpar, 0, FORWARD), + NVCMD('~', nv_tilde, 0, 0), + + // pound sign + NVCMD(POUND, nv_ident, 0, 0), + NVCMD(K_MOUSEUP, nv_mousescroll, 0, MSCR_UP), + NVCMD(K_MOUSEDOWN, nv_mousescroll, 0, MSCR_DOWN), + NVCMD(K_MOUSELEFT, nv_mousescroll, 0, MSCR_LEFT), + NVCMD(K_MOUSERIGHT, nv_mousescroll, 0, MSCR_RIGHT), + NVCMD(K_LEFTMOUSE, nv_mouse, 0, 0), + NVCMD(K_LEFTMOUSE_NM, nv_mouse, 0, 0), + NVCMD(K_LEFTDRAG, nv_mouse, 0, 0), + NVCMD(K_LEFTRELEASE, nv_mouse, 0, 0), + NVCMD(K_LEFTRELEASE_NM, nv_mouse, 0, 0), + NVCMD(K_MOUSEMOVE, nv_mouse, 0, 0), + NVCMD(K_MIDDLEMOUSE, nv_mouse, 0, 0), + NVCMD(K_MIDDLEDRAG, nv_mouse, 0, 0), + NVCMD(K_MIDDLERELEASE, nv_mouse, 0, 0), + NVCMD(K_RIGHTMOUSE, nv_mouse, 0, 0), + NVCMD(K_RIGHTDRAG, nv_mouse, 0, 0), + NVCMD(K_RIGHTRELEASE, nv_mouse, 0, 0), + NVCMD(K_X1MOUSE, nv_mouse, 0, 0), + NVCMD(K_X1DRAG, nv_mouse, 0, 0), + NVCMD(K_X1RELEASE, nv_mouse, 0, 0), + NVCMD(K_X2MOUSE, nv_mouse, 0, 0), + NVCMD(K_X2DRAG, nv_mouse, 0, 0), + NVCMD(K_X2RELEASE, nv_mouse, 0, 0), + NVCMD(K_IGNORE, nv_ignore, NV_KEEPREG, 0), + NVCMD(K_NOP, nv_nop, 0, 0), + NVCMD(K_INS, nv_edit, 0, 0), + NVCMD(K_KINS, nv_edit, 0, 0), + NVCMD(K_BS, nv_ctrlh, 0, 0), + NVCMD(K_UP, nv_up, NV_SSS|NV_STS, FALSE), + NVCMD(K_S_UP, nv_page, NV_SS, BACKWARD), + NVCMD(K_DOWN, nv_down, NV_SSS|NV_STS, FALSE), + NVCMD(K_S_DOWN, nv_page, NV_SS, FORWARD), + NVCMD(K_LEFT, nv_left, NV_SSS|NV_STS|NV_RL, 0), + NVCMD(K_S_LEFT, nv_bck_word, NV_SS|NV_RL, 0), + NVCMD(K_C_LEFT, nv_bck_word, NV_SSS|NV_RL|NV_STS, 1), + NVCMD(K_RIGHT, nv_right, NV_SSS|NV_STS|NV_RL, 0), + NVCMD(K_S_RIGHT, nv_wordcmd, NV_SS|NV_RL, FALSE), + NVCMD(K_C_RIGHT, nv_wordcmd, NV_SSS|NV_RL|NV_STS, TRUE), + NVCMD(K_PAGEUP, nv_page, NV_SSS|NV_STS, BACKWARD), + NVCMD(K_KPAGEUP, nv_page, NV_SSS|NV_STS, BACKWARD), + NVCMD(K_PAGEDOWN, nv_page, NV_SSS|NV_STS, FORWARD), + NVCMD(K_KPAGEDOWN, nv_page, NV_SSS|NV_STS, FORWARD), + NVCMD(K_END, nv_end, NV_SSS|NV_STS, FALSE), + NVCMD(K_KEND, nv_end, NV_SSS|NV_STS, FALSE), + NVCMD(K_S_END, nv_end, NV_SS, FALSE), + NVCMD(K_C_END, nv_end, NV_SSS|NV_STS, TRUE), + NVCMD(K_HOME, nv_home, NV_SSS|NV_STS, 0), + NVCMD(K_KHOME, nv_home, NV_SSS|NV_STS, 0), + NVCMD(K_S_HOME, nv_home, NV_SS, 0), + NVCMD(K_C_HOME, nv_goto, NV_SSS|NV_STS, FALSE), + NVCMD(K_DEL, nv_abbrev, 0, 0), + NVCMD(K_KDEL, nv_abbrev, 0, 0), + NVCMD(K_UNDO, nv_kundo, 0, 0), + NVCMD(K_HELP, nv_help, NV_NCW, 0), + NVCMD(K_F1, nv_help, NV_NCW, 0), + NVCMD(K_XF1, nv_help, NV_NCW, 0), + NVCMD(K_SELECT, nv_select, 0, 0), + NVCMD(K_VER_SCROLLBAR, NV_VER_SCROLLBAR, 0, 0), + NVCMD(K_HOR_SCROLLBAR, NV_HOR_SCROLLBAR, 0, 0), + NVCMD(K_TABLINE, NV_TABLINE, 0, 0), + NVCMD(K_TABMENU, NV_TABMENU, 0, 0), + NVCMD(K_F21, NV_NBCMD, NV_NCH_ALW, 0), + NVCMD(K_DROP, NV_DROP, NV_STS, 0), + NVCMD(K_CURSORHOLD, nv_cursorhold, NV_KEEPREG, 0), + NVCMD(K_PS, nv_edit, 0, 0), + NVCMD(K_COMMAND, nv_colon, 0, 0), + NVCMD(K_SCRIPT_COMMAND, nv_colon, 0, 0), +}; + +// Number of commands in nv_cmds[]. +#define NV_CMDS_SIZE ARRAY_LENGTH(nv_cmds) diff --git a/src/ops.c b/src/ops.c index 77e45de768..8c463033c1 100644 --- a/src/ops.c +++ b/src/ops.c @@ -2674,11 +2674,7 @@ do_addsub( firstdigit = 'a'; } else -#ifdef EBCDIC - firstdigit = EBCDIC_CHAR_ADD(firstdigit, -Prenum1); -#else firstdigit -= Prenum1; -#endif } else { @@ -2690,11 +2686,7 @@ do_addsub( firstdigit = 'z'; } else -#ifdef EBCDIC - firstdigit = EBCDIC_CHAR_ADD(firstdigit, Prenum1); -#else firstdigit += Prenum1; -#endif } curwin->w_cursor.col = col; if (!did_change) @@ -3675,9 +3667,9 @@ do_pending_operator(cmdarg_T *cap, int old_col, int gui_yank) curbuf->b_visual.vi_mode = VIsual_mode; restore_visual_mode(); curbuf->b_visual.vi_curswant = curwin->w_curswant; -# ifdef FEAT_EVAL +#ifdef FEAT_EVAL curbuf->b_visual_mode_eval = VIsual_mode; -# endif +#endif } // In Select mode, a linewise selection is operated upon like a diff --git a/src/option.c b/src/option.c index 70af2e2de5..9390be64e8 100644 --- a/src/option.c +++ b/src/option.c @@ -269,7 +269,7 @@ set_init_1(int clean_arg) } #endif -#if defined(FEAT_POSTSCRIPT) && (defined(MSWIN) || defined(VMS) || defined(EBCDIC) || defined(MAC) || defined(hpux)) +#if defined(FEAT_POSTSCRIPT) && (defined(MSWIN) || defined(VMS) || defined(MAC) || defined(hpux)) // Set print encoding on platforms that don't default to latin1 set_string_default("penc", # if defined(MSWIN) @@ -278,14 +278,10 @@ set_init_1(int clean_arg) # ifdef VMS (char_u *)"dec-mcs" # else -# ifdef EBCDIC - (char_u *)"ebcdic-uk" -# else -# ifdef MAC +# ifdef MAC (char_u *)"mac-roman" -# else // HPUX +# else // HPUX (char_u *)"hp-roman8" -# endif # endif # endif # endif @@ -314,6 +310,17 @@ set_init_1(int clean_arg) */ set_options_default(0); +#ifdef UNIX + // Force restricted-mode on for "nologin" or "false" $SHELL + p = get_isolated_shell_name(); + if (p != NULL) + { + if (fnamecmp(p, "nologin") == 0 || fnamecmp(p, "false") == 0) + restricted = TRUE; + vim_free(p); + } +#endif + #ifdef CLEAN_RUNTIMEPATH if (clean_arg) { @@ -4028,11 +4035,7 @@ findoption(char_u *arg) /* * Check for name starting with an illegal character. */ -#ifdef EBCDIC - if (!islower(arg[0])) -#else if (arg[0] < 'a' || arg[0] > 'z') -#endif return -1; is_term_opt = (arg[0] == 't' && arg[1] == '_'); diff --git a/src/option.h b/src/option.h index 11ef9505a6..b4d25cf53e 100644 --- a/src/option.h +++ b/src/option.h @@ -89,11 +89,7 @@ typedef enum { # ifdef VMS # define DFLT_EFM "%A%p^,%C%%CC-%t-%m,%Cat line number %l in file %f,%f|%l| %m" # else // Unix, probably -# ifdef EBCDIC -#define DFLT_EFM "%*[^ ] %*[^ ] %f:%l%*[ ]%m,%*[^\"]\"%f\"%*\\D%l: %m,\"%f\"%*\\D%l: %m,%f:%l:%c:%m,%f(%l):%m,%f:%l:%m,\"%f\"\\, line %l%*\\D%c%*[^ ] %m,%D%*\\a[%*\\d]: Entering directory %*[`']%f',%X%*\\a[%*\\d]: Leaving directory %*[`']%f',%DMaking %*\\a in %f,%f|%l| %m" -# else #define DFLT_EFM "%*[^\"]\"%f\"%*\\D%l: %m,\"%f\"%*\\D%l: %m,%-G%f:%l: (Each undeclared identifier is reported only once,%-G%f:%l: for each function it appears in.),%-GIn file included from %f:%l:%c:,%-GIn file included from %f:%l:%c\\,,%-GIn file included from %f:%l:%c,%-GIn file included from %f:%l,%-G%*[ ]from %f:%l:%c,%-G%*[ ]from %f:%l:,%-G%*[ ]from %f:%l\\,,%-G%*[ ]from %f:%l,%f:%l:%c:%m,%f(%l):%m,%f:%l:%m,\"%f\"\\, line %l%*\\D%c%*[^ ] %m,%D%*\\a[%*\\d]: Entering directory %*[`']%f',%X%*\\a[%*\\d]: Leaving directory %*[`']%f',%D%*\\a: Entering directory %*[`']%f',%X%*\\a: Leaving directory %*[`']%f',%DMaking %*\\a in %f,%f|%l| %m" -# endif # endif # endif # endif diff --git a/src/optiondefs.h b/src/optiondefs.h index b2a02d760a..a5f7aeb5a6 100644 --- a/src/optiondefs.h +++ b/src/optiondefs.h @@ -1522,11 +1522,7 @@ static struct vimoption options[] = # ifdef VMS (char_u *)"@,48-57,/,.,-,_,+,,,#,$,%,<,>,[,],:,;,~", # else // UNIX et al. -# ifdef EBCDIC - (char_u *)"@,240-249,/,.,-,_,+,,,#,$,%,~,=", -# else (char_u *)"@,48-57,/,.,-,_,+,,,#,$,%,~,=", -# endif # endif # endif #endif @@ -1537,34 +1533,17 @@ static struct vimoption options[] = #if defined(MSWIN) (char_u *)"@,48-57,_,128-167,224-235", #else -# ifdef EBCDIC - // TODO: EBCDIC Check this! @ == isalpha() - (char_u *)"@,240-249,_,66-73,81-89,98-105," - "112-120,128,140-142,156,158,172," - "174,186,191,203-207,219-225,235-239," - "251-254", -# else (char_u *)"@,48-57,_,192-255", -# endif #endif (char_u *)0L} SCTX_INIT}, {"iskeyword", "isk", P_STRING|P_ALLOCED|P_VIM|P_COMMA|P_NODUP, (char_u *)&p_isk, PV_ISK, { -#ifdef EBCDIC - (char_u *)"@,240-249,_", - // TODO: EBCDIC Check this! @ == isalpha() - (char_u *)"@,240-249,_,66-73,81-89,98-105," - "112-120,128,140-142,156,158,172," - "174,186,191,203-207,219-225,235-239," - "251-254", -#else (char_u *)"@,48-57,_", -# if defined(MSWIN) +#if defined(MSWIN) (char_u *)"@,48-57,_,128-167,224-235" -# else +#else ISK_LATIN1 -# endif #endif } SCTX_INIT}, {"isprint", "isp", P_STRING|P_VI_DEF|P_RALL|P_COMMA|P_NODUP, @@ -1573,12 +1552,7 @@ static struct vimoption options[] = #if defined(MSWIN) || defined(VMS) (char_u *)"@,~-255", #else -# ifdef EBCDIC - // all chars above 63 are printable - (char_u *)"63-255", -# else ISP_LATIN1, -# endif #endif (char_u *)0L} SCTX_INIT}, {"joinspaces", "js", P_BOOL|P_VI_DEF|P_VIM, diff --git a/src/os_mac.rsr.hqx b/src/os_mac.rsr.hqx deleted file mode 100644 index 04e99723fc..0000000000 --- a/src/os_mac.rsr.hqx +++ /dev/null @@ -1,659 +0,0 @@ -(This file must be converted with BinHex 4.0) - -:$'GeD9pYB@-ZFR0bB`"58e*$8P0&4!%!!!!!!!!!HUUk%`!!!!!"!!!!GJX!!(8 -,!!!%R`!!$Ed,Eh0IGc-bC'aX,Q-#!!!!9%9B9%0A588"!2rr#hCTE9"33bjbFh* -MFLe%EfYeE@9ZG'9PEL"%BA4PER8!!(*cFQ058d9%!3lrrrrr!!!!!!!!!!!!!!! -!!!!!!!!!X3N1a!!!!!!!!%'-!!!!!!!!!!!4!!!!$Ed,Eh0IGc-bCAKP,Q-#!!! -!9%9B9%0A588"!2rrrrm!!!!!$NN!!!!!$hi!!%)!!!!!!!!!!!!!!,#`81D`X&$ -Q!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'6Y!!%!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!3!!!!!#a@58dK!!!!!8C548B!!J!!!)!!!3#"!!)!JNP$6L-!!J!!!))!!3# -$!!)!!!!!!!G"8&"-!!!!!!!!"e4&@&3!!3!!!!!(+LSU+J!#!!!!!J!!!2rrrrr -rrrrrrrm!!!!!!!$m$!`-$!`-$!`2m!!!!!!!m-$!`-E!`-$!cpm!!!!!!2`-$!` --$!`-$!r0m!!!!!$`aX$'aXCJB-$2$0m!!!!!r!B-"JB'"JB-$rrrm!!!!2$!B'$ -'aXE'`-$!c[!!!!$m$'aX"JB'"J`-$!l`!!!!m-$'`-E'aXE!`-$1m!!!!2`-$!` --$!`-$!`-$[!!!!$``-$!`-$!`-$!`-l`!!!!r!`-$!`-$!`-$!`1m!!!!2$!`-$ -!`-$!`-$!c[!!!!$m$!`-$!`-$!`-$!l`!!!!m-$!`-$!`-$!`-$1m!!!!2`-CJB --$!`-$!`-$[!!!!$`aXCJ`-$!`-$!`-l`!!!!r!`-$!`-$!`-$!`1m!!!!2$!`-$ -!`-$!`-$!c[!!!!$m$!`-$!`-$!`-$!l`!!!!m-$!`-$!`-$!`-$1m!!!!2`-$!` --$!`-$!`-$[!!!!$``-$!`-$!`-$!`-l`!!!!r!`-$!`-$!`-$!`1m!!!!2$!CXE -!`-$!`-$!c[!!!!$m"JCX$!`-$!`-$!l`!!!!m-$!`-$!`-$!`-$1m!!!!2`-$!` --$!`-$!`-$[!!!!$``-$!`-$!`-$!`-l`!!!!r!`-$!`-$!`-$!`1m!!!!2lZlZl -ZlZlZlZlZl[!!!!$rrrrrrrrrrrrrrrr`!!!!!J$rrrrrrrrrrrrrrrrrrrr`m!! -!!!!!!!!!!!!!!!!!m2!!!!!!!!!!!!!!!!!!!2$`!!!!!!!!!!!!!!!!!!$`m!! -!!!!!!!!2rrr`!!!!m2!!CJB!!!!!mJ)#$`!!!2$`"JCJ!!!!$b!J)#$`!!$`m!! -!!!!!!2)2mJ)#$`!!m2!!!!!!!!$rrGmJ)#$`!2$`!!!!!!rr![rrrrm#$rrrm!! -!!!!!$b![m#!J)#$fEr!!!!!!$Ghb!J)#!J)#pQr`!!!!!!!0hb!J)#!J)2C[m!! -!!!!!!0hr!J)#!J,fEr!!CJB!!!!0hIrrrrmJpQr`"JCJ!!!!!0hGhGhGrrC[m!! -!!!!!!!!!hGhGhGhIrr!!!!!!!!!!!!!!!!hGhI$`!!!!!!!!!!!!!!!!!!$`m!! -!!!!!!!!!!!!'CQCJm2!!!!!!!!!!!!!!"QCQB2$`!!!!!!!'!!!!!!CQCQ$`m!! -!!!!!!!!!!!!'CQCJm2!'B'!!B'B!CJB!"QCQB2$`"Q"J!'!'!'"JB!CQCQ$`m!! -!"JB!"J"JB'!'CQCJm2!!!!B'!!B!B'"J"QCQB2$`"Q!'"J!'!'"JB!CQCQ$`m!C -J!'!!"Q"JB'!'CQCJm2!!!!!!!!!!!!!!"QCQB2$`!!!!!!!!!!!!!!!!!!$`rrr -rrrrrrrrrrrrrrrrrm!!!!J!!$rrrrrrrrrrrrrrrrr!!!2!!!!!!!!!!!!!!!!! -2!!m!c-c-c-c-c-c-c-c-c[!2$-lZlZlZlZlZlZlZl-l`$`cZrrrrrrrrrrrrrq$ -1m!m-lrL2Mrrrrrrrrrr`c[!2$1q2L2rrrrrrrrrrm-l`$`c[rrrrrrrrrrrrrr$ -1m!m-lrrrrrrrrrrrrrr`c[!2$1rrrrrrrrrrrrrrm-l`$`c[rrrrrrrrrrrrrr$ -1m!m-lrL2Mrrrrrrrrrr`c[!2$1q2L2rrrrrrrrrrm-l`$`c[rrrrrrrrrrrrrr$ -1m!m-lrrrrrrrrrriL)M`c[!2$1rrrrrirrrrq)L)m-l`$`c[rrrrrrrrrrL)L2$ -1m!m-liq2q2MiMiriL)M`c[!2$1rrMrMiq2Miq)L)m-l`$`c[riq2q2Miq2L)L2$ -1m!m-liq)rrMiq2MiL)M`c[!2$1rrrrrrrrrrrrrrm-l`$`cZrrrrrrrrrrrrr`$ -1m!m-`!!!!!!!!!!!!!!-c[!2$-c-c-c-c-c-c-c-c1l`!2lZlZlZlZlZlZlZlZl -[!!!2c1c1c1c1c1c1c1c1m!!!rmlXlXlXlXlXlXlXl[m!$rc1c1c1c1c1c1c1c1c -1m2rmlXlXlXlXlXlXlXlXl[rrrrrrrrrrrrrrrrrrrrrr$rrrrrrrrrrrrrrrrrr -rm!!!!J!!!!$rrrrrrrrrrrrrm!!!!!!!r!`-$!`-$!`-$2m!!!!!!2$!`-$!`-$ -!`-$qm!!!!!$m$!`-$!`-$!`-rHm!!!!!m-$!`-$!`-$!`2cHm!!!!2`-$!`-$!` --$!crrrm!rrrrrrrrrrrrrm$!`-$2$mc-c-c-c-c-c-cm$!`-$rcGhGhGhGhGhGh -Glm$!`-rmhZlZlZlZlZlZlHm-$!`2r0lrrrrrrrq)Mmh[d-$!crcHMiq2L2MrL)r -0lmd-$!rmhSq2Miq2MiL2cHrF`-$2r0k)riq2Miq)Mmh[c3`-$rcHrrrrrrrrrrr -0lpc!`-rmh[rrrrrrrrrrcHr0$!`2r0liMirrrrrrrmh[h-$!crcHMiMrrrrrrrr -0lmd-$!rmh[rrrrrrrrrrcHrF`-$2r0lrrrrrrrrrrmh[c3`-$rcHq)q2rrrrrrr -0lpc!`-rmhSq)rrrrrrrrcHr0$!`2r0lrrrrrrrrrrmh[h-$!crcHc-c-c-c-c-c -0lmd-$!rmhGhGhGhGhGhGhHrF`-$2$qlZlZlZlZlZlZlpc3`-$`$rrrrrrrrrrrr -rh0$!`-m!!!$pcFh0cFh0cFd-$!`2!!!!r0cFh0cFh0c3`-$!c`!!!2`-$!`-$!` --$!`-$!m!!!$``-$!`-$!`-$!`-$2!!!!rrrrrrrrrrrrrrrrr`!!"!!!!!!!rrr -rrrrrrrrrrrrrrrrrrrrrrrm!!!!!!!!!!!!!!!$rpIAepIAepIAepIAepIAepIA -errm!!!!!!!!!!!!!!2repIAepIAepHcepIAepIAepIArq[m!!!!!!!!!!!!!rrA -epIAepIAepIAepIAepIAepIrhq[m!!!!!!!!!!!$rpIAXpIAel2AXpHcXpHcepIA -errAhq[m!!!!!!!!!!2repHcepIAXpHcel2AXpHcepIArrrrrrrm!!!!!!!!!rrA -epHcel2Ael2AXpHcel2AepIAepIAlr`!!!!!!!!$rpIAel2AXpIAXpHcel2AXpIA -epIAepI[r!!!!!!!!!2repIAel2AepHcel2AXpHcepIAepIAeqrm!!!!!!!!!rrA -epIAepIAepIAepIAepIAepIAepIAlr`!!!!!!!!$rpIAepIAepIAepIAepIAepIA -epIAepI[r!!!!!!!!!2repIAepIAepIAepIAepIAepIAepIAeqrm!!!!!!!!!rrA -epIAepIAepIAepIAepIAepIAepIAlr`!!!!!!!!$rpIAepIAepIAepIAepIAepIA -epIAepI[r!!!!!!!!!2repIAepIAepIAepIAepIAepIAepIAeqrm!!!!!!!!!rrA -epHcXpHcepIAepIAepIAepIAepIAlr`!!!!!!!!$rpIAXpHcXpIAepIAepIAepIA -epIAepI[r!!!!!!!!!2repIAepIAepIAepIAepIAepIAepIAeqrm!!!!!!!!!rrA -epIAepIAepIAepIAepIAepIAepIAlr`!!!!!!!!$rpIAepIAepIAepIAepIAepIA -epIAepI[r!!!!!!!!!2repIAepIAepIAepIAepIAepIAepIAeqrm!!!!!!!!!rrA -epIAepIAepIAepIAepIAepIAepIAlr`!!!!!!!!$rpIAepIAepIAepIAepIAepIA -epIAepI[r!!!!!!!!!2repIAepIAepIAepIAepIAepIAepIAeqrm!!!!!!!!!rrA -epHcXpHcepIAepIAepIAepIAepIAlr`!!!!!!!!$rpIAXpHcXpIAepIAepIAepIA -epIAepI[r!!!!!!!!!2repIAepIAepIAepIAepIAepIAepIAeqrm!!!!!!!!!rrA -epIAepIAepIAepIAepIAepIAepIAlr`!!!!!!!!$rpIAepIAepIAepIAepIAepIA -epIAepI[r!!!!!!!!!2repIAepIAepIAepIAepIAepIAepIAeqrm!!!!!!!!!rr[ -lqr[lqr[lqr[lqr[lqr[lqr[lqr[lr`!!!!!!!!$rrrrrrrrrrrrrrrrrrrrrrrr -rrrrrrrrr!!!!!!!%!2rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrm!rdK -)5%K)5%K)5%K)5%K)5%K)5%K)5%K)5%K)5%K)r`$r5%K)5%K)5%K)5%K)5%K)5%K -)5%K)5%K)5%K)5%Mr!2p)5%K)5%K)5%K)5%K)5%K)5%K)5%K)5%K)5%K)52m!rdK -)5%K)5%K)5%K)5%K)5%Mrrrrrrrp)5%K)5%K)r`$r5%K)l1a)l%K)5%K)5%K)r`J -)#!J)#2p)5%K)5%Mr!2p)51a)l1a)5%K)5%K)52m)#!J)#!J)#2p)5%K)52m!rdK -)5%K)5%K)5%K)5%Mr#!Mrr`J)#!J)#2p)5%K)r`$r5%K)5%K)5%K)5%K)52rrrhp -rr`J)#!J)#2p)5%Mr!2p)5%K)5%K)5%K)rrrr#!Mrrrrrrrrrr`J)#2rrrrrrrdK -)5%K)5%K)5%K)52m)#!Mrr`J)#!J)#!J)#2rXl2rr5%K)5%K)5%K)5(prIrm)#!J -)#!J)#!J)#!J)rqcXrrp)5%K)5%K)5%K)5%KrIrm)#!J)#!J)#!J)#!Mrl1crrdK -)5%K)5%K)5%K)5%KrIrrr#!J)#!J)#!J)#2rXl2rr5%K)l1a)l%K)5%K)5%KrIhr -rrrrrrrrrr`J)rqcXrrp)51a)l1a)5%K)5%K)5%KrIhprIhprIhprrrrrl1crrdK -)5%K)5%K)5%K)5%K)5%K)IhprIhprIhprIhrrrrrr5%K)5%K)5%K)5%K)5%K)5%K -)5%K)5%K)IhprIhrr!2p)5%K)5%K)5%K)5%K)5%K)5%K)5%K)5%K)5%K)52m!rdK -)5%K)5%K)5%K)5%K)5%K)5%K)5%MXl1cXl1a)r`$r5%K)5%K)5%K)5%K)5%K)5%K -)5%K)51cXl1cXl%Mr!2p)5%K)5%K)5%K)5%MX5%K)5%K)5%K)l1cXl1cX52m!rdK -)5%K)5%K)5%K)5%K)5%K)5%K)5%MXl1cXl1a)r`$r5%MXl%MX5%K)l%MXl%K)l1a -)l%K)51cXl1cXl%Mr!2p)51cX51a)5%MX5%MX5%MX51a)l%K)l1cXl1cX52m!rdK -)5%K)51a)l%K)51a)51a)l%MX5%MXl1cXl1a)r`$r5%K)5%K)l%MX5%K)l%K)l%M -X51a)51cXl1cXl%Mr!2p)51cX5%MX51a)5%MX5%MX51a)l%K)l1cXl1cX52m!rdK -)l1a)5%MX5%K)51cX51a)l%MX5%MXl1cXl1a)r`$r5%K)5%K)5%K)5%K)5%K)5%K -)5%K)51cXl1cXl%Mr!2p)5%K)5%K)5%K)5%K)5%K)5%K)5%K)5%K)5%K)52m!rrr -rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr`!!!!3!!!!!rrrrrrrrrrrrrrr -rrrrrrrrrrrrrrrrrrrm!!!!!!2repIAepIAepIAepIAepIAepIAepIAepIAepIm -!!!$rpIAiq2Miq2Miq2Miq2Miq2Miq2Miq2Miq2Mir2m!!2req2Mmr2cmr2cmr2c -mr2cmr2cmr2cmr2cmq2Mmr`!!rrAir2crrrrrrrrrrrrrrrrrrrrrrrrrrrceq2c -r!!$rpIMmrrrMirrMrrrrrrrrrrrrrrrrrrrrrrAir2m!!2req2crirrMirrrrrr -rrrrrrrrrrrrrrrrrpIMmr`!!rrAir2rrrrrrrrrrrrrrrrrrrrrrrrrrrrreq2c -r!!$rpIMmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrAir2m!!2req2crrrrrrrrrrrr -rrrrrrrrrrrrrrrrrpIMmr`!!rrAir2rrrrrrrrrrrrrrrrrrrrrrrrrrrrreq2c -r!!$rpIMmrrrMirrMrrrrrrrrrrrrrrrrrrrrrrAir2m!!2req2crirrMirrrrrr -rrrrrrrrrrrrrrrrrpIMmr`!!rrAir2rrrrrrrrrrrrrrrrrrrrrrrrrrrrreq2c -r!!$rpIMmrrrrrrrrrrrrrrrrrrrrrq2Miq2MrrAir2m!!2req2crrrrrrrrrrq2 -rrrrrrrrriq2Miq2rpIMmr`!!rrAir2rrrrrrrrrrrrrrrrrrrrrMiq2Mirreq2c -r!!$rpIMmrq2rirrrirrMrq2Mrq2rrq2Miq2MrrAir2m!!2req2crrrrMrrrMrq2 -rirrMrq2riq2Miq2rpIMmr`!!rrAir2rrrq2rirrrirrMrq2rirrMiq2Mirreq2c -r!!$rpIMmrq2riq2rrrrMrq2rirrMrq2Miq2MrrAir2m!!2req2crrrrrrrrrrrr -rrrrrrrrrrrrrrrrrpIMmr`!!rrAir2crrrrrrrrrrrrrrrrrrrrrrrrrrrAeq2c -r!!$rpIMipIAepIAepIAepIAepIAepIAepIAepIMir2m!!2req2Miq2Miq2Miq2M -iq2Miq2Miq2Miq2Miq2cmr`!!!2rmr2cmr2cmr2cmr2cmr2cmr2cmr2cmr2cmr2m -!!!!!!2rhpr[hpr[hpr[hpr[hpr[hpr[hpr[hpr[r!!!!!!$rrrIlqrIlqrIlqrI -lqrIlqrIlqrIlqrIlqrrr!!!!rrrhpr[hpr[hpr[hpr[hpr[hpr[hpr[hpr[hpr[ -r!2rrrrIlqrIlqrIlqrIlqrIlqrIlqrIlqrIlqrIlqrrrrrrrrrrrrrrrrrrrrrr -rrrrrrrrrrrrrrrrrrrrrrrm!rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr -r!!!!"!!!!!!!!!$rrrrrrrrrrrrrrrrrrrrrrrrrrrm!!!!!!!!!!!!!!2rfp[E -fp[Efp[Efp[Efp[Efp[Efrrm!!!!!!!!!!!!!rrEfp[Efp[Efp[Efp[Efp[Efp[E -rr2m!!!!!!!!!!!$rp[Efp[Efp[Efp[Efp[Efp[Efp[rjr2m!!!!!!!!!!2rfp[E -fp[Efp[Efp[Efp[Efp[EfrrMjr2m!!!!!!!!!rrEfp[Efp[Efp[Efp[Efp[Efp[E -rrrrrrrm!!2rrrrrrrrrrrrrrrrrrrrrrrrrrp[Efp[Efp[Efr`$r+bXV+bXV+bX -V+bXV+bXV+bXV+b[rp[Efp[Efp[Errb[jqIRjqIRjqIRjqIRjqIRjqIRjqIcrp[E -fp[Efp[rr+rRmr2cmr2cmr2cmr2cmr2cmr2cjr2rfp[Efp[EfrrmVqIcrrrrrrrr -rrrrrrrrMiq2r+rRmrrMfp[Efp[Errb[jr12rirrMrq2Mrq2rrq2MirmVqIcrq2M -fp[Efp[rr+rRmirrMrq2rirrMrq2riq2Mrb[jr2riq2Efp[EfrrmVqIcMirrrirr -Mrq2rirrMiq2r+rRmrrMip[Efp[Errb[jr2rrrrrrrrrrrrrrrrrrrrmVqIcrq2M -fp[Efp[rr+rRmrrrrrrrrrrrrrrrrrrrrrb[jr2riq2Efp[EfrrmVqIcriq2rirr -rrrrrrrrrrrrr+rRmrrMip[Efp[Errb[jr12riq2rrrrrrrrrrrrrrrmVqIcrq2M -fp[Efp[rr+rRmrrrrrrrrrrrrrrrrrrrrrb[jr2riq2Efp[EfrrmVqIcrrrrrrrr -rrrrrrrrrrrrr+rRmrrMip[Efp[Errb[jr2rMirrMrrrrrrrrrrrrrrmVqIcrq2M -fp[Efp[rr+rRmirrMirrrrrrrrrrrrrrrrb[jr2riq2Efp[EfrrmVqIcrrrrrrrr -rrrrrrrrrrrrr+rRmrrMip[Efp[Errb[jr#XV+bXV+bXV+bXV+bXV+bXVqIcrq2M -fp[Efp[rr+rRjqIRjqIRjqIRjqIRjqIRjqIRjr2riq2Efp[Efr`$rr2cmr2cmr2c -mr2cmr2cmr2cmr2crq2Mip[Efp[Er!!$rrrrrrrrrrrrrrrrrrrrrrrrrrrMiq2M -fp[Efp[m!!!!!!!$rq2Miq2Miq2Miq2Miq2Miq2Mip[Efp[Efr`!!!!!!!2riq2M -iq2Miq2Miq2Miq2Miq2Efp[Efp[Er!!!!!!!!rrEfp[Efp[Efp[Efp[Efp[Efp[E -fp[Efp[m!!!!!!!$rp[Efp[Efp[Efp[Efp[Efp[Efp[Efp[Efr`!!!!!!!2rrrrr -rrrrrrrrrrrrrrrrrrrrrrrrrrrrr!!!"!2rrrrk!!!!#J!!!!S!!!!+!!(i#M3# -"!TB"!)+!!Q"#J!13!#+!(2mIJ!4J$i!#!!q!!3!2J!$!$id!2mq@!!!rJ!!!$i! -!!!+!!!!#J!!"qS!!!IU!"!(kJ!!"qTSXdIUD*+RkJ85TqS&%UIUC4+RkQ)DTqS! -!!IU!!!!#rrrrr[rrrrlrrrrqrrrrr[rrrrlrrrrqrrrrr[rrrrlrrrrqrrrrr[r -rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr[rrrrlrrrrqrrrrr[r -rrrlrrrrqrrrrr[rrrrlrrrrqrrrrr[rrrrlrrrrqrrrrr[rrrrlrrrrq!!!"!!r -rr`!)!!'!#!3"3!J!!5!*&D%3#494q!LP8!J)T9!)#%93#!J!!!J)!!!)#!!!#!J -!!!J)!!!)#!!!#!M3!!J*B!!)#!!!#!J!!!J)!!!)#!!!#!J!!!J)!!!)#!!!#!M -3!!J*B!!)#!!!#!J!!!J)!!!)#!!!#!J!!!J2rrri$rrr!!rrri!2rrr!$rrri!r -rrr!2rrri$rrrq!rrrrJ2rrri$rrrq!rrrrJ2rrri$rrrq!rrrrJ2rrri$rrrq!r -rrrJ2rrri$rrrq!rrrrJ2rrri$rrrq!rrrrJ2rrri$rrrq!rrrrJ2rrri$rrrq!r -rrrJ2rrri$rrrq!rrrrJ!!!%!(rrrq#!!!!4!!!!#4rrriNJ!!"*)!!!55D!!%NV -!!"*)!!!55!!!%NJ!!"**S!!55X!!%NJ!!"*)!!I55!3(dNJ!"p*+PDI55*9AdNL -P9p*+a9I55!!!%NJ!!"*(rrrL3!!!!M!!!!`Irrri0YYY['5555EYYYY[rrrrrhr -rrriIrrri2rrrr(rrrrjrrrrqIrrrrRrrrrjrrrrqIrrrrRrrrrjrrrrqIrrrrRr -rrrjrrrrqIrrrrRrrrrjrrrrqIrrrrRrrrrjrrrrqIrrrrRrrrrjrrrrqIrrrrRr -rrrjrrrrq2rrrr"rrrrJrrrrmIrrrr[rrrrrrrrrrIrrrrJ!!!3!$rrrJ!J!!-!) -!!#J#!!!N!J!!)J)!!$mrrr`"3!!#!Crrq3'J!!8"S!$P!DUdj3'UUZ8"V+VP!D! -!"3'J!!8"TS!&!DX!"3'J!!8"S!!&!DD!"3'V!!8"S!!&!D!!"3'IrrN"3!!#!6r -rr!%#!!!"!J!!!3)!!!%#!!!"!rrrr`2rrq!$rrr`!rrrq!2rrr`$rrrq!rrrrcr -rrrprrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr -rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrprrrrr2rrrr`2rrrm$rrrr!rrrr`2 -rrrm$rrrr!!!!32rrJ!'8!DJ"J!'!!C3"U!'!!B#"J!'UXBUjT+Q!!Irrrrrrrrr -rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrm!!!"!Ir"!'%S89"j!!N!#5J*8!N! -#3!*9BP9b9A**8N!#Irjrm(riIrarrRrqIrjrrRrqIrjrrRrqIrjrrRrqIrjrrJ! -!!%"rrS!"RrQP"DS&S!@U[DUpT+fJ"CrjJ!&rrM9@DUYrrhrqrrrrrrrrrrrrrrr -rrrrrrrrrrrrrrhrq2rjrrhrr!!!!3"ri%!`3#RrrJ!QIbD!TTUQV+D!TS#QIbB! -*Ir%3!4rr(rJIr"rqIrrrrrrrrrrrrrrrrrrrrrrrrrprrarr(rm!!!#!rrrrrrr -rrrrmc-c-c-c-crc2cmc-c-c2r2cmc-c-c-rmc-c-c-c-crc-c-c-c-c2r-r2c-c --c-rmr2c-c-c-crc-c-c-c-c2r-c-c2c-c-rmc-c-c-c-crcmr2cmrmc2r-cmr2c -rr-rmr-r-r2cmcrc-c-c-c-c2rrrrrrrrrrm!!!#!$rrrrrrr!!!2$!`-$!r`!!r -!B'$!cmm!$`B'$!`2rr!2`-$!`-$1m!m-$!`-$!l`$m"JB-$!c[!2"JB-$!`1m!r -!`-$!`-l`$``-$!`-$[!2aXE'aQ$1m!m'"JB'CJl`$m"JaXCQc[!2$!`-$!`1m!r -ZlZlZlZl`$rrrrrrrrr!!!!#!$rrrrrrrrr$mc-c-c-c-crcZlZlZlZl[r1q2Mrr -rr1rmk2Mrrrrmlrc[rrrrrrc[r1Miq2L)r1rmk2Miq)Mmlrc[MrMiq2c[r1rrrrr -rr1rml-c-c-c-lrlZlZlZlZl[$rrrrrrrrr!!rXl1cXl1m!rXl1cXl1cr$rrrrrr -rrrm!!!#!!!rrrrrrm!!!$``-$!cr!!!2`-$!`2h`$rrrrrrrrrrmc-c-c-c`crc -GhGhGh[`2r0rrrrrHm-rmhrL2Mplm$rcIMiMrh[$2r0rrrrrHr!rmhrrrrpl`crc -GhGhGh[`2r1lZlZlZm-m2rrrrrrm-$`!2`-$!`-$2!!rrrrrrrrm!!!%!rrrrrrr -rrrrrrrrrrrrrrrmU+LSU+LSU+LSU+LSU+[rr+LVr+[mU+LSU+LSU+LVrrbVr+[m -U+LSU+LSU+LSUrrmU+LSU+LSU+LSU+LSU+[rr+LSU+LSU+LSU+LSU+LVrrbSUrbV -r+LSU+LSU+LSUrrmUrbVr+LSU+LSU+LSU+[rr+LSU+LSU+LSU+LSU+LVrrbSU+LS -U+LVr+LSU+LSUrrmU+LSU+LSU+LSU+LSU+[rr+[mUrbVr+[mUrrmU+LVrrbSU+[m -UrbVr+[rrrbSUrrmUrbSUrbSUrbVr+[mU+[rr+LSU+LSU+LSU+LSU+LVrrrrrrrr -rrrrrrrrrrrrrr`!!!3!!rrrrrrrrrrrrrrm!!!!!!2repIAepIAepIArr`!!!!$ -rpIAXpHcepIAerrIr!!!!rrAXpHcepIAepIrrrrm!!2repIAepIAepIAepI[r!!$ -rpIAepIAepIAepIAlr`!!rrAel2AXpIAepIAeqrm!!2rel2AXpIAepIAepI[r!!$ -rpIAepIAepIAepIAlr`!!rrAepIAepIAepIAeqrm!!2rel2AXpHcel1cepI[r!!$ -rpHcel2AXpHcXl2Alr`!!rrAel2Ael2AXl1ceqrm!!2repIAepIAepIAepI[r!!$ -rqr[lqr[lqr[lqr[lr`!!rrrrrrrrrrrrrrrrrrm!!!!"!!$rrrrrrrrrrrrrrrr -rr`$rp[Efp[Efp[Efp[Efp[ErrrElqr[lqr[lqr[lqr[lrrrfqrrMrq2rrrrrrrr -fqrrrp[[Mrq2rrrrrrrrrp[[rrrElrrrrrrrrrrrrrrElrrrfqq2rirrMrq2Mirr -fqrrrp[[Mrq2rirrMiq2rp[[rrrElrq2rrq2rirrMrrElrrrfqrrrrrrrrrrrrrr -fqrrrp[[fp[Efp[Efp[Efp[[rrr[lqr[lqr[lqr[lqr[lr`$rrrrrrrrrrrrrrrr -rr`!!!2rlp[[fqrElp[[fqrm!!2rlp[[fqrElp[[fqrErr`$rrrrrrrrrrrrrrrr -rrrm!!!%!!!!!rrrrrrrrrrrrr`!!!!!!!2mV+bXV+bXV+rrr!!!!!!$r+bXV+bX -V+b[rqrm!!2rrrrrrrrrrrrrrrrrrrrmV+bXV+bXV+bXV+rmV+rrr+rVkq[Vkq[V -kq[cr+b[rrb[krrrrrrrrrrVmrbXVrrmVq[rriq2rirrkr2mV+rrr+rVrirrMirr -rq[cr+b[rrb[krrrrrrrrrrVmrbXVrrmVq[rrrrrrrrrkr2mV+rrr+rVkq[Vkq[V -kq[cr+b[rrb[mr2cmr2cmr2cmrbXVr`$rrrrrrrrrrrrrrbXV+rm!!!$r+bXV+bX -V+bXV+b[r!!!!rrrrrrrrrrrrrrrrr`!!!"SC9QPY)$8Z-b`J)%eKBdp6)(*PE'9 -KFf8J-J!!!!`!+!!S!43"S`#!998!!!!L!!%!!!!!!-N")3$G!9X%!Np,!!!!!!! -8!#3!Y`&CL!*H-!!!!!,rr`!!!"B!!!!!!!!!E3!D!)%!9!3'3R9dG'pZ!!!!%J! -!!!!!!!!0!"F!,3!hS!)!J!!!!"`!!!!!!!!!$3"1!'B"CSJ,8h4KG'PM)&4PH(3 -!!!!!&3!S!#J"%!'R!!!"!!%!!!!!!!#!!!!!!"8!43"-!'S!G`!&!3!"!!!!!!! -!J3!!!!!9!*8!J!%P!1`!"3%!!3!!!!!!!))!!!!!&3!Z!#B!D3"d!!8"!!%!!!! -!!!#$!!!!!"8!13!m!-B"Z3!!!3!"!!!!!!!!K!!!!!%!!!'!!!!#3!!IrDri)!2 -3"#!"m!)3!rJ'#!rm#JJ(q"3)$r!S#!IJ8!J2`+!)"i&`'!m"q#J'!raB$![qZ!! -ArlJ),rpB!&rq+!$rr"J"2rJ)!6r`#!2rq!J')L3)!c!##"jc0!JZCQ3)IQCN#,c --b!6-6-3$Kr-i!!2!!!!"J!!!!B!!!!2!!"rrlrJrrrrm2rrrrKrrrri2rrrq$rr -rr!rrrrJ2rrr`$rrri!rrrr!Irrri2rrrr(rrrrlrrrrrrrrrrhrrrrirrrrm(rr -rq!rrrr!2rrri$rrrr!rrrri2rrrm$rrrr!rrrr`2rrri"mrrr!1(mcJ!!m!!!!' -!!!!!!J!!!!!!!!!!$r!!!!!!!!!!!!!!!!!!!2L2!!!!!!!!!!!2rrrrrrq*Q2$ -rrrrrm!!!m!!!!!!!qCQ2!!!!!!m!!2$-c-c-c-qCR`c-c-c-m!!2c-c-c-cIQCR -mc-c-cI!!!2h-c-cGqCQCRpc-c0h`!!$`c-c-hjQCQI$-c-hI!!!!m-c-c0qCQCm -!c-cGm!!!!2$-c-cIQCR`$-c0h`!!!!$`c-c-hjQI!-c-hI!!!!!!m-c-c0qCm!c --cGp[!!!!$r$-c-cIR`$-c0hjP[!!!2M`c-c-hr!-c-hIQCP[!!q*m-c-c0m!c-c -GqCQCP[$iQI$-c-c3$-c0hjQCQCP[q*R`c-c-d-c-hIQCQCQCE`q*m-c-c0c-cGq -CQCQCP[!!q2$-c-c-c2rjQCQCQ@m!!!r`c-c-c-r-qCQCQCE`!!!!m-c-c-c2c2Q -CQCP[!!!!!2$-c-c-hrqIrjrrrr!!!!$`c-c-cIc-r-cmc2c2!!!!m-c-c0hrc2r --c-c-c2!!!2$-c-hIr-rrc'E-rmm!!!$`c-cGqIc2r-Emcrc2!!!!m-c0hjRmcrc -2r-rmc`!!!2$-hIqIc2r-rmcrc2!!!!!2cGm!rmc2c2r-rmc2!!!!!2r`!!rrp[m -!r`$rm!!!!!!!!!!!pQm!!!!!!!!!!!!!!!!!!!r`!!!!!!!!!!!!!%!q[%(#3-- -KaL1-)4`L2Q!ri2jKI#(+)N%R95p9'P8"UMqmIrjrrcrq2r`rr(rqrrrrrRrm2ri -rrcrr2rmEr`'U!!!!J!$rrrM`rrm!$`!!$jm!!2!2c-c0rmc-h`$mc0qI$-h`!2c --hr$-h`!!r-cI$-hr!!Mmc0$-hjR`LIc-$-hjQCrjr-c-rjQCB!rmc-r2rjm!!2c --crr-r2!!r-cmcmc-c`$mcIr2cmr2!2cIRmr2cmm!$r$mcmr2c`!!!!r`m2$`!!! -%!!!!!!$rrrrrrrrrrrrrrrrrrrrrrrrr!!!!!!!!!!!!!!!!!2repIAepIAepIA -epIAepIAepIrr!!!!!!!!!!!!!!!!rrAepIAepIAepIAepIAepIAerb[r!!!!!!! -!!!!!!!$rpIAepIAepIAepIAepIAepIAr+b[r!!!!!!!!!!!!!2repIAepIAepIA -epIAepIAepImV+b[r!!!!!!!!!!!!rrAepIAepIAepIAepIAepIAerbXV+b[r!!! -!!!!!!!$rpIAepIAepIAepIAepIAepIArrrrrrrrr!!!!!!!!!2repIAepIAepIA -epIAepIAepIAepIAepIm!!!!!!!!!rrAepIAepIAepIAepIAepIAepIAepIAer`! -!!!!!!!$rpIAerrrrpIrrrrArrrrerrrerrrepIAr!!!!!!!!!2repIAepIAepIA -epIAepIAepIAepIAepIm!!!!!!!!!rrAepIAepIAepIAepIAepIAepIAepIAer`! -!!!!!!!$rpIAerrrrpIrrrrrerrrrrrArrrrepIAr!!!!!!!!!2repIAepIAepIA -epIAepIAepIAepIAepIm!!!!!!2rrrrrrpIrerrrrrrAepIAepIAepIAepIAer`! -!!!$r!!!!!!$rpIm!!!!!rrAerrArrrrerrrepIAr!!!!!2mVprFVprRrrb[hpb[ -krrAepIAepIAepIAepIm!!!!!!2rh+rIjrrAr!2FVq[repIAepIAepIAepIAer`! -!!!!!rb[hprVrr`$h+rVrpIAepIAepIAepIAepIAr!!!!!!$rprIhqIm!pb[krrr -epIAepIAepIAepIAepIm!!!!!!2mVpb[k!#[hq[repIAepIAepIAepIAepIAer`! -!!!!!rrFVp`$hprRrpIAepIAepIAepIAepIAepIAr!!!!!!$rprFVpb[rrrAepIA -epIAepIAepIAepIAepIm!!!!!!2mVprFVrb[rrrrerrAepIAepIAepIAepIAer`! -!!!!!rrFVprIrrrmVprmVrrAepIAepIAepIAepIAr!!!!!!$r+rIhrrFVrrFVprF -VrrAepIAepIAepIAepIm!!!!!!2rh+rVrrrIrprmVrrIrpIAepIAepIAepIAer`! -!!!!!rb[kr`$r+rmVrrIr+rrepIAepIAepIAepIAr!!!!!!!!rrrerb[hrrIr+rr -hrrAepIAepIAepIAepIm!!!!!!!!!rrAerrrerrArpIrepIAepIAepIAepIAer`! -!!!!!!!$rpIAepIAepIAepIAepIAepIAepIAepIAr!!!!!!!!!2rrrrrrrrrrrrr -rrrrrrrrrrrrrrrrrrrm!!!!!!!%!$rrq!!J!!`!)!!+!#!!#3!J!!L!)!!)3#!! -$q!J!!!J)!!!)#1lYL!J!!!J)!!!)#1plL!J!!!Jq[!!)38*GL%$$!!JK4J!))i` -!##%F!!JL-!!))#!!##$!!!JKG!!))FS!##*"!!JR93!),98!#"T9!!J*UJ!)#!! -!#!rrrrJ2rri!$rrr!!rrri!2rrr!$rrri!rrrr!2rrri$rrrq!rrrrJ2rrri$rr -rq!rrrrJ2rrri$rrrq$rrrrKrrrriIrrrq$rrrrJrrrri2rrrq$rrrrJrrrri2rr -rq$rrrrJrrrri2rrrq$rrrrJrrrri(rrrq!rrrrJ2rrri$rrrq!!!!J!!!2rrrrr -rrrrrrr!!!!!!!!$m$!`-$!`-$!cr!!!!!!!!m-$!`-$!`-$!r2!!!!!!!2`-$!` --$!`-$2c2!!!!!!$``-$!`-$!`-$mc2!!!!!!r!`-$!`-$!`-r-c2!!!!!2$!`-$ -!`-$!`2rrrr!!!!$m$!`-$!`-$!`-$!c`!!!!m-$!`-$!`-$!`-$!m!!!!2`-rrc -rr2rmr`rm$2!!!!$``-$!`-$!`-$!`-$`!!!!r!`-$!`-$!`-$!`-m!!!!2$!rr$ -rrmrrm2r``2!!!!$m$!`-$!`-$!`-$!c`!!$rrr$`rrr!`-$!`-$!m!!2!!!2$`! -!r!m2r`rm$2!!$mc-cIr-c0r!`-$!`-$`!!$mc0m2$-hm$!`-$!`-m!!!r-cIm-c -I`-$!`-$!`2!!!2c-h`c0r``-$!`-$!c`!!$mc0$-hm$!`-$!`-$!m!!!r-`-cI` --$!`-$!`-$2!!!2c-c2r!`-$!`-$!`-$`!!$mc-r2r`m-$!`-$!`-m!!!r-c2rmc -mm-$!`-$!`2!!!2c-r-r-c-m-$!`-$!c`!!$mcIr2cmr2`-$!`-$!m!!!r0m2cmr -2c``-$!`-$2!!!!r`r-r2cmr!`-$!`-$`!!!!r!rmr2cm$!`-$!`-m!!!!2$!`-$ -!`-$!`-$!`2!!!!$rrrrrrrrrrrrrrrr`!!!!!)!!rrrrrrm!!!$`!!!!$r!!!2! -!!!!2c`!!m!!!!!rrm!$`!!!!!!$`!2!2$r$r!2!!m!!!!!!!m!$r!2m2$`$`$mc -rc2!!!2!2c2r-m2m!m!r-r-m!!!$`$mr-m!m2!2!2c-m!!!!!m!r-m!!!!!$`$mm -!!!!!!2!!rrrrrrrrm!!!!%!rm#!B)"3J(L!#*E)J!M056)*-XNN#8P*%!NJ#8!) -rrMr`2rJrr$rq2rirrMrq2rjrrRrqIrjrrRrqIrjrrMrq!!!%!!!!!!!!!!!!!!! -!!!!!!2rr!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!$rZERr!!!!!!!!!!! -!!!!!!!!!!!$rrrrrrrrrrrrrrlRPjVRr!2rrrrrrrrrrr`!!!!!!r`!!!!!!!!! -!!!!!rqAQjERr!!!!!!!!!!!!r`!!!!$r!#[hpb[h+rIh+rFVrqAQjIm!+rIh+rF -VprFVr`!!!!$rprFVprIh+rIh+rVrjZAQjIrhpb[hprIh+rVr!!!!!!$rqIIh+rI -h+rVkrqAQjHEQjIrjprFVpb[kqIm!!!!!!2m!+rIh+rIhqIrPjZAQjHAr!2FVprF -Vq[Rr!!!!!!!!r`$h+rIhpb[krqEPjZAQr`!!prFVprVjr`!!!!!!!!$r!2Ihpb[ -hprRrjHEPj[m!!#[h+rIkqIm!!!!!!!!!!2m!+rIhpb[hq[rPjHEr!!$hpb[hq[R -r!!!!!!!!!!!!r`$hprFVprIjrqAQr`!!+rFVprVjrqrr!!!!!!!!!2rr!#[h+rI -h+rVrj[m!!2IhprIjq[rPjZrr!!!!!!$rZIm!pb[hprIhqIrr!!$h+rFVqIVrjZA -QjHrr!!!!rlRPr`$hpb[h+rIkr`!!+rIhprVjrqAPjZAQjHrr!2qjjHEr!#[hpb[ -hprN!!2Ihpb[kqIrQjHEPjZAQjHrrrlRQjIm!pb[hprFVqJ!Vpb[hq[RrjHEPjZA -QjHEQm2m!rlRQr`!VprIh+rIjprFVprVjrqAQjHEPjZAQjHrr!!!!rlRr!2Ih+rI -hprFVprIrrrrPjZAQjHEPjZA[r`!!!!!!rrm!pb[hpb[h+rIhrrFVrqEPjZAQjHE -Plrm!!!!!!!!!r`$hpb[hpb[hpb[r+rIrjHEPjZAQjHrr!!!!!!!!!!$r!#[hpb[ -hprFVq[rrrqArrrrPrrrrrrrr!!!!!!!!!2m!pb[hpb[hprVr+rFVrb[hprmVpb[ -r+rIr!!!!!!!!r`$hprFVprIjqIrrprIrrrFVprFVprIhpb[r!!!!!!$r!#[hprF -Vq[Vrrb[hrrrr+rI`lrFVrrmVr`!!!!!!!2m!pb[h+rVjrqArpb[rrb[hm2rh+rr -rprIr!!!!!!!!r`$hpb[kq[rPj[rhprrrprIrrb[hrrmVprm!!!!!!!$r!#[hq[R -rrqErpb[rrrFVrrmVprrr+rIr!!!!!!!!!!$rprRkr`!!rrmVprIr+rIrrrIhrrr -h+rIr!!!!!!!!!!$rrrm!!!!!rrrrrqrrr`!!rrm!!2rrr`!!!!!!!!!!!!!!!!! -!!!!!rqr`r`!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!rrm!!!!!!!!!!!! -!!!!!!!!!!!3!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!rrrrrrre!!$rrrrr!!!!!!!!!!! -!!!!!!!!!!!!!!2m!!!!!!2m!r`!!!!$r!!!!!!!!!!!!!!!!!!!!!!!!rb[hpb[ -hqIrr+rIh+rVr!!!!!!!!!!!!!!!!!!!!!!!!rrFVprRrpIm!pb[kr`!!!!!!!!! -!!!!!!!!!!!!!!!$r+rIhq[rr!2FVq[m!!!!!!!!!!!!!!!!!!!!!!!!!!2rhprI -jr`$h+rVr!!!!!!!!!!!!!!!!!!!!!!!!!!!!rb[h+rS!+rIkr`!!!!!!!!!!!!! -!!!!!!!!!!!!!!!$rpb[h!2IhqIm!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!2rhpb[ -h+rIrp3$r!2m!!2m!r`!!!!!!!2m!!!!!!!!!rb[hpb[hr`!!!2rrrrrrrrrrrrr -rrrrrr`!!!!!!!!$rpb[hprm!!!!!!!!!!!!!!2m!!!!!!!!!!!!!!!!!!2mVprI -r!!$rr`!!rrrrrrre!!$rrrrr!!!!!!!!!!!!rrFVr`!!!2m!!2m!!!!!!2m!!!! -!!!$r!!!!!!!!!!$r+rm!!!!!rrm!!!!!!!!!!!!!!2Ih+rVr!!!!!!!!!!$r!!! -!!!$r!!!!rrrr!!$rr`!!pb[kr`!!!!!!!!!!!!!!!!!!!2m!!2m!!!$rr`!!r`! -Vq[m!!!!!!!!!!!!!!!!!!!!!rrm!!2m!r`$r!!$r!2Vr!!!!!!!!!!!!!!!!!!! -!!!$r!!!!r`$rr`!!r`!!r`!!!!!!!!!!!!!!!!!!!!!!!2rrr`$r!2m!!2m!!2m -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!2m!!!$r!!$rp3!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!r`!!r`!!!!!!!2rr!!$rr`!!!!!!!!!!!!!!!!!!!!$r!2m!!!!!!!$ -rprIrrrIhr`!!!!!!!!!!!!!!!!!!!!$r!!!!!!!!!2rhprrrprIr!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!rrIhrrIhr`!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!$ -rprrhprm!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!2rhprIr!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!rrIhr`!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!$ -rprm!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!$r!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!3!!!2rrrrrrZIm!rrrrr`!!!2m -!!!!!!2rPr`!!!!$r!!$r+rIh+rIjrrmVprFVq[m!!2rh+rIjrqAr!2FVq[m!!!$ -r+rIhq[rr!2FVq[m!!!!!rrIhprRr!2FVq[rr!!!!ZImVpb[k!#[hq[rPj[m!ZHA -rpb[h!2IhqIrPjZAPrrrQrrIh+rFVrrrPjZAQl`!!rrmVprFVrb[rrrrQr`!!!!$ -rpb[hprrrrb[hrb[r!!!!rb[hprrh+rrh+rIh+rm!!2rh+rVrrrIrprmVrrIr!!$ -r+rVrjImVrb[rprmVr`!!!2rr!2mVprrhrb[rprm!!!!!!!!!rrm!r`$r!2m!!!! -"!!!!rrrrrrrrrrrrr`!!!!!!!2repIAepIAepIrr!!!!!!$rpIAepIAepIAr+rm -!!!!!rrAepIAepIAerrrrr`!!!2repIAepIAepIAepIm!!!$rpIArpIrrpIrrpIA -r!!!!rrAepIAepIAepIAer`!!!2rrpIArrrArpIrepIm!!2rhprrrprIrpIAepIA -r!!$rprIrrrIhrrArrrAer`!!rrIhrrIhrrAepIAepIm!!2rhrrIhrrAerrArpIA -r!!$rprIhrrAepIAepIAer`!!rrIhrrAepIAepIAepIm!!2rhrrAepIAepIAepIA -r!!!!rrrrrrrrrrrrrrrrr`!!!!%#!!S!!!!!!"3"@J!S!E`%"%CTEQ3!!!!!!$! -"@3"%!EX%"e*PF'aKBf9M!!!!!!"0!9S!B3'm"!j5CA"XB@0P)#BJ4QPZC!!!!!! -!D3&D!(d"[!3,8Q9`E'&MC5""E'bQ!!!!!!"h!&)!L3#m"3Y*Cfj[FQ8J3f&cCAF -!!!!!!(J!a!#+!5i&"P*PCf9iF!!!!!!!M`"5!+%![!8,4@jdDA*P)&G[FQ4%!!! -!!!!8!&8!0J%l%!P&C'Pd)&4PH(5m!!!!!!"#!&8!C!%l%!P&C'Pd)&4PH(4D!!! -!!!!6!#d!)`"5L!9'D@jN1UB!!!!!!%3!&J"8!&+)#&*PF'aKBf8k!!!!&3"&!#) -!m!(Y!!3"!!%!!!!!!!#&!!!!!1J!!!!!!1J!!J!"#%GKFQCTC@aN!!!!!!!!!!! -!!!!!!!!!!!!!!,%1([G#4!!!!!![fJa3HA4SEfiJ-5ie,M%!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#rEX@T1)J" -h!&B"qJ'$rrrrr`!!!!!!!!!!!!!!!!!!!!!!!!!8T8aKEQGeB@GPFbp6Bh*TF(4 -TEQF!!3!%!!![fJ!#!#T(BA*QD@9XC$UP6'&ZCh9KCf9c,e0MFQP`G'PZCcT3HA4 -SEfiJ-5ie,M(rr`!!!!!!%&4&@&4dG(Kd!+J`-6Ja!!!!!!)!!!!!!!!!!!!!!!! -!!!!!!!$rrrrrm!!!!!!!!!!!!!!!m!!!!2m!!!!!!!!!!!!!!2$r!!$`m!!!!!! -!!!!!!!$Xrq!!rrm!!!!!!!!!!!!!c`r`!!!2!!!!!!!!!!!!!1rrrJ!!$q!!!!! -!!!!!!!$`!2m!!!rJ!!!!!!!!!!!2rJlrm!!2i!!!!!!!!!!!!-!!!!!!$1!!!!! -!!!!!!!$`-`!`!2rr`!!!!!!!!!!!m1-!-`$q$r!!!!!!!!!!!2!1-c-`rrr!!!! -!!!!!!!$`!!!c!2i2m!!!!!!!!!!!m!!!-!$q$r!!!!!!!!!!!2rrrmrmrrr!!!! -!!!!!!!!!$ZlZlXc-!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!%!!!!!!$rJ!!!J-!!!,#J!!#`m!!!@"!! -!2JB!!#-'!!"MKJ!!!!)!!#b2!!!XcB!!*qm!!#$0J!!JMB!!2fm!!!I`!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!2q!!!$r`!!!rq!!!2r`!!$rm!!!rrJ!!2ri!!(rq!!!rrJ! -!2rq!!$rrJ!!rri!!2rq!!$rrJ!!rri!!"rm!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!3$rrm! -!J!"!!)!!3!#!!%!!J!"!!)!!3!#!!%!!J!"!!)!!3!#!!%!!J!"!!)!!3!#!!%! -!J!"!!)!!3!#!!%!!J!"!!2rr`!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!2rr`!$rrm!!rrr!!2rr`!$rrm! -!rrr!!2rr`!$rrm!!rrr!!2rr`!$rrm!!rrr!!2rr`!$rrm!!rrr!!2rr`!$rrm! -!rrr!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!#!2rrrrrrrrrrr`!!!!!!!!$`!!!!!!!!!!m!!!!!!!! -!m!!!!!!!!!!2!!!!!!!!!2!!!!!!!!!!$`!!!!!!!!$`!!!!!!!!!!m!!!!!!!! -!m!!!!!!!!!!2!!!!!!!!!2!!!!!!!!!!$`!!!!!!!!$`!!!!!!!!!!m!!!!!!!! -!m!!!!!!!!!!2!!!!!!!!!2!!!!!!!!!!$`!!!!!!!!$`!!!!!!!!!!m!!!!!!!! -!m!!!!!!!!!!2!!!!!!!!!2!!!!!!!!!!$`!!!!!!!!$`!!!!!!!!!!m!!!!!!!! -!m!!!!!!!!!!2!!!!!!!!!2!!!!!!!!!!$`!!!!!!!!$`!!!!!!!!!!m!!!!!!!! -!rrrrrrrrrrrr!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!#!!!!!!!!!!!!!!!!!!!!!!!!!+!!!!#J!!!!!!!!!!!!!!Skrrrk1[!!!!! -!!!!!!!#M-kc-Sc1Z!!!!!!!!!!!!#M-kbM-krJ!!!!!!!!!!!!qM-k-cS2i!!!! -!!!!!!!!2bM-c1X$q!!!!!!!!!!!!$mbM-cc!rJ!!!!!!!!!!!!r+-c-c`2i!!!! -!!!!!!!!2Sc1M-k$q!!!!!!!!!!!!#M-kbM-krJ!!!!!!!!!!!+-cV-bM-ki!!!! -!!!!!!!!+1Xc-bM-k!!!!!!!!!!!!$kc-c-bMVJ!!!!!!!!!!!!m!!!!!b[i!!!! -!!!!!!!!2rrrrrrrq!!!!!!!!!!!!!!$ZlZlZlJ!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"!!!!!!!)#!! -!(ri!!$iq!!!IIJ!!(rS!!"Ib!!!6iJ!!&r)!!"rk!!!IIJ!!2Mi!!"`I!!!B$J! -!%!B!!"rq!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!J)!!!IrJ!!2rm!!"rr!!!Ir`! -!(rm!!"rr!!!Ir`!!(rm!!"rr!!!rr`!!(rm!!"rr!!!Ir`!!(rm!!!2r!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!)!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!2rrr -rrr!!!!!!!!!!!!!!$`!!!!$q!!!!!!!!!!!!!!m2rrrrrrrr!!!!!!!!!!!2!!$ -`!!!!$`!!!!!!!!!!$`rrm2rrr`rJ!!!!!!!!!!m!!2!!!!!2i!!!!!!!!!!2$rr -`rrrr$q!!!!!!!!!!$`!!m!!!!!rJ!!!!!!!!!!m2m2$rrrm2i!!!!!!!!!!2!!$ -`!!!!$q!!!!!!!!!!$rrrm2m!!!rJ!!!!!!!!!!$Zl[!!!!!2i!!!!!!!!!!!!!$ -rrrrrrq!!!!!!!!!!!!!!!1lZlZlJ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!% -!!!!!!!!!!!"ri!!!3$!!!&rr!!"#!3!!A[f!!%)"J!"HrB!!3J'!!&VpJ!"#!B! -!IX'!!$i"J!!$ri!!!2q!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!(rJ!!"rm!! -!Irm!!(rr!!"rri!!Irq!!(rrJ!"rri!!Irq!!(rrJ!"rri!!2rq!!!2rJ!!!ri! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!3!'q!!!#33!!!J#!!!*$3!!"[X!!"rrJ!!`H-! -!B(M!!0ai`!#FH-!!R(M!!-"i`!"JH-!!2rr!!"rr`!!!H!!!!(J!!!!i!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!Ei!!!2r!!!$ri!!!rr!!!'q`!!(rq!!$rr`!"rrm!!rrr!!2rr`!$rrm! -!rrr!!(rr`!!rrm!!(rr!!!"i!!!!H!!!!$J!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#!!!!$r$rrr! -!!!!!!!!!!!!!!2!2!!!2!!!!!!!!!!!!!!$`!!!!!2!!!!!!!!!!!!!!m!m!!2m -2!!!!!!!!!!!!!!r`rrr3r`!!!!!!!!!!!!%F`Frr`Fr3!!!!!!!!!!!G%4%Irp% -4r3!!!!!!!!!"d4%4(rr4%Id!!!!!!!!!(4cF%4rrd4(p!!!!!!!!!"%Gr4%Irp% -4r3!!!!!!!!$4(0`4(rr4%Id!!!!!!!!!ha%4%4rrd4(p!!!!!!!!!!ha%4%Irp% -4r3!!!!!!!!!!hrrrrrrIrrd!!!!!!!!!!!hGhGrrhGhG!!!!!!!!!!!!!!!2rp! -!!!!!!!!!!!!!!!!!$rr3!!!!!!!!!!!!!!!!!!$Gd!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!%!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!$rrrrrrrrrrrm!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!2m -!!!!!!!!!rrm!!!!!!!!!!!!!!!!!!!!!!!!!!!!!r`$rr`!!!!$r!2m!!!!!!!! -!!!!!!!!!!!!!!!!!!!$j+rrrq3!!!2rrrrm!!!!!!!!!!!!!!!!!!!!!!!!!!#[ -r!2rr!!!!!!!!r`!!!!!!!!!!!!!!!!!!!!!!!!!!qIrrrrrj!!!!!!$rq3!!!!! -!!!!!!!!!!!!!!!!!!!$r!!!!rrm!!!!!!2rj!!!!!!!!!!!!!!!!!!!!!!!!rrr -j!2Rrrrm!!!!!rrN!!!!!!!!!!!!!!!!!!!!!!!!!+`!!!!!!!!!!!!!Vq3!!!!! -!!!!!!!!!!!!!!!!!!!$r!0MB!!$B!!!!rrrrrbX!!!!!!!!!!!!!!!!!!!!!!2m -!qGJ!!0MB!!$rr!$rr`!!!!!!!!!!!!!!!!!!!!!!r`!!qGMBf0MB!2rrrrmV!!! -!!!!!!!!!!!!!!!!!!!$r!!!!!!$Bf!!!rr`!rrm!!!!!!!!!!!!!!!!!!!!!!2m -!!!!!!0J!!!$rr!$rr`!!!!!!!!!!!!!!!!!!!!!!rrrrrrrr+rrr+rrrrrmV!!! -!!!!!!!!!!!!!!!!!!!!!!!$jqIRjqIRj+bXV+`!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!3 -!rrrrrrrrrrrrrrrrrrrrrrrr!!!!!!!!!!!!!!!!!!$r!!!!!!!!!!!!!!!!!!! -!!2m!!!!!!!!!!!!!!!!!!2m!!!!!!!!!!!!!!!!!!!!!r`!!!!!!!!!!!!!!!!! -!r`!!!!!!!!!!!!!!!!!!!!$r!!!!!!!!!!!!!!!!!!$r!!!!!!!!!!!!!!!!!!! -!!2m!!!!!!!!!!!!!!!!!!2m!!!!!!!!!!!!!!!!!!!!!r`!!!!!!!!!!!!!!!!! -!r`!!!!!!!!!!!!!!!!!!!!$r!!!!!!!!!!!!!!!!!!$r!!!!!!!!!!!!!!!!!!! -!!2m!!!!!!!!!!!!!!!!!!2m!!!!!!!!!!!!!!!!!!!!!r`!!!!!!!!!!!!!!!!! -!r`!!!!!!!!!!!!!!!!!!!!$r!!!!!!!!!!!!!!!!!!$r!!!!!!!!!!!!!!!!!!! -!!2m!!!!!!!!!!!!!!!!!!2m!!!!!!!!!!!!!!!!!!!!!r`!!!!!!!!!!!!!!!!! -!r`!!!!!!!!!!!!!!!!!!!!$r!!!!!!!!!!!!!!!!!!$r!!!!!!!!!!!!!!!!!!! -!!2m!!!!!!!!!!!!!!!!!!2m!!!!!!!!!!!!!!!!!!!!!r`!!!!!!!!!!!!!!!!! -!r`!!!!!!!!!!!!!!!!!!!!$r!!!!!!!!!!!!!!!!!!$r!!!!!!!!!!!!!!!!!!! -!!2m!!!!!!!!!!!!!!!!!!2rrrrrrrrrrrrrrrrrrrrrrr`!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!$F!!!!!!!!!0`!!!!!!!!!!!!!!!!!!!!!!!!!!!!!h#2Errrrrrr -E)pcr!!!!!!!!!!!!!!!!!!!!!!!!!0XM)b2E+bXVfb-M)p[j!!!!!!!!!!!!!!! -!!!!!!!!!!0`M)b2F+p`M)b2FrrN!!!!!!!!!!!!!!!!!!!!!!!!!rp`M)b2F)b- -Mh!$rq3!!!!!!!!!!!!!!!!!!!!!!!!$r+p`M)b-M)p`V!2rj!!!!!!!!!!!!!!! -!!!!!!!!!!2mV+p`M)b2E+bX!rrN!!!!!!!!!!!!!!!!!!!!!!!!!rb[F)b-M)b2 -E+`$rq3!!!!!!!!!!!!!!!!!!!!!!!!$rfb-M)p`M)b2F!2rj!!!!!!!!!!!!!!! -!!!!!!!!!!0XM)b2F+p`M)b2FrrN!!!!!!!!!!!!!!!!!!!!!!!$F)b-MfbXV+pX -M)b2Eq3!!!!!!!!!!!!!!!!!!!!!!!!$F)p`V+bXV+p`M)b2F!!!!!!!!!!!!!!! -!!!!!!!!!!2rF+bXV+bXV+p`MfrN!!!!!!!!!!!!!!!!!!!!!!!!!r`!!!!!!!!! -!+p[rq3!!!!!!!!!!!!!!!!!!!!!!!!$rrrrrrrrrrrrrrrrj!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!2RjqIRjqIRjqIN!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!%!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!rrrrrrrrrrrrr`!!!!!!!!!!!!!!!!!!!!!!!!!!!!$r!!!!!!! -!!!$rq3!!!!!!!!!!!!!!!!!!!!!!!!!!!2m!rrrrrrrrrrrrrrrrr`!!!!!!!!! -!!!!!!!!!!!!!r`!!!!$r!!!!!!!!!!$r!!!!!!!!!!!!!!!!!!!!!!$r!2rrrrm -!rrrrrrrr!2rj!!!!!!!!!!!!!!!!!!!!!2m!!!!!r`!!!!!!!!!!rrN!!!!!!!! -!!!!!!!!!!!!!r`$rrrrr!2rrrrrrr`$rq3!!!!!!!!!!!!!!!!!!!!$r!!!!!2m -!!!!!!!!!!2rj!!!!!!!!!!!!!!!!!!!!!2m!rrm!r`$rrrrrrrm!rrN!!!!!!!! -!!!!!!!!!!!!!r`!!!!$r!!!!!!!!!!$rq3!!!!!!!!!!!!!!!!!!!!$rrrrrrrm -!rrm!!!!!!2rj!!!!!!!!!!!!!!!!!!!!!!$jqIRjr`!!!!!!!!!!rrN!!!!!!!! -!!!!!!!!!!!!!!!!!!!$rrrrrrrrrrrrrq3!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!qIRjqIRjqIRj!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!3!!!!!!!$rr`$rrrrrr`!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!r`!!r`!!!!!!r`!!!!!!!!!!!!!!!!!!!!!!!!!!!!$r!!!!!!!!!!!!r`!!!!! -!!!!!!!!!!!!!!!!!!!!!!2m!!2m!!!!!rrm!r`!!!!!!!!!!!!!!!!!!!!!!!!! -!!2rr!2rrrrrj!2rr!!!!!!!!!!!!!!!!!!!!!!!!!!%"+bX"+rrrrbX"+rqI!!! -!!!!!!!!!!!!!!!!!!!!"q38&"38&rrrrq38&"Irj!!!!!!!!!!!!!!!!!!!!!IN -&"38&"3Arrrrj"38&rrN!!!!!!!!!!!!!!!!!!!(j"5[j+`8&"IrrrrN&"3Arq3! -!!!!!!!!!!!!!!!!!!38&qIrj"38&rrrrq38&"Irj!!!!!!!!!!!!!!!!!!$j"38 -Vq5X&"3Arrrrj"38&rrN!!!!!!!!!!!!!!!!!!2Rr"38&"38&"IrrrrN&"3Arq3! -!!!!!!!!!!!!!!!!!!2Rr"38&"38&rrrrq38&"Irj!!!!!!!!!!!!!!!!!!!!!2R -rrrrrrrrrrrrjrrrrrrN!!!!!!!!!!!!!!!!!!!!!!2RjqIRjqIrrrrRjqIRjq3! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!rrrrq3!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!$rrrrj!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!$jqIN!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!J!!!!!!!!!!!!!!!!!!!!! -!!!!2!!!2i!!!!!!!!!!!!!!!$q!!$q!!!!!!!!!!!!!!!!$`!2i!!!!!!!!!!!! -!!!!!rJ$q!!!!!!!!!!!!!!!!!!m2i!!!!!!!!!!!!!!!!!!2lq!!!!!!!!!!!!! -!!!!!!2i!!!!!!!!!!!!!!!!!!!rri!!!!!!!!!!!!!!!!!lq!2i!!!!!!!!!!!! -!!!$rrJ$rm!!!!!!!!!!!!!!2l[i!rJm!!!!!!!!!!!!!$`$q!2i2i!!!!!!!!!! -!!!m!rJ$q$q!!!!!!!!!!!!!!rqi!$ri!!!!!!!!!!!!!!1i!!!lJ!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!3!!!!!!""!!!!33!!!#)!!!!L!!!!&!!!!"3!! -!!)!!!!(!!!!#)!!!$MJ!!")N!!!5*!!!%L3!!!`B!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!%'!!!"KJ!!!)`!!!$-!!!!@!!!!(J!!!!`!!!!H!!!!F`!!!21!! -!(c`!!"mq!!!I2J!!$a`!!!`B!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"!!!!!!!!!!! -!!2q!!!#"J!!!JB!!!i'!!!1"J!"rcB!!Iqf!!(rKJ!"r`B!!!i'!!!1"J!!!Ki! -!!*q!!!$rJ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!ri!!!2q!!!$rJ!!$ri! -!!rq!!(rrJ!"rri!!Irq!!(rrJ!!$ri!!!rq!!!$rJ!!!ri!!!2q!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!)!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!rrrrrr!!!!!!!!!!!!!!!2!!!!r`!!!!!!!!!!!!!!$`!!!2m!!!!!!!!!!!!!$ -rm!!!$r!!!!!!!!!!!!!!mr!!!!r`!!!!!!!!!!rrrr-r!2m2m!!!!!!!!!!2-c- -c-r$r$r!!!!!!!!!!$c-c-c2`!!r`!!!!!!!!!!rrrr-r!!!2m!!!!!!!!!!!!!$ -cm!!!$r!!!!!!!!!!!!!!rr!!!!r`!!!!!!!!!!!!!!$`!!rrm!!!!!!!!!!!!!! -!m!rrrr!!!!!!!!!!!!!!!2rrrrr`!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!) -!!!!!!!!!!!!!!!!!!!!!!!rrrrrr!!!!!!!!!!!!!!!2!!!!$r!!!!!!!!!!!!! -!$`!!!!r2!!!!!!!!!!!!!!m!!!!2rr!!!!!!!!!!!!!2!!!!!!$`!!!!!!!!!!! -!$`!!!!rrm!!!!!!!!!!!!!m!!!$mc-m!!!!!!!!!!!!2!!!2`!c-m!!!!!!!!!! -!$`!!$m$-c2!!!!!!!!!!!!m!!!r-c-c`!!!!!!!!!!!2!!!2c-$-m!!!!!!!!!! -!$`!!!2c-cm!!!!!!!!!!!!m!!!!2rrcr!!!!!!!!!!!2!!!!!!$`rr!!!!!!!!! -!$rrrrrrrm!r`!!!!!!!!!!!!hGhGhGd!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!%!!!!!!(r!!!"!B!! -!3&!!!%"i!!"!#!!!3(J!!%#%!!""!J!!33)!!%%#!!""!J!!3)3!!%"l!!"!#i! -!IrQ!!!US!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!Im!!!(rJ!!"rm!!!IrJ!!(ri!!"rq!! -!Ir`!!(rq!!"rrJ!!Iri!!(rq!!"rrJ!!Irm!!(rlJ!"rqB!!$r`!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!r`! -!!!!!rrN!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!$rq3!!!!$rq3!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!$r!!!!rrN!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!2r -j!!$rq3!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!2m!rrN!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!rrRrq3!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!rrN!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!2rrrrN!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!2Rrq3!!rrN!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!$rrrr -j!!$rrrm!!!!!!!!!!!!!!!!!!!!!!!!!!!!!rrRjrrN!!2rj!2m!!!!!!!!!!!! -!!!!!!!!!!!!!!!$r!!$rq3!!rrN!rrN!!!!!!!!!!!!!!!!!!!!!!!!!!2m!!2r -j!!$rq3$rq3!!!!!!!!!!!!!!!!!!!!!!!!!!!2rrqIN!!!$rrrN!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!qIN!!!!!!2Rj!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!%!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!2rrrrrrrrrrr`!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!r`!!!!!!!2rr!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!$r!!!!!!!!rrm!!!!!!!!!!!!!!!!!!!!!!!! -!!!$rrrm!!!!!!!$rr`!!!!!!!!!!!!!!!!!!!!!!!!!!!2rBr`!!!!!!!2rr!!! -!!!!!!!!!!!!!!!!!!2rrrrrrrpMBr`!!rrm!rrm!!!!!!!!!!!!!!!!!!!!!rpM -Bf0MBf0MBr`$rr`$rr`!!!!!!!!!!!!!!!!!!!!$rf0MBf0MBf0Mr!!!!!2rr!!! -!!!!!!!!!!!!!!!!!!2rrrrrrrpMBr`!!!!!!rrm!!!!!!!!!!!!!!!!!!!!!!!! -!!!$rf2m!!!!!!!$rr`!!!!!!!!!!!!!!!!!!!!!!!!!!!2rrr`!!!!!!!2rr!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!$r!!!!!2rrrrm!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!2m!!2rrrrrrr`!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!rrrrrrrrrrrr!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!3 -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!rrrrrrrrrrrr!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!$r!!!!!!!!!2rr!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!2m!!!!!!!!!rb[r!!!!!!!!!!!!!!!!!!!!!!!!!!!!r`!!!!!!!!$rrrrr!!! -!!!!!!!!!!!!!!!!!!!!!!!$r!!!!!!!!!!!!!2m!!!!!!!!!!!!!!!!!!!!!!!! -!!2m!!!!!!!!!rrrrr`!!!!!!!!!!!!!!!!!!!!!!!!!!r`!!!!!!!2mVprFVr`! -!!!!!!!!!!!!!!!!!!!!!!!$r!!!!!!$r+`!!prFVr`!!!!!!!!!!!!!!!!!!!!! -!!2m!!!!!!2rh!2FVprIr!!!!!!!!!!!!!!!!!!!!!!!!r`!!!!!!rrIh+rIh+rm -!!!!!!!!!!!!!!!!!!!!!!!$r!!!!!!$rpb[h!#[hr`!!!!!!!!!!!!!!!!!!!!! -!!2m!!!!!!!$rprIhprmV!!!!!!!!!!!!!!!!!!!!!!!!r`!!!!!!!!$rrrrr+rr -r!!!!!!!!!!!!!!!!!!!!!!$r!!!!!!!!!!!!!2m!rrrr!!!!!!!!!!!!!!!!!!! -!!2rrrrrrrrrrrrrrr`!!rrm!!!!!!!!!!!!!!!!!!!!!!!!!q[RkqIVjq[Rkq3! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!3!!!(B,!!"e#`!!"*m,65PN"2i!!!!F"&S!$8* -14%`!!!"b4P*&4J!#!(jTBf`d!!d!SQPME$J!$J&+5801)`!0!IjTBh-M!!8#TQP -MFc3!"3,ZD@0c1!!&!cC@58dK!!!$IN&-8P3!!!1+4%P86!!&!jC%6%p(!!8$hQ& -XDA-!!!3Q4e@h53!!"$)!J2rr!!!!!!!!!!!!J2rr!!!!-!!!!!!!JIrr!!!!1`! -!!!!!J[rr!!!!4J!!!!!%DIrr!!!!83!!!!!%D2rr!!!#93!!!!!!J2rr!!!%@3! -!!!!!JIrr!!!'A3!!!!!!J[rr!!!Ph!!!!!!!Jrrr!!!YX!!!!!!!KIrr!!!mU`! -!!!!!K[rr!!"!Y`!!!!!!Krrr!!"#Z`!!!!!!L2rr!!"&``!!!!!!LIrr!!"*c`Y -0*f3!L[rr!!"Ij`Y0*ZJ!Lrrr!!"Mm`Y0)q3!M2rr!!"Pp`Y0*c`%DIrr!!!)B3Y -0*q!%D2rr!!!-C3Y0*m!!J2rr!!!3D3Y0*m`!JIrr!!!8E3Y0*lJ!J[rr!!!`I!Y -0*mJ!Jrrr!!!SU!Y0*m3!K2rr!!!dJ!Y0*l`!KIrr!!",d`Y0)$!!KJ!d!!"2e`Y -0*l!!K`!V!!"6f`Y0*k`!L!!p!!"Ah`Y0*kJ!LIrr!!"Ei`Y0*k3!L[rr!!"Sr`Y -0(ZJ!Lrrr!!"Y!`Y0*d`!M2rr!!"a"`Y0(Z3%D2rr!!!BF3Y0#ZJ%DIrr!!!CG3Y -0+!J!J2rr!!!DH3Y0+"3!JIrr!!!EI3Y0+$`!J[rr!!!Nf!Y0+!`!Jrrr!!!XV!Y -0+"!!KIrr!!!qV`!!!!!!K[rr!!!rX`Y0+4J!Krrr!!"%[`Y0+"J!L2rr!!"(a`Y -0+!3!LIrr!!")b`Y0*hJ!L[rr!!"Kk`Y0*Z!!Lrrr!!"Ll`Y0)r3!M2rr!!"Rq`Y -0*#`%D2rr!!!FJ3Y0+#3%DIrr!!!Fa3Y0+#`!J2rr!!!G#3Y0+'3!JIrr!!!G63Y -0+#!!J[rr!!!Ri!Y-+X3!Jrrr!!!`1!Y0+$!%D2rr!!!GN3Y0)X3%DIrr!!!H&3Y -0(P`!J2rr!!!HQ3Y0*!3!JIrr!!!I(3Y0*`3!J[rr!!!S*!Y0(Q`!Jrrr!!![Y!Y -0(P!%D2rr!!!IS3Y0)P`%DIrr!!!JT3Y0)P!!J2rr!!!KU3Y0)Q!!JIrr!!!LV3Y -0(i!!J[rr!!!iK!Y0)P3!Jrrr!!!jL!Y0)Q3!!!!!!!!MX3!!!!!!J2rr!!!Mc`! -!!!!!J2rr!!!Mh`!!!!!!JIrr!!!N"3!!!!!!J[rr!!!N#`!!!!!!Jrrr!!!N*3! -!!!!!K2rr!!!N1`!!!!!!KIrr!!!kM!!!!!!!J2rr!!!N@`!!!!!!J3!2!!!NG!! -!!!!!JJ!8!!!NM3!!!!!!J`!F!!!NTJ!!!!!!K!!K!!!N[`!!!!!!K3!Q!!!lNJ! -!!!!!jIrr!!!lU`!!!!!S!Irr!!!mP`!!!!!16hGZCA)JFQ9cEh9bBf8%6@&TEJG -#GA4dEfjc"%PMEfi%9'9iG!4'D@jN#(4LAf0XEh0P#(4LAf*XB@jV"h4LAf0[F(R -VL!: - diff --git a/src/os_mac_rsrc/app.icns b/src/os_mac_rsrc/app.icns deleted file mode 100644 index 14426113f4..0000000000 Binary files a/src/os_mac_rsrc/app.icns and /dev/null differ diff --git a/src/os_mac_rsrc/doc-txt.icns b/src/os_mac_rsrc/doc-txt.icns deleted file mode 100644 index 2219e2ce99..0000000000 Binary files a/src/os_mac_rsrc/doc-txt.icns and /dev/null differ diff --git a/src/os_mac_rsrc/doc.icns b/src/os_mac_rsrc/doc.icns deleted file mode 100644 index 984d11d047..0000000000 Binary files a/src/os_mac_rsrc/doc.icns and /dev/null differ diff --git a/src/os_unix.c b/src/os_unix.c index a18789ea43..047538d217 100644 --- a/src/os_unix.c +++ b/src/os_unix.c @@ -3779,10 +3779,7 @@ mch_setmouse(int on) #ifdef FEAT_MOUSE_URXVT if (ttym_flags == TTYM_URXVT) { - out_str_nf((char_u *) - (on - ? IF_EB("\033[?1015h", ESC_STR "[?1015h") - : IF_EB("\033[?1015l", ESC_STR "[?1015l"))); + out_str_nf((char_u *)(on ? "\033[?1015h" : "\033[?1015l")); mouse_ison = on; } #endif @@ -3790,10 +3787,7 @@ mch_setmouse(int on) if (ttym_flags == TTYM_SGR) { // SGR mode supports columns above 223 - out_str_nf((char_u *) - (on - ? IF_EB("\033[?1006h", ESC_STR "[?1006h") - : IF_EB("\033[?1006l", ESC_STR "[?1006l"))); + out_str_nf((char_u *)(on ? "\033[?1006h" : "\033[?1006l")); mouse_ison = on; } @@ -3803,8 +3797,7 @@ mch_setmouse(int on) bevalterm_ison = (p_bevalterm && on); if (xterm_mouse_vers > 1 && !bevalterm_ison) // disable mouse movement events, enabling is below - out_str_nf((char_u *) - (IF_EB("\033[?1003l", ESC_STR "[?1003l"))); + out_str_nf((char_u *)("\033[?1003l")); } #endif @@ -3815,16 +3808,13 @@ mch_setmouse(int on) (xterm_mouse_vers > 1 ? ( #ifdef FEAT_BEVAL_TERM - bevalterm_ison - ? IF_EB("\033[?1003h", ESC_STR "[?1003h") : + bevalterm_ison ? "\033[?1003h" : #endif - IF_EB("\033[?1002h", ESC_STR "[?1002h")) - : IF_EB("\033[?1000h", ESC_STR "[?1000h"))); + "\033[?1002h") + : "\033[?1000h")); else // disable mouse events, could probably always send the same out_str_nf((char_u *) - (xterm_mouse_vers > 1 - ? IF_EB("\033[?1002l", ESC_STR "[?1002l") - : IF_EB("\033[?1000l", ESC_STR "[?1000l"))); + (xterm_mouse_vers > 1 ? "\033[?1002l" : "\033[?1000l")); mouse_ison = on; } @@ -3892,18 +3882,15 @@ mch_setmouse(int on) // 5 = Windows UP Arrow # ifdef JSBTERM_MOUSE_NONADVANCED // Disables full feedback of pointer movements - out_str_nf((char_u *)IF_EB("\033[0~ZwLMRK1Q\033\\", - ESC_STR "[0~ZwLMRK1Q" ESC_STR "\\")); + out_str_nf((char_u *)"\033[0~ZwLMRK1Q\033\\"); # else - out_str_nf((char_u *)IF_EB("\033[0~ZwLMRK+1Q\033\\", - ESC_STR "[0~ZwLMRK+1Q" ESC_STR "\\")); + out_str_nf((char_u *)"\033[0~ZwLMRK+1Q\033\\"); # endif mouse_ison = TRUE; } else { - out_str_nf((char_u *)IF_EB("\033[0~ZwQ\033\\", - ESC_STR "[0~ZwQ" ESC_STR "\\")); + out_str_nf((char_u *)"\033[0~ZwQ\033\\"); mouse_ison = FALSE; } } @@ -3949,8 +3936,7 @@ check_mouse_termcode(void) ) { set_mouse_termcode(KS_MOUSE, (char_u *)(term_is_8bit(T_NAME) - ? IF_EB("\233M", CSI_STR "M") - : IF_EB("\033[M", ESC_STR "[M"))); + ? "\233M" : "\033[M")); if (*p_mouse != NUL) { // force mouse off and maybe on to send possibly new mouse @@ -3969,8 +3955,7 @@ check_mouse_termcode(void) && !gui.in_use # endif ) - set_mouse_termcode(KS_GPM_MOUSE, - (char_u *)IF_EB("\033MG", ESC_STR "MG")); + set_mouse_termcode(KS_GPM_MOUSE, (char_u *)"\033MG"); else del_mouse_termcode(KS_GPM_MOUSE); # endif @@ -3981,7 +3966,7 @@ check_mouse_termcode(void) && !gui.in_use # endif ) - set_mouse_termcode(KS_MOUSE, (char_u *)IF_EB("\033MS", ESC_STR "MS")); + set_mouse_termcode(KS_MOUSE, (char_u *)"\033MS"); # endif # ifdef FEAT_MOUSE_JSB @@ -3991,8 +3976,7 @@ check_mouse_termcode(void) && !gui.in_use # endif ) - set_mouse_termcode(KS_JSBTERM_MOUSE, - (char_u *)IF_EB("\033[0~zw", ESC_STR "[0~zw")); + set_mouse_termcode(KS_JSBTERM_MOUSE, (char_u *)"\033[0~zw"); else del_mouse_termcode(KS_JSBTERM_MOUSE); # endif @@ -4005,8 +3989,7 @@ check_mouse_termcode(void) && !gui.in_use # endif ) - set_mouse_termcode(KS_NETTERM_MOUSE, - (char_u *)IF_EB("\033}", ESC_STR "}")); + set_mouse_termcode(KS_NETTERM_MOUSE, (char_u *)"\033}"); else del_mouse_termcode(KS_NETTERM_MOUSE); # endif @@ -4019,7 +4002,7 @@ check_mouse_termcode(void) # endif ) set_mouse_termcode(KS_DEC_MOUSE, (char_u *)(term_is_8bit(T_NAME) - ? IF_EB("\233", CSI_STR) : IF_EB("\033[", ESC_STR "["))); + ? "\233" : "\033[")); else del_mouse_termcode(KS_DEC_MOUSE); # endif @@ -4030,8 +4013,7 @@ check_mouse_termcode(void) && !gui.in_use # endif ) - set_mouse_termcode(KS_PTERM_MOUSE, - (char_u *) IF_EB("\033[", ESC_STR "[")); + set_mouse_termcode(KS_PTERM_MOUSE, (char_u *)"\033["); else del_mouse_termcode(KS_PTERM_MOUSE); # endif @@ -4043,8 +4025,7 @@ check_mouse_termcode(void) ) { set_mouse_termcode(KS_URXVT_MOUSE, (char_u *)(term_is_8bit(T_NAME) - ? IF_EB("\233*M", CSI_STR "*M") - : IF_EB("\033[*M", ESC_STR "[*M"))); + ? "\233*M" : "\033[*M")); if (*p_mouse != NUL) { @@ -4062,12 +4043,10 @@ check_mouse_termcode(void) ) { set_mouse_termcode(KS_SGR_MOUSE, (char_u *)(term_is_8bit(T_NAME) - ? IF_EB("\233<*M", CSI_STR "<*M") - : IF_EB("\033[<*M", ESC_STR "[<*M"))); + ? "\233<*M" : "\033[<*M")); set_mouse_termcode(KS_SGR_MOUSE_RELEASE, (char_u *)(term_is_8bit(T_NAME) - ? IF_EB("\233<*m", CSI_STR "<*m") - : IF_EB("\033[<*m", ESC_STR "[<*m"))); + ? "\233<*m" : "\033[<*m")); if (*p_mouse != NUL) { @@ -6126,7 +6105,7 @@ WaitForCharOrMouse(long msec, int *interrupted, int ignore_input) { WantQueryMouse = FALSE; if (!no_query_mouse_for_testing) - mch_write((char_u *)IF_EB("\033[1'|", ESC_STR "[1'|"), 5); + mch_write((char_u *)"\033[1'|", 5); } #endif @@ -8229,114 +8208,3 @@ xsmp_close(void) } } #endif // USE_XSMP - - -#ifdef EBCDIC -// Translate character to its CTRL- value -char CtrlTable[] = -{ -/* 00 - 5E */ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -/* ^ */ 0x1E, -/* - */ 0x1F, -/* 61 - 6C */ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -/* _ */ 0x1F, -/* 6E - 80 */ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -/* a */ 0x01, -/* b */ 0x02, -/* c */ 0x03, -/* d */ 0x37, -/* e */ 0x2D, -/* f */ 0x2E, -/* g */ 0x2F, -/* h */ 0x16, -/* i */ 0x05, -/* 8A - 90 */ - 0, 0, 0, 0, 0, 0, 0, -/* j */ 0x15, -/* k */ 0x0B, -/* l */ 0x0C, -/* m */ 0x0D, -/* n */ 0x0E, -/* o */ 0x0F, -/* p */ 0x10, -/* q */ 0x11, -/* r */ 0x12, -/* 9A - A1 */ - 0, 0, 0, 0, 0, 0, 0, 0, -/* s */ 0x13, -/* t */ 0x3C, -/* u */ 0x3D, -/* v */ 0x32, -/* w */ 0x26, -/* x */ 0x18, -/* y */ 0x19, -/* z */ 0x3F, -/* AA - AC */ - 0, 0, 0, -/* [ */ 0x27, -/* AE - BC */ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -/* ] */ 0x1D, -/* BE - C0 */ 0, 0, 0, -/* A */ 0x01, -/* B */ 0x02, -/* C */ 0x03, -/* D */ 0x37, -/* E */ 0x2D, -/* F */ 0x2E, -/* G */ 0x2F, -/* H */ 0x16, -/* I */ 0x05, -/* CA - D0 */ 0, 0, 0, 0, 0, 0, 0, -/* J */ 0x15, -/* K */ 0x0B, -/* L */ 0x0C, -/* M */ 0x0D, -/* N */ 0x0E, -/* O */ 0x0F, -/* P */ 0x10, -/* Q */ 0x11, -/* R */ 0x12, -/* DA - DF */ 0, 0, 0, 0, 0, 0, -/* \ */ 0x1C, -/* E1 */ 0, -/* S */ 0x13, -/* T */ 0x3C, -/* U */ 0x3D, -/* V */ 0x32, -/* W */ 0x26, -/* X */ 0x18, -/* Y */ 0x19, -/* Z */ 0x3F, -/* EA - FF*/ 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -}; - -char MetaCharTable[]= -{// 0 1 2 3 4 5 6 7 8 9 A B C D E F - 0, 0, 0, 0,'\\', 0,'F', 0,'W','M','N', 0, 0, 0, 0, 0, - 0, 0, 0, 0,']', 0, 0,'G', 0, 0,'R','O', 0, 0, 0, 0, - '@','A','B','C','D','E', 0, 0,'H','I','J','K','L', 0, 0, 0, - 'P','Q', 0,'S','T','U','V', 0,'X','Y','Z','[', 0, 0,'^', 0 -}; - - -// TODO: Use characters NOT numbers!!! -char CtrlCharTable[]= -{// 0 1 2 3 4 5 6 7 8 9 A B C D E F - 124,193,194,195, 0,201, 0, 0, 0, 0, 0,210,211,212,213,214, - 215,216,217,226, 0,209,200, 0,231,232, 0, 0,224,189, 95,109, - 0, 0, 0, 0, 0, 0,230,173, 0, 0, 0, 0, 0,197,198,199, - 0, 0,229, 0, 0, 0, 0,196, 0, 0, 0, 0,227,228, 0,233, -}; - - -#endif diff --git a/src/os_win32.c b/src/os_win32.c index 36b2cf1266..d2d2fe7a30 100644 --- a/src/os_win32.c +++ b/src/os_win32.c @@ -241,11 +241,11 @@ static char_u *exe_path = NULL; static BOOL win8_or_later = FALSE; -# if defined(__GNUC__) && !defined(__MINGW32__) && !defined(__CYGWIN__) -# define UChar UnicodeChar -# else -# define UChar uChar.UnicodeChar -# endif +#if defined(__GNUC__) && !defined(__MINGW32__) && !defined(__CYGWIN__) +# define UChar UnicodeChar +#else +# define UChar uChar.UnicodeChar +#endif #if !defined(FEAT_GUI_MSWIN) || defined(VIMDLL) // Dynamic loading for portability @@ -452,7 +452,7 @@ wait_for_single_object( HANDLE hHandle, DWORD dwMilliseconds) { - if (read_console_input(NULL, NULL, -2, NULL)) + if (read_console_input(NULL, NULL, (DWORD)-2, NULL)) return WAIT_OBJECT_0; return WaitForSingleObject(hHandle, dwMilliseconds); } @@ -724,7 +724,7 @@ dyn_libintl_init(void) for (i = 0; libintl_entry[i].name != NULL && libintl_entry[i].ptr != NULL; ++i) { - if ((*libintl_entry[i].ptr = (FARPROC)GetProcAddress(hLibintlDLL, + if ((*libintl_entry[i].ptr = GetProcAddress(hLibintlDLL, libintl_entry[i].name)) == NULL) { dyn_libintl_end(); @@ -2077,13 +2077,13 @@ theend: buf[len++] = typeahead[0]; mch_memmove(typeahead, typeahead + 1, --typeaheadlen); } -# ifdef FEAT_JOB_CHANNEL +# ifdef FEAT_JOB_CHANNEL if (len > 0) { buf[len] = NUL; ch_log(NULL, "raw key input: \"%s\"", buf); } -# endif +# endif return len; #else // FEAT_GUI_MSWIN @@ -7874,12 +7874,12 @@ vtp_sgr_bulk( vtp_sgr_bulks(1, args); } -#define FAST256(x) \ +# define FAST256(x) \ if ((*p-- = "0123456789"[(n = x % 10)]) \ && x >= 10 && (*p-- = "0123456789"[((m = x % 100) - n) / 10]) \ && x >= 100 && (*p-- = "012"[((x & 0xff) - m) / 100])); -#define FAST256CASE(x) \ +# define FAST256CASE(x) \ case x: \ FAST256(newargs[x - 1]); @@ -7888,8 +7888,8 @@ vtp_sgr_bulks( int argc, int *args) { -#define MAXSGR 16 -#define SGRBUFSIZE 2 + 4 * MAXSGR + 1 // '\033[' + SGR + 'm' +# define MAXSGR 16 +# define SGRBUFSIZE 2 + 4 * MAXSGR + 1 // '\033[' + SGR + 'm' char_u buf[SGRBUFSIZE]; char_u *p; int in, out; diff --git a/src/proto/dict.pro b/src/proto/dict.pro index d6cf152263..7db011d210 100644 --- a/src/proto/dict.pro +++ b/src/proto/dict.pro @@ -12,7 +12,7 @@ void dict_free_items(int copyID); dictitem_T *dictitem_alloc(char_u *key); void dictitem_remove(dict_T *dict, dictitem_T *item); void dictitem_free(dictitem_T *item); -dict_T *dict_copy(dict_T *orig, int deep, int copyID); +dict_T *dict_copy(dict_T *orig, int deep, int top, int copyID); int dict_wrong_func_name(dict_T *d, typval_T *tv, char_u *name); int dict_add(dict_T *d, dictitem_T *item); int dict_add_number(dict_T *d, char *key, varnumber_T nr); diff --git a/src/proto/eval.pro b/src/proto/eval.pro index abb9c565e2..8be58855d7 100644 --- a/src/proto/eval.pro +++ b/src/proto/eval.pro @@ -69,7 +69,7 @@ int eval_isnamec(int c); int eval_isnamec1(int c); int eval_isdictc(int c); int handle_subscript(char_u **arg, char_u *name_start, typval_T *rettv, evalarg_T *evalarg, int verbose); -int item_copy(typval_T *from, typval_T *to, int deep, int copyID); +int item_copy(typval_T *from, typval_T *to, int deep, int top, int copyID); void echo_one(typval_T *rettv, int with_space, int *atstart, int *needclr); void ex_echo(exarg_T *eap); void ex_echohl(exarg_T *eap); diff --git a/src/proto/evalfunc.pro b/src/proto/evalfunc.pro index e508604983..bcb4ef5570 100644 --- a/src/proto/evalfunc.pro +++ b/src/proto/evalfunc.pro @@ -1,5 +1,4 @@ /* evalfunc.c */ -void sortFunctions(void); char_u *get_function_name(expand_T *xp, int idx); char_u *get_expr_name(expand_T *xp, int idx); int find_internal_func(char_u *name); @@ -7,7 +6,7 @@ int has_internal_func(char_u *name); char *internal_func_name(int idx); int internal_func_check_arg_types(type2_T *types, int idx, int argcount, cctx_T *cctx); void internal_func_get_argcount(int idx, int *argcount, int *min_argcount); -type_T *internal_func_ret_type(int idx, int argcount, type2_T *argtypes); +type_T *internal_func_ret_type(int idx, int argcount, type2_T *argtypes, type_T **decl_type); int internal_func_is_map(int idx); int check_internal_func(int idx, int argcount); int call_internal_func(char_u *name, int argcount, typval_T *argvars, typval_T *rettv); diff --git a/src/proto/list.pro b/src/proto/list.pro index 5b7414bce2..468775e59a 100644 --- a/src/proto/list.pro +++ b/src/proto/list.pro @@ -39,7 +39,7 @@ int list_extend(list_T *l1, list_T *l2, listitem_T *bef); int list_concat(list_T *l1, list_T *l2, typval_T *tv); list_T *list_slice(list_T *ol, long n1, long n2); int list_slice_or_index(list_T *list, int range, varnumber_T n1_arg, varnumber_T n2_arg, int exclusive, typval_T *rettv, int verbose); -list_T *list_copy(list_T *orig, int deep, int copyID); +list_T *list_copy(list_T *orig, int deep, int top, int copyID); void vimlist_remove(list_T *l, listitem_T *item, listitem_T *item2); char_u *list2string(typval_T *tv, int copyID, int restore_copyID); int list_join(garray_T *gap, list_T *l, char_u *sep, int echo_style, int restore_copyID, int copyID); diff --git a/src/proto/normal.pro b/src/proto/normal.pro index 70c0b97fc7..106d0e1395 100644 --- a/src/proto/normal.pro +++ b/src/proto/normal.pro @@ -1,5 +1,4 @@ /* normal.c */ -void f_internal_get_nv_cmdchar(typval_T *argvars, typval_T *rettv); void normal_cmd(oparg_T *oap, int toplevel); void check_visual_highlight(void); void end_visual_mode(void); diff --git a/src/proto/testing.pro b/src/proto/testing.pro index 1277a2e05b..2192e91ec7 100644 --- a/src/proto/testing.pro +++ b/src/proto/testing.pro @@ -32,7 +32,6 @@ void f_test_null_partial(typval_T *argvars, typval_T *rettv); void f_test_null_string(typval_T *argvars, typval_T *rettv); void f_test_unknown(typval_T *argvars, typval_T *rettv); void f_test_void(typval_T *argvars, typval_T *rettv); -void f_test_scrollbar(typval_T *argvars, typval_T *rettv); void f_test_setmouse(typval_T *argvars, typval_T *rettv); void f_test_gui_event(typval_T *argvars, typval_T *rettv); void f_test_settime(typval_T *argvars, typval_T *rettv); diff --git a/src/proto/vim9compile.pro b/src/proto/vim9compile.pro index cb95fdfb6b..b7f7539215 100644 --- a/src/proto/vim9compile.pro +++ b/src/proto/vim9compile.pro @@ -4,6 +4,7 @@ int arg_exists(char_u *name, size_t len, int *idxp, type_T **type, int *gen_load int script_is_vim9(void); int script_var_exists(char_u *name, size_t len, cctx_T *cctx); int check_defined(char_u *p, size_t len, cctx_T *cctx, int is_arg); +int need_type_where(type_T *actual, type_T *expected, int offset, where_T where, cctx_T *cctx, int silent, int actual_is_const); int need_type(type_T *actual, type_T *expected, int offset, int arg_idx, cctx_T *cctx, int silent, int actual_is_const); lvar_T *reserve_local(cctx_T *cctx, char_u *name, size_t len, int isConst, type_T *type); int get_script_item_idx(int sid, char_u *name, int check_writable, cctx_T *cctx); diff --git a/src/proto/vim9type.pro b/src/proto/vim9type.pro index 1c80cbf551..fb3cb8d145 100644 --- a/src/proto/vim9type.pro +++ b/src/proto/vim9type.pro @@ -2,6 +2,7 @@ void clear_type_list(garray_T *gap); type_T *alloc_type(type_T *type); void free_type(type_T *type); +void set_tv_type(typval_T *tv, type_T *type); type_T *get_list_type(type_T *member_type, garray_T *type_gap); type_T *get_dict_type(type_T *member_type, garray_T *type_gap); type_T *alloc_func_type(type_T *ret_type, int argcount, garray_T *type_gap); @@ -25,6 +26,7 @@ int push_type_stack(cctx_T *cctx, type_T *type); int push_type_stack2(cctx_T *cctx, type_T *type, type_T *decl_type); void set_type_on_stack(cctx_T *cctx, type_T *type, int offset); type_T *get_type_on_stack(cctx_T *cctx, int offset); +type_T *get_decl_type_on_stack(cctx_T *cctx, int offset); type_T *get_member_type_from_stack(int count, int skip, type_T **decl_type, cctx_T *cctx); char *vartype_name(vartype_T type); char *type_name(type_T *type, char **tofree); diff --git a/src/regexp.c b/src/regexp.c index 29c2d38821..81ca514924 100644 --- a/src/regexp.c +++ b/src/regexp.c @@ -231,21 +231,11 @@ init_class_tab(void) class_tab[i] = RI_DIGIT + RI_HEX + RI_WORD; else if (i >= 'a' && i <= 'f') class_tab[i] = RI_HEX + RI_WORD + RI_HEAD + RI_ALPHA + RI_LOWER; -#ifdef EBCDIC - else if ((i >= 'g' && i <= 'i') || (i >= 'j' && i <= 'r') - || (i >= 's' && i <= 'z')) -#else else if (i >= 'g' && i <= 'z') -#endif class_tab[i] = RI_WORD + RI_HEAD + RI_ALPHA + RI_LOWER; else if (i >= 'A' && i <= 'F') class_tab[i] = RI_HEX + RI_WORD + RI_HEAD + RI_ALPHA + RI_UPPER; -#ifdef EBCDIC - else if ((i >= 'G' && i <= 'I') || ( i >= 'J' && i <= 'R') - || (i >= 'S' && i <= 'Z')) -#else else if (i >= 'G' && i <= 'Z') -#endif class_tab[i] = RI_WORD + RI_HEAD + RI_ALPHA + RI_UPPER; else if (i == '_') class_tab[i] = RI_WORD + RI_HEAD; @@ -300,9 +290,6 @@ static int reg_strict; // "[abc" is illegal * META contains all characters that may be magic, except '^' and '$'. */ -#ifdef EBCDIC -static char_u META[] = "%&()*+.123456789<=>?@ACDFHIKLMOPSUVWX[_acdfhiklmnopsuvwxz{|~"; -#else // META[] is used often enough to justify turning it into a table. static char_u META_flags[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -320,7 +307,6 @@ static char_u META_flags[] = { // p s u v w x z { | ~ 1, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1 }; -#endif static int curchr; // currently parsed character // Previous character. Note: prevchr is sometimes -1 when we are not at the @@ -409,30 +395,6 @@ get_equi_class(char_u **pp) return 0; } -#ifdef EBCDIC -/* - * Table for equivalence class "c". (IBM-1047) - */ -static char *EQUIVAL_CLASS_C[16] = { - "A\x62\x63\x64\x65\x66\x67", - "C\x68", - "E\x71\x72\x73\x74", - "I\x75\x76\x77\x78", - "N\x69", - "O\xEB\xEC\xED\xEE\xEF\x80", - "U\xFB\xFC\xFD\xFE", - "Y\xBA", - "a\x42\x43\x44\x45\x46\x47", - "c\x48", - "e\x51\x52\x53\x54", - "i\x55\x56\x57\x58", - "n\x49", - "o\xCB\xCC\xCD\xCE\xCF\x70", - "u\xDB\xDC\xDD\xDE", - "y\x8D\xDF", -}; -#endif - /* * Check for a collating element "[.a.]". "pp" points to the '['. * Returns a character. Zero means that no item was recognized. Otherwise @@ -788,13 +750,7 @@ peekchr(void) if (c == NUL) curchr = '\\'; // trailing '\' - else if ( -#ifdef EBCDIC - vim_strchr(META, c) -#else - c <= '~' && META_flags[c] -#endif - ) + else if (c <= '~' && META_flags[c]) { /* * META contains everything that may be magic sometimes, diff --git a/src/regexp_bt.c b/src/regexp_bt.c index aee5c1becb..5f5e58f834 100644 --- a/src/regexp_bt.c +++ b/src/regexp_bt.c @@ -533,22 +533,6 @@ reg_equi_class(int c) if (enc_utf8 || STRCMP(p_enc, "latin1") == 0 || STRCMP(p_enc, "iso-8859-15") == 0) { -#ifdef EBCDIC - int i; - - // This might be slower than switch/case below. - for (i = 0; i < 16; i++) - { - if (vim_strchr(EQUIVAL_CLASS_C[i], c) != NULL) - { - char *p = EQUIVAL_CLASS_C[i]; - - while (*p != 0) - regmbc(*p++); - return; - } - } -#else switch (c) { // Do not use '\300' style, it results in a negative number. @@ -1012,7 +996,6 @@ reg_equi_class(int c) regmbc(0x1e95); regmbc(0x2c6c); return; } -#endif } regmbc(c); } @@ -1794,19 +1777,8 @@ collection: } else { -#ifdef EBCDIC - int alpha_only = FALSE; - - // for alphabetical range skip the gaps - // 'i'-'j', 'r'-'s', 'I'-'J' and 'R'-'S'. - if (isalpha(startc) && isalpha(endc)) - alpha_only = TRUE; -#endif while (++startc <= endc) -#ifdef EBCDIC - if (!alpha_only || isalpha(startc)) -#endif - regc(startc); + regc(startc); } startc = -1; } diff --git a/src/regexp_nfa.c b/src/regexp_nfa.c index 39f7f8ba88..c8ac8d42a9 100644 --- a/src/regexp_nfa.c +++ b/src/regexp_nfa.c @@ -698,119 +698,61 @@ nfa_emit_equi_class(int c) if (enc_utf8 || STRCMP(p_enc, "latin1") == 0 || STRCMP(p_enc, "iso-8859-15") == 0) { -#ifdef EBCDIC -# define A_circumflex 0x62 -# define A_diaeresis 0x63 -# define A_grave 0x64 -# define A_acute 0x65 -# define A_virguilla 0x66 -# define A_ring 0x67 -# define C_cedilla 0x68 -# define E_acute 0x71 -# define E_circumflex 0x72 -# define E_diaeresis 0x73 -# define E_grave 0x74 -# define I_acute 0x75 -# define I_circumflex 0x76 -# define I_diaeresis 0x77 -# define I_grave 0x78 -# define N_virguilla 0x69 -# define O_circumflex 0xeb -# define O_diaeresis 0xec -# define O_grave 0xed -# define O_acute 0xee -# define O_virguilla 0xef -# define O_slash 0x80 -# define U_circumflex 0xfb -# define U_diaeresis 0xfc -# define U_grave 0xfd -# define U_acute 0xfe -# define Y_acute 0xba -# define a_grave 0x42 -# define a_acute 0x43 -# define a_circumflex 0x44 -# define a_virguilla 0x45 -# define a_diaeresis 0x46 -# define a_ring 0x47 -# define c_cedilla 0x48 -# define e_grave 0x51 -# define e_acute 0x52 -# define e_circumflex 0x53 -# define e_diaeresis 0x54 -# define i_grave 0x55 -# define i_acute 0x56 -# define i_circumflex 0x57 -# define i_diaeresis 0x58 -# define n_virguilla 0x49 -# define o_grave 0xcb -# define o_acute 0xcc -# define o_circumflex 0xcd -# define o_virguilla 0xce -# define o_diaeresis 0xcf -# define o_slash 0x70 -# define u_grave 0xdb -# define u_acute 0xdc -# define u_circumflex 0xdd -# define u_diaeresis 0xde -# define y_acute 0x8d -# define y_diaeresis 0xdf -#else -# define A_grave 0xc0 -# define A_acute 0xc1 -# define A_circumflex 0xc2 -# define A_virguilla 0xc3 -# define A_diaeresis 0xc4 -# define A_ring 0xc5 -# define C_cedilla 0xc7 -# define E_grave 0xc8 -# define E_acute 0xc9 -# define E_circumflex 0xca -# define E_diaeresis 0xcb -# define I_grave 0xcc -# define I_acute 0xcd -# define I_circumflex 0xce -# define I_diaeresis 0xcf -# define N_virguilla 0xd1 -# define O_grave 0xd2 -# define O_acute 0xd3 -# define O_circumflex 0xd4 -# define O_virguilla 0xd5 -# define O_diaeresis 0xd6 -# define O_slash 0xd8 -# define U_grave 0xd9 -# define U_acute 0xda -# define U_circumflex 0xdb -# define U_diaeresis 0xdc -# define Y_acute 0xdd -# define a_grave 0xe0 -# define a_acute 0xe1 -# define a_circumflex 0xe2 -# define a_virguilla 0xe3 -# define a_diaeresis 0xe4 -# define a_ring 0xe5 -# define c_cedilla 0xe7 -# define e_grave 0xe8 -# define e_acute 0xe9 -# define e_circumflex 0xea -# define e_diaeresis 0xeb -# define i_grave 0xec -# define i_acute 0xed -# define i_circumflex 0xee -# define i_diaeresis 0xef -# define n_virguilla 0xf1 -# define o_grave 0xf2 -# define o_acute 0xf3 -# define o_circumflex 0xf4 -# define o_virguilla 0xf5 -# define o_diaeresis 0xf6 -# define o_slash 0xf8 -# define u_grave 0xf9 -# define u_acute 0xfa -# define u_circumflex 0xfb -# define u_diaeresis 0xfc -# define y_acute 0xfd -# define y_diaeresis 0xff -#endif +#define A_grave 0xc0 +#define A_acute 0xc1 +#define A_circumflex 0xc2 +#define A_virguilla 0xc3 +#define A_diaeresis 0xc4 +#define A_ring 0xc5 +#define C_cedilla 0xc7 +#define E_grave 0xc8 +#define E_acute 0xc9 +#define E_circumflex 0xca +#define E_diaeresis 0xcb +#define I_grave 0xcc +#define I_acute 0xcd +#define I_circumflex 0xce +#define I_diaeresis 0xcf +#define N_virguilla 0xd1 +#define O_grave 0xd2 +#define O_acute 0xd3 +#define O_circumflex 0xd4 +#define O_virguilla 0xd5 +#define O_diaeresis 0xd6 +#define O_slash 0xd8 +#define U_grave 0xd9 +#define U_acute 0xda +#define U_circumflex 0xdb +#define U_diaeresis 0xdc +#define Y_acute 0xdd +#define a_grave 0xe0 +#define a_acute 0xe1 +#define a_circumflex 0xe2 +#define a_virguilla 0xe3 +#define a_diaeresis 0xe4 +#define a_ring 0xe5 +#define c_cedilla 0xe7 +#define e_grave 0xe8 +#define e_acute 0xe9 +#define e_circumflex 0xea +#define e_diaeresis 0xeb +#define i_grave 0xec +#define i_acute 0xed +#define i_circumflex 0xee +#define i_diaeresis 0xef +#define n_virguilla 0xf1 +#define o_grave 0xf2 +#define o_acute 0xf3 +#define o_circumflex 0xf4 +#define o_virguilla 0xf5 +#define o_diaeresis 0xf6 +#define o_slash 0xf8 +#define u_grave 0xf9 +#define u_acute 0xfa +#define u_circumflex 0xfb +#define u_diaeresis 0xfc +#define y_acute 0xfd +#define y_diaeresis 0xff switch (c) { case 'A': case A_grave: case A_acute: case A_circumflex: @@ -2041,24 +1983,13 @@ collection: } else { -#ifdef EBCDIC - int alpha_only = FALSE; - - // for alphabetical range skip the gaps - // 'i'-'j', 'r'-'s', 'I'-'J' and 'R'-'S'. - if (isalpha(startc) && isalpha(endc)) - alpha_only = TRUE; -#endif // Emit the range. "startc" was already emitted, so // skip it. for (c = startc + 1; c <= endc; c++) -#ifdef EBCDIC - if (!alpha_only || isalpha(startc)) -#endif - { - EMIT(c); - EMIT(NFA_CONCAT); - } + { + EMIT(c); + EMIT(NFA_CONCAT); + } } emit_range = FALSE; startc = -1; diff --git a/src/register.c b/src/register.c index 2633f0238b..9406ff84b8 100644 --- a/src/register.c +++ b/src/register.c @@ -2297,21 +2297,7 @@ get_register_name(int num) return '+'; #endif else - { -#ifdef EBCDIC - int i; - - // EBCDIC is really braindead ... - i = 'a' + (num - 10); - if (i > 'i') - i += 7; - if (i > 'r') - i += 8; - return i; -#else return num + 'a' - 10; -#endif - } } #if defined(FEAT_EVAL) || defined(PROTO) diff --git a/src/screen.c b/src/screen.c index 33999fe454..e3a7f72929 100644 --- a/src/screen.c +++ b/src/screen.c @@ -1812,7 +1812,7 @@ screen_start_highlight(int attr) char buf[20]; // The GUI handles this internally. - sprintf(buf, IF_EB("\033|%dh", ESC_STR "|%dh"), attr); + sprintf(buf, "\033|%dh", attr); OUT_STR(buf); } else @@ -1962,7 +1962,7 @@ screen_stop_highlight(void) char buf[20]; // use internal GUI code - sprintf(buf, IF_EB("\033|%dH", ESC_STR "|%dH"), screen_attr); + sprintf(buf, "\033|%dH", screen_attr); OUT_STR(buf); } else diff --git a/src/scriptfile.c b/src/scriptfile.c index dec512a72b..cee3f5440b 100644 --- a/src/scriptfile.c +++ b/src/scriptfile.c @@ -2294,7 +2294,7 @@ script_autoload( // Try loading the package from $VIMRUNTIME/autoload/.vim // Use "ret_sid" to avoid loading the same script again. - if (source_in_path(p_rtp, scriptname, 0, &ret_sid) == OK) + if (source_in_path(p_rtp, scriptname, DIP_START, &ret_sid) == OK) ret = TRUE; } diff --git a/src/spell.c b/src/spell.c index 1fae9b74b9..86f5750987 100644 --- a/src/spell.c +++ b/src/spell.c @@ -2534,7 +2534,6 @@ close_spellbuf(buf_T *buf) /* * Init the chartab used for spelling for ASCII. - * EBCDIC is not supported! */ void clear_spell_chartab(spelltab_T *sp) diff --git a/src/strings.c b/src/strings.c index f6affd6fe0..7a99cd9642 100644 --- a/src/strings.c +++ b/src/strings.c @@ -342,11 +342,7 @@ vim_strup( { p2 = p; while ((c = *p2) != NUL) -#ifdef EBCDIC - *p2++ = isalpha(c) ? toupper(c) : c; -#else *p2++ = (c < 'a' || c > 'z') ? c : (c - 0x20); -#endif } } diff --git a/src/structs.h b/src/structs.h index 4a8d280d20..06c4dbdccf 100644 --- a/src/structs.h +++ b/src/structs.h @@ -136,9 +136,6 @@ typedef struct { * (a normal mark is a lnum/col pair, the same as a file position) */ -// (Note: for EBCDIC there are more than 26, because there are gaps in the -// alphabet coding. To minimize changes to the code, I decided to just -// increase the number of possible marks. #define NMARKS ('z' - 'a' + 1) // max. # of named marks #define EXTRA_MARKS 10 // marks 0-9 #define JUMPLISTSIZE 100 // max. # of marks in jump list diff --git a/src/term.c b/src/term.c index 8874c8fc6b..686a4f0548 100644 --- a/src/term.c +++ b/src/term.c @@ -222,48 +222,48 @@ static struct builtin_term builtin_termcaps[] = * GUI pseudo term-cap. */ {(int)KS_NAME, "gui"}, - {(int)KS_CE, IF_EB("\033|$", ESC_STR "|$")}, - {(int)KS_AL, IF_EB("\033|i", ESC_STR "|i")}, + {(int)KS_CE, "\033|$"}, + {(int)KS_AL, "\033|i"}, # ifdef TERMINFO - {(int)KS_CAL, IF_EB("\033|%p1%dI", ESC_STR "|%p1%dI")}, + {(int)KS_CAL, "\033|%p1%dI"}, # else - {(int)KS_CAL, IF_EB("\033|%dI", ESC_STR "|%dI")}, + {(int)KS_CAL, "\033|%dI"}, # endif - {(int)KS_DL, IF_EB("\033|d", ESC_STR "|d")}, + {(int)KS_DL, "\033|d"}, # ifdef TERMINFO - {(int)KS_CDL, IF_EB("\033|%p1%dD", ESC_STR "|%p1%dD")}, - {(int)KS_CS, IF_EB("\033|%p1%d;%p2%dR", ESC_STR "|%p1%d;%p2%dR")}, - {(int)KS_CSV, IF_EB("\033|%p1%d;%p2%dV", ESC_STR "|%p1%d;%p2%dV")}, + {(int)KS_CDL, "\033|%p1%dD"}, + {(int)KS_CS, "\033|%p1%d;%p2%dR"}, + {(int)KS_CSV, "\033|%p1%d;%p2%dV"}, # else - {(int)KS_CDL, IF_EB("\033|%dD", ESC_STR "|%dD")}, - {(int)KS_CS, IF_EB("\033|%d;%dR", ESC_STR "|%d;%dR")}, - {(int)KS_CSV, IF_EB("\033|%d;%dV", ESC_STR "|%d;%dV")}, + {(int)KS_CDL, "\033|%dD"}, + {(int)KS_CS, "\033|%d;%dR"}, + {(int)KS_CSV, "\033|%d;%dV"}, # endif - {(int)KS_CL, IF_EB("\033|C", ESC_STR "|C")}, + {(int)KS_CL, "\033|C"}, // attributes switched on with 'h', off with * 'H' - {(int)KS_ME, IF_EB("\033|31H", ESC_STR "|31H")}, // HL_ALL - {(int)KS_MR, IF_EB("\033|1h", ESC_STR "|1h")}, // HL_INVERSE - {(int)KS_MD, IF_EB("\033|2h", ESC_STR "|2h")}, // HL_BOLD - {(int)KS_SE, IF_EB("\033|16H", ESC_STR "|16H")}, // HL_STANDOUT - {(int)KS_SO, IF_EB("\033|16h", ESC_STR "|16h")}, // HL_STANDOUT - {(int)KS_UE, IF_EB("\033|8H", ESC_STR "|8H")}, // HL_UNDERLINE - {(int)KS_US, IF_EB("\033|8h", ESC_STR "|8h")}, // HL_UNDERLINE - {(int)KS_UCE, IF_EB("\033|8C", ESC_STR "|8C")}, // HL_UNDERCURL - {(int)KS_UCS, IF_EB("\033|8c", ESC_STR "|8c")}, // HL_UNDERCURL - {(int)KS_STE, IF_EB("\033|4C", ESC_STR "|4C")}, // HL_STRIKETHROUGH - {(int)KS_STS, IF_EB("\033|4c", ESC_STR "|4c")}, // HL_STRIKETHROUGH - {(int)KS_CZR, IF_EB("\033|4H", ESC_STR "|4H")}, // HL_ITALIC - {(int)KS_CZH, IF_EB("\033|4h", ESC_STR "|4h")}, // HL_ITALIC - {(int)KS_VB, IF_EB("\033|f", ESC_STR "|f")}, + {(int)KS_ME, "\033|31H"}, // HL_ALL + {(int)KS_MR, "\033|1h"}, // HL_INVERSE + {(int)KS_MD, "\033|2h"}, // HL_BOLD + {(int)KS_SE, "\033|16H"}, // HL_STANDOUT + {(int)KS_SO, "\033|16h"}, // HL_STANDOUT + {(int)KS_UE, "\033|8H"}, // HL_UNDERLINE + {(int)KS_US, "\033|8h"}, // HL_UNDERLINE + {(int)KS_UCE, "\033|8C"}, // HL_UNDERCURL + {(int)KS_UCS, "\033|8c"}, // HL_UNDERCURL + {(int)KS_STE, "\033|4C"}, // HL_STRIKETHROUGH + {(int)KS_STS, "\033|4c"}, // HL_STRIKETHROUGH + {(int)KS_CZR, "\033|4H"}, // HL_ITALIC + {(int)KS_CZH, "\033|4h"}, // HL_ITALIC + {(int)KS_VB, "\033|f"}, {(int)KS_MS, "y"}, {(int)KS_UT, "y"}, {(int)KS_XN, "y"}, {(int)KS_LE, "\b"}, // cursor-left = BS {(int)KS_ND, "\014"}, // cursor-right = CTRL-L # ifdef TERMINFO - {(int)KS_CM, IF_EB("\033|%p1%d;%p2%dM", ESC_STR "|%p1%d;%p2%dM")}, + {(int)KS_CM, "\033|%p1%d;%p2%dM"}, # else - {(int)KS_CM, IF_EB("\033|%d;%dM", ESC_STR "|%d;%dM")}, + {(int)KS_CM, "\033|%d;%dM"}, # endif // there are no key sequences here, the GUI sequences are recognized // in check_termcode() @@ -438,34 +438,34 @@ static struct builtin_term builtin_termcaps[] = * standard ANSI terminal, default for unix */ {(int)KS_NAME, "ansi"}, - {(int)KS_CE, IF_EB("\033[K", ESC_STR "[K")}, - {(int)KS_AL, IF_EB("\033[L", ESC_STR "[L")}, + {(int)KS_CE, "\033[K"}, + {(int)KS_AL, "\033[L"}, # ifdef TERMINFO - {(int)KS_CAL, IF_EB("\033[%p1%dL", ESC_STR "[%p1%dL")}, + {(int)KS_CAL, "\033[%p1%dL"}, # else - {(int)KS_CAL, IF_EB("\033[%dL", ESC_STR "[%dL")}, + {(int)KS_CAL, "\033[%dL"}, # endif - {(int)KS_DL, IF_EB("\033[M", ESC_STR "[M")}, + {(int)KS_DL, "\033[M"}, # ifdef TERMINFO - {(int)KS_CDL, IF_EB("\033[%p1%dM", ESC_STR "[%p1%dM")}, + {(int)KS_CDL, "\033[%p1%dM"}, # else - {(int)KS_CDL, IF_EB("\033[%dM", ESC_STR "[%dM")}, + {(int)KS_CDL, "\033[%dM"}, # endif - {(int)KS_CL, IF_EB("\033[H\033[2J", ESC_STR "[H" ESC_STR_nc "[2J")}, - {(int)KS_ME, IF_EB("\033[0m", ESC_STR "[0m")}, - {(int)KS_MR, IF_EB("\033[7m", ESC_STR "[7m")}, + {(int)KS_CL, "\033[H\033[2J"}, + {(int)KS_ME, "\033[0m"}, + {(int)KS_MR, "\033[7m"}, {(int)KS_MS, "y"}, {(int)KS_UT, "y"}, // guessed {(int)KS_LE, "\b"}, # ifdef TERMINFO - {(int)KS_CM, IF_EB("\033[%i%p1%d;%p2%dH", ESC_STR "[%i%p1%d;%p2%dH")}, + {(int)KS_CM, "\033[%i%p1%d;%p2%dH"}, # else - {(int)KS_CM, IF_EB("\033[%i%d;%dH", ESC_STR "[%i%d;%dH")}, + {(int)KS_CM, "\033[%i%d;%dH"}, # endif # ifdef TERMINFO - {(int)KS_CRI, IF_EB("\033[%p1%dC", ESC_STR "[%p1%dC")}, + {(int)KS_CRI, "\033[%p1%dC"}, # else - {(int)KS_CRI, IF_EB("\033[%dC", ESC_STR "[%dC")}, + {(int)KS_CRI, "\033[%dC"}, # endif # endif @@ -691,98 +691,97 @@ static struct builtin_term builtin_termcaps[] = * - keyboard languages (CSI ? 26 n) */ {(int)KS_NAME, "vt320"}, - {(int)KS_CE, IF_EB("\033[K", ESC_STR "[K")}, - {(int)KS_AL, IF_EB("\033[L", ESC_STR "[L")}, + {(int)KS_CE, "\033[K"}, + {(int)KS_AL, "\033[L"}, # ifdef TERMINFO - {(int)KS_CAL, IF_EB("\033[%p1%dL", ESC_STR "[%p1%dL")}, + {(int)KS_CAL, "\033[%p1%dL"}, # else - {(int)KS_CAL, IF_EB("\033[%dL", ESC_STR "[%dL")}, + {(int)KS_CAL, "\033[%dL"}, # endif - {(int)KS_DL, IF_EB("\033[M", ESC_STR "[M")}, + {(int)KS_DL, "\033[M"}, # ifdef TERMINFO - {(int)KS_CDL, IF_EB("\033[%p1%dM", ESC_STR "[%p1%dM")}, + {(int)KS_CDL, "\033[%p1%dM"}, # else - {(int)KS_CDL, IF_EB("\033[%dM", ESC_STR "[%dM")}, + {(int)KS_CDL, "\033[%dM"}, # endif - {(int)KS_CL, IF_EB("\033[H\033[2J", ESC_STR "[H" ESC_STR_nc "[2J")}, - {(int)KS_CD, IF_EB("\033[J", ESC_STR "[J")}, + {(int)KS_CL, "\033[H\033[2J"}, + {(int)KS_CD, "\033[J"}, {(int)KS_CCO, "8"}, // allow 8 colors - {(int)KS_ME, IF_EB("\033[0m", ESC_STR "[0m")}, - {(int)KS_MR, IF_EB("\033[7m", ESC_STR "[7m")}, - {(int)KS_MD, IF_EB("\033[1m", ESC_STR "[1m")}, // bold mode - {(int)KS_SE, IF_EB("\033[22m", ESC_STR "[22m")},// normal mode - {(int)KS_UE, IF_EB("\033[24m", ESC_STR "[24m")},// exit underscore mode - {(int)KS_US, IF_EB("\033[4m", ESC_STR "[4m")}, // underscore mode - {(int)KS_CZH, IF_EB("\033[34;43m", ESC_STR "[34;43m")}, // italic mode: blue text on yellow - {(int)KS_CZR, IF_EB("\033[0m", ESC_STR "[0m")}, // italic mode end - {(int)KS_CAB, IF_EB("\033[4%dm", ESC_STR "[4%dm")}, // set background color (ANSI) - {(int)KS_CAF, IF_EB("\033[3%dm", ESC_STR "[3%dm")}, // set foreground color (ANSI) - {(int)KS_CSB, IF_EB("\033[102;%dm", ESC_STR "[102;%dm")}, // set screen background color - {(int)KS_CSF, IF_EB("\033[101;%dm", ESC_STR "[101;%dm")}, // set screen foreground color + {(int)KS_ME, "\033[0m"}, + {(int)KS_MR, "\033[7m"}, + {(int)KS_MD, "\033[1m"}, // bold mode + {(int)KS_SE, "\033[22m"},// normal mode + {(int)KS_UE, "\033[24m"},// exit underscore mode + {(int)KS_US, "\033[4m"}, // underscore mode + {(int)KS_CZH, "\033[34;43m"}, // italic mode: blue text on yellow + {(int)KS_CZR, "\033[0m"}, // italic mode end + {(int)KS_CAB, "\033[4%dm"}, // set background color (ANSI) + {(int)KS_CAF, "\033[3%dm"}, // set foreground color (ANSI) + {(int)KS_CSB, "\033[102;%dm"}, // set screen background color + {(int)KS_CSF, "\033[101;%dm"}, // set screen foreground color {(int)KS_MS, "y"}, {(int)KS_UT, "y"}, {(int)KS_XN, "y"}, {(int)KS_LE, "\b"}, # ifdef TERMINFO - {(int)KS_CM, IF_EB("\033[%i%p1%d;%p2%dH", - ESC_STR "[%i%p1%d;%p2%dH")}, + {(int)KS_CM, "\033[%i%p1%d;%p2%dH"}, # else - {(int)KS_CM, IF_EB("\033[%i%d;%dH", ESC_STR "[%i%d;%dH")}, + {(int)KS_CM, "\033[%i%d;%dH"}, # endif # ifdef TERMINFO - {(int)KS_CRI, IF_EB("\033[%p1%dC", ESC_STR "[%p1%dC")}, + {(int)KS_CRI, "\033[%p1%dC"}, # else - {(int)KS_CRI, IF_EB("\033[%dC", ESC_STR "[%dC")}, + {(int)KS_CRI, "\033[%dC"}, # endif - {K_UP, IF_EB("\033[A", ESC_STR "[A")}, - {K_DOWN, IF_EB("\033[B", ESC_STR "[B")}, - {K_RIGHT, IF_EB("\033[C", ESC_STR "[C")}, - {K_LEFT, IF_EB("\033[D", ESC_STR "[D")}, + {K_UP, "\033[A"}, + {K_DOWN, "\033[B"}, + {K_RIGHT, "\033[C"}, + {K_LEFT, "\033[D"}, // Note: cursor key sequences for application cursor mode are omitted, // because they interfere with typed commands: OA. - {K_F1, IF_EB("\033[11~", ESC_STR "[11~")}, - {K_F2, IF_EB("\033[12~", ESC_STR "[12~")}, - {K_F3, IF_EB("\033[13~", ESC_STR "[13~")}, - {K_F4, IF_EB("\033[14~", ESC_STR "[14~")}, - {K_F5, IF_EB("\033[15~", ESC_STR "[15~")}, - {K_F6, IF_EB("\033[17~", ESC_STR "[17~")}, - {K_F7, IF_EB("\033[18~", ESC_STR "[18~")}, - {K_F8, IF_EB("\033[19~", ESC_STR "[19~")}, - {K_F9, IF_EB("\033[20~", ESC_STR "[20~")}, - {K_F10, IF_EB("\033[21~", ESC_STR "[21~")}, - {K_F11, IF_EB("\033[23~", ESC_STR "[23~")}, - {K_F12, IF_EB("\033[24~", ESC_STR "[24~")}, - {K_F13, IF_EB("\033[25~", ESC_STR "[25~")}, - {K_F14, IF_EB("\033[26~", ESC_STR "[26~")}, - {K_F15, IF_EB("\033[28~", ESC_STR "[28~")}, // Help - {K_F16, IF_EB("\033[29~", ESC_STR "[29~")}, // Select - {K_F17, IF_EB("\033[31~", ESC_STR "[31~")}, - {K_F18, IF_EB("\033[32~", ESC_STR "[32~")}, - {K_F19, IF_EB("\033[33~", ESC_STR "[33~")}, - {K_F20, IF_EB("\033[34~", ESC_STR "[34~")}, - {K_INS, IF_EB("\033[2~", ESC_STR "[2~")}, - {K_DEL, IF_EB("\033[3~", ESC_STR "[3~")}, - {K_HOME, IF_EB("\033[1~", ESC_STR "[1~")}, - {K_END, IF_EB("\033[4~", ESC_STR "[4~")}, - {K_PAGEUP, IF_EB("\033[5~", ESC_STR "[5~")}, - {K_PAGEDOWN, IF_EB("\033[6~", ESC_STR "[6~")}, + {K_F1, "\033[11~"}, + {K_F2, "\033[12~"}, + {K_F3, "\033[13~"}, + {K_F4, "\033[14~"}, + {K_F5, "\033[15~"}, + {K_F6, "\033[17~"}, + {K_F7, "\033[18~"}, + {K_F8, "\033[19~"}, + {K_F9, "\033[20~"}, + {K_F10, "\033[21~"}, + {K_F11, "\033[23~"}, + {K_F12, "\033[24~"}, + {K_F13, "\033[25~"}, + {K_F14, "\033[26~"}, + {K_F15, "\033[28~"}, // Help + {K_F16, "\033[29~"}, // Select + {K_F17, "\033[31~"}, + {K_F18, "\033[32~"}, + {K_F19, "\033[33~"}, + {K_F20, "\033[34~"}, + {K_INS, "\033[2~"}, + {K_DEL, "\033[3~"}, + {K_HOME, "\033[1~"}, + {K_END, "\033[4~"}, + {K_PAGEUP, "\033[5~"}, + {K_PAGEDOWN, "\033[6~"}, // These sequences starting with O may interfere with what the user // is typing. Remove these if that bothers you. - {K_KPLUS, IF_EB("\033Ok", ESC_STR "Ok")}, // keypad plus - {K_KMINUS, IF_EB("\033Om", ESC_STR "Om")}, // keypad minus - {K_KDIVIDE, IF_EB("\033Oo", ESC_STR "Oo")}, // keypad / - {K_KMULTIPLY, IF_EB("\033Oj", ESC_STR "Oj")}, // keypad * - {K_KENTER, IF_EB("\033OM", ESC_STR "OM")}, // keypad Enter - {K_K0, IF_EB("\033Op", ESC_STR "Op")}, // keypad 0 - {K_K1, IF_EB("\033Oq", ESC_STR "Oq")}, // keypad 1 - {K_K2, IF_EB("\033Or", ESC_STR "Or")}, // keypad 2 - {K_K3, IF_EB("\033Os", ESC_STR "Os")}, // keypad 3 - {K_K4, IF_EB("\033Ot", ESC_STR "Ot")}, // keypad 4 - {K_K5, IF_EB("\033Ou", ESC_STR "Ou")}, // keypad 5 - {K_K6, IF_EB("\033Ov", ESC_STR "Ov")}, // keypad 6 - {K_K7, IF_EB("\033Ow", ESC_STR "Ow")}, // keypad 7 - {K_K8, IF_EB("\033Ox", ESC_STR "Ox")}, // keypad 8 - {K_K9, IF_EB("\033Oy", ESC_STR "Oy")}, // keypad 9 + {K_KPLUS, "\033Ok"}, // keypad plus + {K_KMINUS, "\033Om"}, // keypad minus + {K_KDIVIDE, "\033Oo"}, // keypad / + {K_KMULTIPLY, "\033Oj"}, // keypad * + {K_KENTER, "\033OM"}, // keypad Enter + {K_K0, "\033Op"}, // keypad 0 + {K_K1, "\033Oq"}, // keypad 1 + {K_K2, "\033Or"}, // keypad 2 + {K_K3, "\033Os"}, // keypad 3 + {K_K4, "\033Ot"}, // keypad 4 + {K_K5, "\033Ou"}, // keypad 5 + {K_K6, "\033Ov"}, // keypad 6 + {K_K7, "\033Ow"}, // keypad 7 + {K_K8, "\033Ox"}, // keypad 8 + {K_K9, "\033Oy"}, // keypad 9 {K_BS, "\x7f"}, // for some reason 0177 doesn't work # endif @@ -791,226 +790,220 @@ static struct builtin_term builtin_termcaps[] = * Ordinary vt52 */ {(int)KS_NAME, "vt52"}, - {(int)KS_CE, IF_EB("\033K", ESC_STR "K")}, - {(int)KS_CD, IF_EB("\033J", ESC_STR "J")}, + {(int)KS_CE, "\033K"}, + {(int)KS_CD, "\033J"}, # ifdef TERMINFO - {(int)KS_CM, IF_EB("\033Y%p1%' '%+%c%p2%' '%+%c", - ESC_STR "Y%p1%' '%+%c%p2%' '%+%c")}, + {(int)KS_CM, "\033Y%p1%' '%+%c%p2%' '%+%c"}, # else - {(int)KS_CM, IF_EB("\033Y%+ %+ ", ESC_STR "Y%+ %+ ")}, + {(int)KS_CM, "\033Y%+ %+ "}, # endif {(int)KS_LE, "\b"}, - {(int)KS_SR, IF_EB("\033I", ESC_STR "I")}, - {(int)KS_AL, IF_EB("\033L", ESC_STR "L")}, - {(int)KS_DL, IF_EB("\033M", ESC_STR "M")}, - {K_UP, IF_EB("\033A", ESC_STR "A")}, - {K_DOWN, IF_EB("\033B", ESC_STR "B")}, - {K_LEFT, IF_EB("\033D", ESC_STR "D")}, - {K_RIGHT, IF_EB("\033C", ESC_STR "C")}, - {K_F1, IF_EB("\033P", ESC_STR "P")}, - {K_F2, IF_EB("\033Q", ESC_STR "Q")}, - {K_F3, IF_EB("\033R", ESC_STR "R")}, - {(int)KS_CL, IF_EB("\033H\033J", ESC_STR "H" ESC_STR_nc "J")}, + {(int)KS_SR, "\033I"}, + {(int)KS_AL, "\033L"}, + {(int)KS_DL, "\033M"}, + {K_UP, "\033A"}, + {K_DOWN, "\033B"}, + {K_LEFT, "\033D"}, + {K_RIGHT, "\033C"}, + {K_F1, "\033P"}, + {K_F2, "\033Q"}, + {K_F3, "\033R"}, + {(int)KS_CL, "\033H\033J"}, {(int)KS_MS, "y"}, # endif # if defined(UNIX) || defined(ALL_BUILTIN_TCAPS) || defined(SOME_BUILTIN_TCAPS) {(int)KS_NAME, "xterm"}, - {(int)KS_CE, IF_EB("\033[K", ESC_STR "[K")}, - {(int)KS_AL, IF_EB("\033[L", ESC_STR "[L")}, + {(int)KS_CE, "\033[K"}, + {(int)KS_AL, "\033[L"}, # ifdef TERMINFO - {(int)KS_CAL, IF_EB("\033[%p1%dL", ESC_STR "[%p1%dL")}, + {(int)KS_CAL, "\033[%p1%dL"}, # else - {(int)KS_CAL, IF_EB("\033[%dL", ESC_STR "[%dL")}, + {(int)KS_CAL, "\033[%dL"}, # endif - {(int)KS_DL, IF_EB("\033[M", ESC_STR "[M")}, + {(int)KS_DL, "\033[M"}, # ifdef TERMINFO - {(int)KS_CDL, IF_EB("\033[%p1%dM", ESC_STR "[%p1%dM")}, + {(int)KS_CDL, "\033[%p1%dM"}, # else - {(int)KS_CDL, IF_EB("\033[%dM", ESC_STR "[%dM")}, + {(int)KS_CDL, "\033[%dM"}, # endif # ifdef TERMINFO - {(int)KS_CS, IF_EB("\033[%i%p1%d;%p2%dr", - ESC_STR "[%i%p1%d;%p2%dr")}, + {(int)KS_CS, "\033[%i%p1%d;%p2%dr"}, # else - {(int)KS_CS, IF_EB("\033[%i%d;%dr", ESC_STR "[%i%d;%dr")}, + {(int)KS_CS, "\033[%i%d;%dr"}, # endif - {(int)KS_CL, IF_EB("\033[H\033[2J", ESC_STR "[H" ESC_STR_nc "[2J")}, - {(int)KS_CD, IF_EB("\033[J", ESC_STR "[J")}, - {(int)KS_ME, IF_EB("\033[m", ESC_STR "[m")}, - {(int)KS_MR, IF_EB("\033[7m", ESC_STR "[7m")}, - {(int)KS_MD, IF_EB("\033[1m", ESC_STR "[1m")}, - {(int)KS_UE, IF_EB("\033[m", ESC_STR "[m")}, - {(int)KS_US, IF_EB("\033[4m", ESC_STR "[4m")}, - {(int)KS_STE, IF_EB("\033[29m", ESC_STR "[29m")}, - {(int)KS_STS, IF_EB("\033[9m", ESC_STR "[9m")}, + {(int)KS_CL, "\033[H\033[2J"}, + {(int)KS_CD, "\033[J"}, + {(int)KS_ME, "\033[m"}, + {(int)KS_MR, "\033[7m"}, + {(int)KS_MD, "\033[1m"}, + {(int)KS_UE, "\033[m"}, + {(int)KS_US, "\033[4m"}, + {(int)KS_STE, "\033[29m"}, + {(int)KS_STS, "\033[9m"}, {(int)KS_MS, "y"}, {(int)KS_UT, "y"}, {(int)KS_LE, "\b"}, - {(int)KS_VI, IF_EB("\033[?25l", ESC_STR "[?25l")}, - {(int)KS_VE, IF_EB("\033[?25h", ESC_STR "[?25h")}, - {(int)KS_VS, IF_EB("\033[?12h", ESC_STR "[?12h")}, - {(int)KS_CVS, IF_EB("\033[?12l", ESC_STR "[?12l")}, + {(int)KS_VI, "\033[?25l"}, + {(int)KS_VE, "\033[?25h"}, + {(int)KS_VS, "\033[?12h"}, + {(int)KS_CVS, "\033[?12l"}, # ifdef TERMINFO - {(int)KS_CSH, IF_EB("\033[%p1%d q", ESC_STR "[%p1%d q")}, + {(int)KS_CSH, "\033[%p1%d q"}, # else - {(int)KS_CSH, IF_EB("\033[%d q", ESC_STR "[%d q")}, + {(int)KS_CSH, "\033[%d q"}, # endif - {(int)KS_CRC, IF_EB("\033[?12$p", ESC_STR "[?12$p")}, - {(int)KS_CRS, IF_EB("\033P$q q\033\\", ESC_STR "P$q q" ESC_STR "\\")}, + {(int)KS_CRC, "\033[?12$p"}, + {(int)KS_CRS, "\033P$q q\033\\"}, # ifdef TERMINFO - {(int)KS_CM, IF_EB("\033[%i%p1%d;%p2%dH", - ESC_STR "[%i%p1%d;%p2%dH")}, + {(int)KS_CM, "\033[%i%p1%d;%p2%dH"}, # else - {(int)KS_CM, IF_EB("\033[%i%d;%dH", ESC_STR "[%i%d;%dH")}, + {(int)KS_CM, "\033[%i%d;%dH"}, # endif - {(int)KS_SR, IF_EB("\033M", ESC_STR "M")}, + {(int)KS_SR, "\033M"}, # ifdef TERMINFO - {(int)KS_CRI, IF_EB("\033[%p1%dC", ESC_STR "[%p1%dC")}, + {(int)KS_CRI, "\033[%p1%dC"}, # else - {(int)KS_CRI, IF_EB("\033[%dC", ESC_STR "[%dC")}, + {(int)KS_CRI, "\033[%dC"}, # endif - {(int)KS_KS, IF_EB("\033[?1h\033=", ESC_STR "[?1h" ESC_STR_nc "=")}, - {(int)KS_KE, IF_EB("\033[?1l\033>", ESC_STR "[?1l" ESC_STR_nc ">")}, + {(int)KS_KS, "\033[?1h\033="}, + {(int)KS_KE, "\033[?1l\033>"}, # ifdef FEAT_XTERM_SAVE - {(int)KS_TI, IF_EB("\0337\033[?47h", ESC_STR "7" ESC_STR_nc "[?47h")}, - {(int)KS_TE, IF_EB("\033[?47l\0338", - ESC_STR_nc "[?47l" ESC_STR_nc "8")}, + {(int)KS_TI, "\0337\033[?47h"}, + {(int)KS_TE, "\033[?47l\0338"}, # endif - {(int)KS_CTI, IF_EB("\033[>4;2m", ESC_STR_nc "[>4;2m")}, - {(int)KS_CTE, IF_EB("\033[>4;m", ESC_STR_nc "[>4;m")}, - {(int)KS_CIS, IF_EB("\033]1;", ESC_STR "]1;")}, + {(int)KS_CTI, "\033[>4;2m"}, + {(int)KS_CTE, "\033[>4;m"}, + {(int)KS_CIS, "\033]1;"}, {(int)KS_CIE, "\007"}, - {(int)KS_TS, IF_EB("\033]2;", ESC_STR "]2;")}, + {(int)KS_TS, "\033]2;"}, {(int)KS_FS, "\007"}, - {(int)KS_CSC, IF_EB("\033]12;", ESC_STR "]12;")}, + {(int)KS_CSC, "\033]12;"}, {(int)KS_CEC, "\007"}, # ifdef TERMINFO - {(int)KS_CWS, IF_EB("\033[8;%p1%d;%p2%dt", - ESC_STR "[8;%p1%d;%p2%dt")}, - {(int)KS_CWP, IF_EB("\033[3;%p1%d;%p2%dt", - ESC_STR "[3;%p1%d;%p2%dt")}, - {(int)KS_CGP, IF_EB("\033[13t", ESC_STR "[13t")}, + {(int)KS_CWS, "\033[8;%p1%d;%p2%dt"}, + {(int)KS_CWP, "\033[3;%p1%d;%p2%dt"}, + {(int)KS_CGP, "\033[13t"}, # else - {(int)KS_CWS, IF_EB("\033[8;%d;%dt", ESC_STR "[8;%d;%dt")}, - {(int)KS_CWP, IF_EB("\033[3;%d;%dt", ESC_STR "[3;%d;%dt")}, - {(int)KS_CGP, IF_EB("\033[13t", ESC_STR "[13t")}, + {(int)KS_CWS, "\033[8;%d;%dt"}, + {(int)KS_CWP, "\033[3;%d;%dt"}, + {(int)KS_CGP, "\033[13t"}, # endif - {(int)KS_CRV, IF_EB("\033[>c", ESC_STR "[>c")}, - {(int)KS_RFG, IF_EB("\033]10;?\007", ESC_STR "]10;?\007")}, - {(int)KS_RBG, IF_EB("\033]11;?\007", ESC_STR "]11;?\007")}, - {(int)KS_U7, IF_EB("\033[6n", ESC_STR "[6n")}, + {(int)KS_CRV, "\033[>c"}, + {(int)KS_RFG, "\033]10;?\007"}, + {(int)KS_RBG, "\033]11;?\007"}, + {(int)KS_U7, "\033[6n"}, # ifdef FEAT_TERMGUICOLORS // These are printf strings, not terminal codes. - {(int)KS_8F, IF_EB("\033[38;2;%lu;%lu;%lum", ESC_STR "[38;2;%lu;%lu;%lum")}, - {(int)KS_8B, IF_EB("\033[48;2;%lu;%lu;%lum", ESC_STR "[48;2;%lu;%lu;%lum")}, - {(int)KS_8U, IF_EB("\033[58;2;%lu;%lu;%lum", ESC_STR "[58;2;%lu;%lu;%lum")}, + {(int)KS_8F, "\033[38;2;%lu;%lu;%lum"}, + {(int)KS_8B, "\033[48;2;%lu;%lu;%lum"}, + {(int)KS_8U, "\033[58;2;%lu;%lu;%lum"}, # endif - {(int)KS_CAU, IF_EB("\033[58;5;%dm", ESC_STR "[58;5;%dm")}, - {(int)KS_CBE, IF_EB("\033[?2004h", ESC_STR "[?2004h")}, - {(int)KS_CBD, IF_EB("\033[?2004l", ESC_STR "[?2004l")}, - {(int)KS_CST, IF_EB("\033[22;2t", ESC_STR "[22;2t")}, - {(int)KS_CRT, IF_EB("\033[23;2t", ESC_STR "[23;2t")}, - {(int)KS_SSI, IF_EB("\033[22;1t", ESC_STR "[22;1t")}, - {(int)KS_SRI, IF_EB("\033[23;1t", ESC_STR "[23;1t")}, + {(int)KS_CAU, "\033[58;5;%dm"}, + {(int)KS_CBE, "\033[?2004h"}, + {(int)KS_CBD, "\033[?2004l"}, + {(int)KS_CST, "\033[22;2t"}, + {(int)KS_CRT, "\033[23;2t"}, + {(int)KS_SSI, "\033[22;1t"}, + {(int)KS_SRI, "\033[23;1t"}, # if (defined(UNIX) || defined(VMS)) - {(int)KS_FD, IF_EB("\033[?1004l", ESC_STR "[?1004l")}, - {(int)KS_FE, IF_EB("\033[?1004h", ESC_STR "[?1004h")}, + {(int)KS_FD, "\033[?1004l"}, + {(int)KS_FE, "\033[?1004h"}, # endif - {K_UP, IF_EB("\033O*A", ESC_STR "O*A")}, - {K_DOWN, IF_EB("\033O*B", ESC_STR "O*B")}, - {K_RIGHT, IF_EB("\033O*C", ESC_STR "O*C")}, - {K_LEFT, IF_EB("\033O*D", ESC_STR "O*D")}, + {K_UP, "\033O*A"}, + {K_DOWN, "\033O*B"}, + {K_RIGHT, "\033O*C"}, + {K_LEFT, "\033O*D"}, // An extra set of cursor keys for vt100 mode - {K_XUP, IF_EB("\033[@;*A", ESC_STR "[@;*A")}, - {K_XDOWN, IF_EB("\033[@;*B", ESC_STR "[@;*B")}, - {K_XRIGHT, IF_EB("\033[@;*C", ESC_STR "[@;*C")}, - {K_XLEFT, IF_EB("\033[@;*D", ESC_STR "[@;*D")}, + {K_XUP, "\033[@;*A"}, + {K_XDOWN, "\033[@;*B"}, + {K_XRIGHT, "\033[@;*C"}, + {K_XLEFT, "\033[@;*D"}, // An extra set of function keys for vt100 mode - {K_XF1, IF_EB("\033O*P", ESC_STR "O*P")}, - {K_XF2, IF_EB("\033O*Q", ESC_STR "O*Q")}, - {K_XF3, IF_EB("\033O*R", ESC_STR "O*R")}, - {K_XF4, IF_EB("\033O*S", ESC_STR "O*S")}, - {K_F1, IF_EB("\033[11;*~", ESC_STR "[11;*~")}, - {K_F2, IF_EB("\033[12;*~", ESC_STR "[12;*~")}, - {K_F3, IF_EB("\033[13;*~", ESC_STR "[13;*~")}, - {K_F4, IF_EB("\033[14;*~", ESC_STR "[14;*~")}, - {K_F5, IF_EB("\033[15;*~", ESC_STR "[15;*~")}, - {K_F6, IF_EB("\033[17;*~", ESC_STR "[17;*~")}, - {K_F7, IF_EB("\033[18;*~", ESC_STR "[18;*~")}, - {K_F8, IF_EB("\033[19;*~", ESC_STR "[19;*~")}, - {K_F9, IF_EB("\033[20;*~", ESC_STR "[20;*~")}, - {K_F10, IF_EB("\033[21;*~", ESC_STR "[21;*~")}, - {K_F11, IF_EB("\033[23;*~", ESC_STR "[23;*~")}, - {K_F12, IF_EB("\033[24;*~", ESC_STR "[24;*~")}, - {K_S_TAB, IF_EB("\033[Z", ESC_STR "[Z")}, - {K_HELP, IF_EB("\033[28;*~", ESC_STR "[28;*~")}, - {K_UNDO, IF_EB("\033[26;*~", ESC_STR "[26;*~")}, - {K_INS, IF_EB("\033[2;*~", ESC_STR "[2;*~")}, - {K_HOME, IF_EB("\033[1;*H", ESC_STR "[1;*H")}, - // {K_S_HOME, IF_EB("\033O2H", ESC_STR "O2H")}, - // {K_C_HOME, IF_EB("\033O5H", ESC_STR "O5H")}, - {K_KHOME, IF_EB("\033[1;*~", ESC_STR "[1;*~")}, - {K_XHOME, IF_EB("\033O*H", ESC_STR "O*H")}, // other Home - {K_ZHOME, IF_EB("\033[7;*~", ESC_STR "[7;*~")}, // other Home - {K_END, IF_EB("\033[1;*F", ESC_STR "[1;*F")}, - // {K_S_END, IF_EB("\033O2F", ESC_STR "O2F")}, - // {K_C_END, IF_EB("\033O5F", ESC_STR "O5F")}, - {K_KEND, IF_EB("\033[4;*~", ESC_STR "[4;*~")}, - {K_XEND, IF_EB("\033O*F", ESC_STR "O*F")}, // other End - {K_ZEND, IF_EB("\033[8;*~", ESC_STR "[8;*~")}, - {K_PAGEUP, IF_EB("\033[5;*~", ESC_STR "[5;*~")}, - {K_PAGEDOWN, IF_EB("\033[6;*~", ESC_STR "[6;*~")}, - {K_KPLUS, IF_EB("\033O*k", ESC_STR "O*k")}, // keypad plus - {K_KMINUS, IF_EB("\033O*m", ESC_STR "O*m")}, // keypad minus - {K_KDIVIDE, IF_EB("\033O*o", ESC_STR "O*o")}, // keypad / - {K_KMULTIPLY, IF_EB("\033O*j", ESC_STR "O*j")}, // keypad * - {K_KENTER, IF_EB("\033O*M", ESC_STR "O*M")}, // keypad Enter - {K_KPOINT, IF_EB("\033O*n", ESC_STR "O*n")}, // keypad . - {K_K0, IF_EB("\033O*p", ESC_STR "O*p")}, // keypad 0 - {K_K1, IF_EB("\033O*q", ESC_STR "O*q")}, // keypad 1 - {K_K2, IF_EB("\033O*r", ESC_STR "O*r")}, // keypad 2 - {K_K3, IF_EB("\033O*s", ESC_STR "O*s")}, // keypad 3 - {K_K4, IF_EB("\033O*t", ESC_STR "O*t")}, // keypad 4 - {K_K5, IF_EB("\033O*u", ESC_STR "O*u")}, // keypad 5 - {K_K6, IF_EB("\033O*v", ESC_STR "O*v")}, // keypad 6 - {K_K7, IF_EB("\033O*w", ESC_STR "O*w")}, // keypad 7 - {K_K8, IF_EB("\033O*x", ESC_STR "O*x")}, // keypad 8 - {K_K9, IF_EB("\033O*y", ESC_STR "O*y")}, // keypad 9 - {K_KDEL, IF_EB("\033[3;*~", ESC_STR "[3;*~")}, // keypad Del - {K_PS, IF_EB("\033[200~", ESC_STR "[200~")}, // paste start - {K_PE, IF_EB("\033[201~", ESC_STR "[201~")}, // paste end + {K_XF1, "\033O*P"}, + {K_XF2, "\033O*Q"}, + {K_XF3, "\033O*R"}, + {K_XF4, "\033O*S"}, + {K_F1, "\033[11;*~"}, + {K_F2, "\033[12;*~"}, + {K_F3, "\033[13;*~"}, + {K_F4, "\033[14;*~"}, + {K_F5, "\033[15;*~"}, + {K_F6, "\033[17;*~"}, + {K_F7, "\033[18;*~"}, + {K_F8, "\033[19;*~"}, + {K_F9, "\033[20;*~"}, + {K_F10, "\033[21;*~"}, + {K_F11, "\033[23;*~"}, + {K_F12, "\033[24;*~"}, + {K_S_TAB, "\033[Z"}, + {K_HELP, "\033[28;*~"}, + {K_UNDO, "\033[26;*~"}, + {K_INS, "\033[2;*~"}, + {K_HOME, "\033[1;*H"}, + // {K_S_HOME, "\033O2H"}, + // {K_C_HOME, "\033O5H"}, + {K_KHOME, "\033[1;*~"}, + {K_XHOME, "\033O*H"}, // other Home + {K_ZHOME, "\033[7;*~"}, // other Home + {K_END, "\033[1;*F"}, + // {K_S_END, "\033O2F"}, + // {K_C_END, "\033O5F"}, + {K_KEND, "\033[4;*~"}, + {K_XEND, "\033O*F"}, // other End + {K_ZEND, "\033[8;*~"}, + {K_PAGEUP, "\033[5;*~"}, + {K_PAGEDOWN, "\033[6;*~"}, + {K_KPLUS, "\033O*k"}, // keypad plus + {K_KMINUS, "\033O*m"}, // keypad minus + {K_KDIVIDE, "\033O*o"}, // keypad / + {K_KMULTIPLY, "\033O*j"}, // keypad * + {K_KENTER, "\033O*M"}, // keypad Enter + {K_KPOINT, "\033O*n"}, // keypad . + {K_K0, "\033O*p"}, // keypad 0 + {K_K1, "\033O*q"}, // keypad 1 + {K_K2, "\033O*r"}, // keypad 2 + {K_K3, "\033O*s"}, // keypad 3 + {K_K4, "\033O*t"}, // keypad 4 + {K_K5, "\033O*u"}, // keypad 5 + {K_K6, "\033O*v"}, // keypad 6 + {K_K7, "\033O*w"}, // keypad 7 + {K_K8, "\033O*x"}, // keypad 8 + {K_K9, "\033O*y"}, // keypad 9 + {K_KDEL, "\033[3;*~"}, // keypad Del + {K_PS, "\033[200~"}, // paste start + {K_PE, "\033[201~"}, // paste end {BT_EXTRA_KEYS, ""}, - {TERMCAP2KEY('k', '0'), IF_EB("\033[10;*~", ESC_STR "[10;*~")}, // F0 - {TERMCAP2KEY('F', '3'), IF_EB("\033[25;*~", ESC_STR "[25;*~")}, // F13 + {TERMCAP2KEY('k', '0'), "\033[10;*~"}, // F0 + {TERMCAP2KEY('F', '3'), "\033[25;*~"}, // F13 // F14 and F15 are missing, because they send the same codes as the undo // and help key, although they don't work on all keyboards. - {TERMCAP2KEY('F', '6'), IF_EB("\033[29;*~", ESC_STR "[29;*~")}, // F16 - {TERMCAP2KEY('F', '7'), IF_EB("\033[31;*~", ESC_STR "[31;*~")}, // F17 - {TERMCAP2KEY('F', '8'), IF_EB("\033[32;*~", ESC_STR "[32;*~")}, // F18 - {TERMCAP2KEY('F', '9'), IF_EB("\033[33;*~", ESC_STR "[33;*~")}, // F19 - {TERMCAP2KEY('F', 'A'), IF_EB("\033[34;*~", ESC_STR "[34;*~")}, // F20 + {TERMCAP2KEY('F', '6'), "\033[29;*~"}, // F16 + {TERMCAP2KEY('F', '7'), "\033[31;*~"}, // F17 + {TERMCAP2KEY('F', '8'), "\033[32;*~"}, // F18 + {TERMCAP2KEY('F', '9'), "\033[33;*~"}, // F19 + {TERMCAP2KEY('F', 'A'), "\033[34;*~"}, // F20 - {TERMCAP2KEY('F', 'B'), IF_EB("\033[42;*~", ESC_STR "[42;*~")}, // F21 - {TERMCAP2KEY('F', 'C'), IF_EB("\033[43;*~", ESC_STR "[43;*~")}, // F22 - {TERMCAP2KEY('F', 'D'), IF_EB("\033[44;*~", ESC_STR "[44;*~")}, // F23 - {TERMCAP2KEY('F', 'E'), IF_EB("\033[45;*~", ESC_STR "[45;*~")}, // F24 - {TERMCAP2KEY('F', 'F'), IF_EB("\033[46;*~", ESC_STR "[46;*~")}, // F25 - {TERMCAP2KEY('F', 'G'), IF_EB("\033[47;*~", ESC_STR "[47;*~")}, // F26 - {TERMCAP2KEY('F', 'H'), IF_EB("\033[48;*~", ESC_STR "[48;*~")}, // F27 - {TERMCAP2KEY('F', 'I'), IF_EB("\033[49;*~", ESC_STR "[49;*~")}, // F28 - {TERMCAP2KEY('F', 'J'), IF_EB("\033[50;*~", ESC_STR "[50;*~")}, // F29 - {TERMCAP2KEY('F', 'K'), IF_EB("\033[51;*~", ESC_STR "[51;*~")}, // F30 + {TERMCAP2KEY('F', 'B'), "\033[42;*~"}, // F21 + {TERMCAP2KEY('F', 'C'), "\033[43;*~"}, // F22 + {TERMCAP2KEY('F', 'D'), "\033[44;*~"}, // F23 + {TERMCAP2KEY('F', 'E'), "\033[45;*~"}, // F24 + {TERMCAP2KEY('F', 'F'), "\033[46;*~"}, // F25 + {TERMCAP2KEY('F', 'G'), "\033[47;*~"}, // F26 + {TERMCAP2KEY('F', 'H'), "\033[48;*~"}, // F27 + {TERMCAP2KEY('F', 'I'), "\033[49;*~"}, // F28 + {TERMCAP2KEY('F', 'J'), "\033[50;*~"}, // F29 + {TERMCAP2KEY('F', 'K'), "\033[51;*~"}, // F30 - {TERMCAP2KEY('F', 'L'), IF_EB("\033[52;*~", ESC_STR "[52;*~")}, // F31 - {TERMCAP2KEY('F', 'M'), IF_EB("\033[53;*~", ESC_STR "[53;*~")}, // F32 - {TERMCAP2KEY('F', 'N'), IF_EB("\033[54;*~", ESC_STR "[54;*~")}, // F33 - {TERMCAP2KEY('F', 'O'), IF_EB("\033[55;*~", ESC_STR "[55;*~")}, // F34 - {TERMCAP2KEY('F', 'P'), IF_EB("\033[56;*~", ESC_STR "[56;*~")}, // F35 - {TERMCAP2KEY('F', 'Q'), IF_EB("\033[57;*~", ESC_STR "[57;*~")}, // F36 - {TERMCAP2KEY('F', 'R'), IF_EB("\033[58;*~", ESC_STR "[58;*~")}, // F37 + {TERMCAP2KEY('F', 'L'), "\033[52;*~"}, // F31 + {TERMCAP2KEY('F', 'M'), "\033[53;*~"}, // F32 + {TERMCAP2KEY('F', 'N'), "\033[54;*~"}, // F33 + {TERMCAP2KEY('F', 'O'), "\033[55;*~"}, // F34 + {TERMCAP2KEY('F', 'P'), "\033[56;*~"}, // F35 + {TERMCAP2KEY('F', 'Q'), "\033[57;*~"}, // F36 + {TERMCAP2KEY('F', 'R'), "\033[58;*~"}, // F37 # endif # if defined(UNIX) || defined(ALL_BUILTIN_TCAPS) @@ -1323,10 +1316,9 @@ static struct builtin_term builtin_termcaps[] = {(int)KS_NAME, "dumb"}, {(int)KS_CL, "\014"}, #ifdef TERMINFO - {(int)KS_CM, IF_EB("\033[%i%p1%d;%p2%dH", - ESC_STR "[%i%p1%d;%p2%dH")}, + {(int)KS_CM, "\033[%i%p1%d;%p2%dH"}, #else - {(int)KS_CM, IF_EB("\033[%i%d;%dH", ESC_STR "[%i%d;%dH")}, + {(int)KS_CM, "\033[%i%d;%dH"}, #endif /* @@ -2976,9 +2968,9 @@ term_color(char_u *s, int n) #endif char *lead = i == 2 ? ( #if defined(FEAT_VTP) && defined(FEAT_TERMGUICOLORS) - s[1] == '|' ? IF_EB("\033|", ESC_STR "|") : + s[1] == '|' ? "\033|" : #endif - IF_EB("\033[", ESC_STR "[")) : "\233"; + "\033[") : "\233"; char *tail = s[i] == '3' ? (n >= 16 ? "38;5;" : "9") : (n >= 16 ? "48;5;" : "10"); @@ -6529,11 +6521,9 @@ update_tcap(int attr) struct builtin_term *p; p = find_builtin_term(DEFAULT_TERM); - sprintf(ksme_str, IF_EB("\033|%dm", ESC_STR "|%dm"), attr); - sprintf(ksmd_str, IF_EB("\033|%dm", ESC_STR "|%dm"), - attr | 0x08); // FOREGROUND_INTENSITY - sprintf(ksmr_str, IF_EB("\033|%dm", ESC_STR "|%dm"), - ((attr & 0x0F) << 4) | ((attr & 0xF0) >> 4)); + sprintf(ksme_str, "\033|%dm", attr); + sprintf(ksmd_str, "\033|%dm", attr | 0x08); // FOREGROUND_INTENSITY + sprintf(ksmr_str, "\033|%dm", ((attr & 0x0F) << 4) | ((attr & 0xF0) >> 4)); while (p->bt_string != NULL) { diff --git a/src/testdir/test_edit.vim b/src/testdir/test_edit.vim index 70bfc2e69c..0b0c961489 100644 --- a/src/testdir/test_edit.vim +++ b/src/testdir/test_edit.vim @@ -1073,8 +1073,6 @@ func Test_edit_DROP() endfunc func Test_edit_CTRL_V() - CheckNotFeature ebcdic - new call setline(1, ['abc']) call cursor(2, 1) @@ -1634,11 +1632,7 @@ endfunc func Test_edit_special_chars() new - if has("ebcdic") - let t = "o\193\xc2\o303 \90a\xfg\o578\" - else - let t = "o\65\x42\o103 \33a\xfg\o78\" - endif + let t = "o\65\x42\o103 \33a\xfg\o78\" exe "normal " . t call assert_equal("ABC !a\g\8", getline(2)) diff --git a/src/testdir/test_exec_while_if.vim b/src/testdir/test_exec_while_if.vim index 3da2784d77..3f13b09945 100644 --- a/src/testdir/test_exec_while_if.vim +++ b/src/testdir/test_exec_while_if.vim @@ -6,11 +6,7 @@ func Test_exec_while_if() let i = 0 while i < 12 let i = i + 1 - if has("ebcdic") - execute "normal o" . i . "\047" - else - execute "normal o" . i . "\033" - endif + execute "normal o" . i . "\033" if i % 2 normal Ax if i == 9 @@ -21,21 +17,13 @@ func Test_exec_while_if() else let j = 9 while j > 0 - if has("ebcdic") - execute "normal" j . "a" . j . "\x27" - else - execute "normal" j . "a" . j . "\x1b" - endif + execute "normal" j . "a" . j . "\x1b" let j = j - 1 endwhile endif endif if i == 9 - if has("ebcdic") - execute "normal Az\047" - else - execute "normal Az\033" - endif + execute "normal Az\033" endif endwhile unlet i j diff --git a/src/testdir/test_expr.vim b/src/testdir/test_expr.vim index 4d085de1d8..2189a0e8c6 100644 --- a/src/testdir/test_expr.vim +++ b/src/testdir/test_expr.vim @@ -245,11 +245,7 @@ func Test_printf_misc() call assert_equal('65535', printf('%ld', 0xFFFF)) call assert_equal('131071', printf('%ld', 0x1FFFF)) - if has('ebcdic') - call assert_equal('#', printf('%c', 123)) - else - call assert_equal('{', printf('%c', 123)) - endif + call assert_equal('{', printf('%c', 123)) call assert_equal('abc', printf('%s', 'abc')) call assert_equal('abc', printf('%S', 'abc')) diff --git a/src/testdir/test_filetype.vim b/src/testdir/test_filetype.vim index 714d6f59cb..6f4a425814 100644 --- a/src/testdir/test_filetype.vim +++ b/src/testdir/test_filetype.vim @@ -183,6 +183,7 @@ let s:filename_checks = { \ 'fgl': ['file.4gl', 'file.4gh', 'file.m4gl'], \ 'fish': ['file.fish'], \ 'focexec': ['file.fex', 'file.focexec'], + \ 'form': ['file.frm'], \ 'forth': ['file.ft', 'file.fth'], \ 'fortran': ['file.f', 'file.for', 'file.fortran', 'file.fpp', 'file.ftn', 'file.f77', 'file.f90', 'file.f95', 'file.f03', 'file.f08'], \ 'fpcmake': ['file.fpc'], @@ -1278,4 +1279,31 @@ func Test_bas_file() filetype off endfunc +func Test_frm_file() + filetype on + + call writefile(['looks like FORM'], 'Xfile.frm') + split Xfile.frm + call assert_equal('form', &filetype) + bwipe! + + " Test dist#ft#FTfrm() + + let g:filetype_frm = 'form' + split Xfile.frm + call assert_equal('form', &filetype) + bwipe! + unlet g:filetype_frm + + " Visual Basic + + call writefile(['Begin VB.Form Form1'], 'Xfile.frm') + split Xfile.frm + call assert_equal('vb', &filetype) + bwipe! + + call delete('Xfile.frm') + filetype off +endfunc + " vim: shiftwidth=2 sts=2 expandtab diff --git a/src/testdir/test_gf.vim b/src/testdir/test_gf.vim index 1b13c42cd9..3602ba010e 100644 --- a/src/testdir/test_gf.vim +++ b/src/testdir/test_gf.vim @@ -19,11 +19,7 @@ func Test_gf_url() call search("^second") call search("URL") call assert_equal("URL://machine.name/tmp/vimtest2b", expand("")) - if has("ebcdic") - set isf=@,240-249,/,.,-,_,+,,,$,:,~,\ - else - set isf=@,48-57,/,.,-,_,+,,,$,~,\ - endif + set isf=@,48-57,/,.,-,_,+,,,$,~,\ call search("^third") call search("name") call assert_equal("URL:\\\\machine.name\\vimtest2c", expand("")) @@ -90,11 +86,7 @@ endfunc " Test for invoking 'gf' on a ${VAR} variable func Test_gf() - if has("ebcdic") - set isfname=@,240-249,/,.,-,_,+,,,$,:,~,{,} - else - set isfname=@,48-57,/,.,-,_,+,,,$,:,~,{,} - endif + set isfname=@,48-57,/,.,-,_,+,,,$,:,~,{,} call writefile(["Test for gf command"], "Xtest1") if has("unix") diff --git a/src/testdir/test_gui.vim b/src/testdir/test_gui.vim index 8e2ad469bc..7a58c817ae 100644 --- a/src/testdir/test_gui.vim +++ b/src/testdir/test_gui.vim @@ -719,13 +719,15 @@ func Test_scrollbars() set guioptions+=rlb " scroll to move line 11 at top, moves the cursor there - eval 10->test_scrollbar('left', 0) + let args = #{which: 'left', value: 10, dragging: 0} + call test_gui_event('scrollbar', args) redraw call assert_equal(1, winline()) call assert_equal(11, line('.')) " scroll to move line 1 at top, cursor stays in line 11 - call test_scrollbar('right', 0, 0) + let args = #{which: 'right', value: 0, dragging: 0} + call test_gui_event('scrollbar', args) redraw call assert_equal(11, winline()) call assert_equal(11, line('.')) @@ -742,7 +744,8 @@ func Test_scrollbars() call assert_equal(1, col('.')) " scroll to character 11, cursor is moved - call test_scrollbar('hor', 10, 0) + let args = #{which: 'hor', value: 10, dragging: 0} + call test_gui_event('scrollbar', args) redraw call assert_equal(1, wincol()) set number @@ -752,6 +755,13 @@ func Test_scrollbars() redraw call assert_equal(11, col('.')) + " Invalid arguments + call assert_false(test_gui_event('scrollbar', {})) + call assert_false(test_gui_event('scrollbar', #{value: 10, dragging: 0})) + call assert_false(test_gui_event('scrollbar', #{which: 'hor', dragging: 0})) + call assert_false(test_gui_event('scrollbar', #{which: 'hor', value: 1})) + call assert_fails("call test_gui_event('scrollbar', #{which: 'a', value: 1, dragging: 0})", 'E475:') + set guioptions& set wrap& bwipe! @@ -1351,6 +1361,8 @@ func Test_gui_drop_files() call assert_false(test_gui_event("dropfiles", {})) let d = #{row: 1, col: 1, modifiers: 0} call assert_false(test_gui_event("dropfiles", d)) + let d = #{files: 1, row: 1, col: 1, modifiers: 0} + call assert_false(test_gui_event("dropfiles", d)) let d = #{files: test_null_list(), row: 1, col: 1, modifiers: 0} call assert_false(test_gui_event("dropfiles", d)) let d = #{files: [test_null_string()], row: 1, col: 1, modifiers: 0} @@ -1465,6 +1477,18 @@ func Test_gui_findrepl() let args = #{find_text: 'TWO', repl_text: 'two', flags: 0x1C, forward: 1} call test_gui_event('findrepl', args) call assert_equal(['ONE two ONE', 'Twoo ONE two ONEo'], getline(1, '$')) + + " Invalid arguments + call assert_false(test_gui_event('findrepl', {})) + let args = #{repl_text: 'a', flags: 1, forward: 1} + call assert_false(test_gui_event('findrepl', args)) + let args = #{find_text: 'a', flags: 1, forward: 1} + call assert_false(test_gui_event('findrepl', args)) + let args = #{find_text: 'a', repl_text: 'b', forward: 1} + call assert_false(test_gui_event('findrepl', args)) + let args = #{find_text: 'a', repl_text: 'b', flags: 1} + call assert_false(test_gui_event('findrepl', args)) + bw! endfunc diff --git a/src/testdir/test_packadd.vim b/src/testdir/test_packadd.vim index d7a38daf31..8ca9b41a28 100644 --- a/src/testdir/test_packadd.vim +++ b/src/testdir/test_packadd.vim @@ -246,6 +246,19 @@ func Test_packloadall() call assert_equal(4321, g:plugin_bar_number) endfunc +func Test_start_autoload() + " plugin foo with an autoload directory + let autodir = &packpath .. '/pack/mine/start/foo/autoload' + call mkdir(autodir, 'p') + let fname = autodir .. '/foobar.vim' + call writefile(['func foobar#test()', + \ ' return 1666', + \ 'endfunc'], fname) + + call assert_equal(1666, foobar#test()) + call delete(fname) +endfunc + func Test_helptags() let docdir1 = &packpath . '/pack/mine/start/foo/doc' let docdir2 = &packpath . '/pack/mine/start/bar/doc' diff --git a/src/testdir/test_quickfix.vim b/src/testdir/test_quickfix.vim index fb6d21fc5c..07fdb9644b 100644 --- a/src/testdir/test_quickfix.vim +++ b/src/testdir/test_quickfix.vim @@ -979,6 +979,7 @@ func Test_locationlist_curwin_was_closed() call assert_fails('lrewind', 'E924:') augroup! testgroup + delfunc R endfunc func Test_locationlist_cross_tab_jump() @@ -5835,4 +5836,20 @@ func Test_two_qf_windows() %bw! endfunc +" Weird sequence of commands that caused entering a wiped-out buffer +func Test_lopen_bwipe() + func R() + silent! tab lopen + e x + silent! lfile + endfunc + + cal R() + cal R() + cal R() + bw! + delfunc R +endfunc + + " vim: shiftwidth=2 sts=2 expandtab diff --git a/src/testdir/test_regexp_utf8.vim b/src/testdir/test_regexp_utf8.vim index 044aeffb63..674eee571d 100644 --- a/src/testdir/test_regexp_utf8.vim +++ b/src/testdir/test_regexp_utf8.vim @@ -152,9 +152,6 @@ func s:classes_test() if has('win32') let identchars_ok = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§µÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿ' let kwordchars_ok = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyzµÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ' - elseif has('ebcdic') - let identchars_ok = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz€ŒŽœž¬®µº¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ' - let kwordchars_ok = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz€ŒŽœž¬®µº¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ' else let identchars_ok = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyzµÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ' let kwordchars_ok = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyzµÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ' @@ -166,8 +163,6 @@ func s:classes_test() let fnamechars_ok = '$+,-./0123456789:ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz~ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ' elseif has('vms') let fnamechars_ok = '#$%+,-./0123456789:;<>ABCDEFGHIJKLMNOPQRSTUVWXYZ[]_abcdefghijklmnopqrstuvwxyz~ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ' - elseif has('ebcdic') - let fnamechars_ok = '#$%+,-./=ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz~ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ' else let fnamechars_ok = '#$%+,-./0123456789=ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz~ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ' endif diff --git a/src/testdir/test_restricted.vim b/src/testdir/test_restricted.vim index 22ca2f80c1..f743fbf3e4 100644 --- a/src/testdir/test_restricted.vim +++ b/src/testdir/test_restricted.vim @@ -105,6 +105,14 @@ func Test_restricted_mode() if RunVim([], [], '-Z --clean -S Xrestricted') call assert_equal([], readfile('Xresult')) endif + call delete('Xresult') + if has('unix') && RunVimPiped([], [], '--clean -S Xrestricted', 'SHELL=/bin/false ') + call assert_equal([], readfile('Xresult')) + endif + call delete('Xresult') + if has('unix') && RunVimPiped([], [], '--clean -S Xrestricted', 'SHELL=/sbin/nologin') + call assert_equal([], readfile('Xresult')) + endif call delete('Xrestricted') call delete('Xresult') diff --git a/src/testdir/test_vim9_assign.vim b/src/testdir/test_vim9_assign.vim index e3606d81ea..744fc5e715 100644 --- a/src/testdir/test_vim9_assign.vim +++ b/src/testdir/test_vim9_assign.vim @@ -484,7 +484,7 @@ def Test_assign_linebreak() ->copy() ->copy() END - v9.CheckDefFailure(lines, 'E1012:', 2) + v9.CheckDefExecFailure(lines, 'E1012:', 4) lines =<< trim END var x: any @@ -1249,6 +1249,15 @@ def Test_assignment_var_list() v9.CheckScriptSuccess(lines) enddef +def Test_assignment_empty_list() + var lines =<< trim END + var l2: list = [] + var l: list + l = l2 + END + v9.CheckDefAndScriptSuccess(lines) +enddef + def Test_assignment_vim9script() var lines =<< trim END vim9script diff --git a/src/testdir/test_vim9_builtin.vim b/src/testdir/test_vim9_builtin.vim index d6b42bbfd6..f7a5006b45 100644 --- a/src/testdir/test_vim9_builtin.vim +++ b/src/testdir/test_vim9_builtin.vim @@ -77,7 +77,12 @@ enddef def Test_add() v9.CheckDefAndScriptFailure(['add({}, 1)'], ['E1013: Argument 1: type mismatch, expected list but got dict', 'E1226: List or Blob required for argument 1']) - v9.CheckDefFailure(['add([1], "a")'], 'E1012: Type mismatch; expected number but got string') + v9.CheckDefExecFailure([ + 'var ln: list = [1]', + 'add(ln, "a")'], + 'E1012: Type mismatch; expected number but got string') + assert_equal([1, 'a'], add([1], 'a')) + assert_equal(0z1234, add(0z12, 0x34)) var lines =<< trim END vim9script @@ -715,6 +720,31 @@ def Test_copy_return_type() res->assert_equal(6) dl = deepcopy([1, 2, 3], true) + + # after a copy() the type can change, but not the item itself + var nl: list = [1, 2] + assert_equal([1, 2, 'x'], nl->copy()->extend(['x'])) + + var lines =<< trim END + var nll: list> = [[1, 2]] + nll->copy()[0]->extend(['x']) + END + v9.CheckDefExecAndScriptFailure(lines, 'E1013: Argument 2: type mismatch, expected list but got list in extend()') + + var nd: dict = {a: 1, b: 2} + assert_equal({a: 1, b: 2, c: 'x'}, nd->copy()->extend({c: 'x'})) + lines =<< trim END + var ndd: dict> = {a: {x: 1, y: 2}} + ndd->copy()['a']->extend({z: 'x'}) + END + v9.CheckDefExecAndScriptFailure(lines, 'E1013: Argument 2: type mismatch, expected dict but got dict in extend()') + + # after a deepcopy() the item type can also change + var nll: list> = [[1, 2]] + assert_equal([1, 2, 'x'], nll->deepcopy()[0]->extend(['x'])) + + var ndd: dict> = {a: {x: 1, y: 2}} + assert_equal({x: 1, y: 2, z: 'x'}, ndd->deepcopy()['a']->extend({z: 'x'})) enddef def Test_count() @@ -2804,6 +2834,9 @@ def Test_range() v9.CheckDefAndScriptFailure(['range("a")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) v9.CheckDefAndScriptFailure(['range(10, "b")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2']) v9.CheckDefAndScriptFailure(['range(10, 20, "c")'], ['E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3']) + + # returns a list but it's not declared as such + assert_equal(['x', 'x'], range(2)->map((i, v) => 'x')) enddef def Test_readdir() @@ -2980,6 +3013,10 @@ def Test_remove() var d2: any = {1: 'a', 2: 'b', 3: 'c'} remove(d2, 2) assert_equal({1: 'a', 3: 'c'}, d2) + + # using declared type + var x: string = range(2)->extend(['x'])->remove(2) + assert_equal('x', x) enddef def Test_remove_return_type() @@ -4089,13 +4126,6 @@ def Test_test_override() v9.CheckDefAndScriptFailure(['test_override("a", "x")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2']) enddef -def Test_test_scrollbar() - CheckGui - v9.CheckDefAndScriptFailure(['test_scrollbar(1, 2, 3)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) - v9.CheckDefAndScriptFailure(['test_scrollbar("a", "b", 3)'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2']) - v9.CheckDefAndScriptFailure(['test_scrollbar("a", 2, "c")'], ['E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3']) -enddef - def Test_test_setmouse() v9.CheckDefAndScriptFailure(['test_setmouse("a", 10)'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) v9.CheckDefAndScriptFailure(['test_setmouse(10, "b")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2']) diff --git a/src/testdir/test_vim9_cmd.vim b/src/testdir/test_vim9_cmd.vim index 3d9edee3fd..bacf195f10 100644 --- a/src/testdir/test_vim9_cmd.vim +++ b/src/testdir/test_vim9_cmd.vim @@ -1610,7 +1610,7 @@ def Test_redir_to_var() redir > Xfile redir END END - v9.CheckDefFailure(lines, 'E1185:') + v9.CheckDefFailure(lines, 'E1092:') lines =<< trim END var text: number diff --git a/src/testdir/test_vim9_expr.vim b/src/testdir/test_vim9_expr.vim index bf5a0d02ec..a4e3e9e0f2 100644 --- a/src/testdir/test_vim9_expr.vim +++ b/src/testdir/test_vim9_expr.vim @@ -1472,7 +1472,8 @@ func Test_expr5_fails() endfunc func Test_expr5_fails_channel() - g:CheckFeature channel + CheckFeature channel + call v9.CheckDefAndScriptFailure(["var x = 'a' .. test_null_job()"], ['E1105:', 'E908:'], 1) call v9.CheckDefAndScriptFailure(["var x = 'a' .. test_null_channel()"], ['E1105:', 'E908:'], 1) endfunc @@ -1494,6 +1495,9 @@ def Test_expr5_list_add() # result of glob() is "any", runtime type check var sl: list = glob('*.txt', false, true) + [''] + + var lln: list> = [[1] + [2]] + assert_equal([[1, 2]], lln) END v9.CheckDefAndScriptSuccess(lines) enddef @@ -1689,7 +1693,7 @@ func Test_expr6_fails() endfunc func Test_expr6_float_fails() - g:CheckFeature float + CheckFeature float call v9.CheckDefAndScriptFailure(["var x = 1.0 % 2"], ['E1035:', 'E804:'], 1) endfunc diff --git a/src/testdir/test_vim9_func.vim b/src/testdir/test_vim9_func.vim index 434d49bf97..55297cb652 100644 --- a/src/testdir/test_vim9_func.vim +++ b/src/testdir/test_vim9_func.vim @@ -3461,11 +3461,11 @@ def Test_list_any_type_checked() enddef Foo() END + # "any" could be "dict", thus OK lines[2] = 'var l: list' - v9.CheckScriptFailure(lines, 'E1013: Argument 1: type mismatch, expected list> but got list', 2) - + v9.CheckScriptSuccess(lines) lines[2] = 'var l: list = []' - v9.CheckScriptFailure(lines, 'E1013: Argument 1: type mismatch, expected list> but got list', 2) + v9.CheckScriptSuccess(lines) lines[2] = 'var l: list = [11]' v9.CheckScriptFailure(lines, 'E1013: Argument 1: type mismatch, expected list> but got list', 2) diff --git a/src/testdir/test_vim9_import.vim b/src/testdir/test_vim9_import.vim index f37ff8b75d..be453c654e 100644 --- a/src/testdir/test_vim9_import.vim +++ b/src/testdir/test_vim9_import.vim @@ -142,6 +142,14 @@ def Test_vim9_import_export() unlet g:imported_func delete('Ximport_lbr.vim') + var import_shadows_cmdmod_lines =<< trim END + vim9script + import './Xexport.vim' as vim9 + vim9.exp_name = 'Shadow' + assert_equal('Shadow', vim9.exp_name) + END + v9.CheckScriptSuccess(import_shadows_cmdmod_lines) + var line_break_before_dot =<< trim END vim9script import './Xexport.vim' as expo @@ -365,7 +373,6 @@ def Test_vim9_import_export() assert_fails('source Ximport.vim', 'E46: Cannot change read-only variable "CONST"', '', 3) delete('Ximport.vim') - delete('Ximport3.vim') delete('Xexport.vim') # Check that in a Vim9 script 'cpo' is set to the Vim default. diff --git a/src/testdir/test_vim9_script.vim b/src/testdir/test_vim9_script.vim index a3f28f1e72..767abd4855 100644 --- a/src/testdir/test_vim9_script.vim +++ b/src/testdir/test_vim9_script.vim @@ -2011,7 +2011,7 @@ def Test_for_loop_fails() echo k v endfor END - v9.CheckDefExecAndScriptFailure(lines, 'E1012: Type mismatch; expected job but got string', 2) + v9.CheckDefExecAndScriptFailure(lines, ['E1013: Argument 1: type mismatch, expected job but got string', 'E1012: Type mismatch; expected job but got string'], 2) lines =<< trim END var i = 0 @@ -2036,6 +2036,22 @@ def Test_for_loop_fails() endfor END v9.CheckDefExecAndScriptFailure(lines, ['E461:', 'E1017:']) + + lines =<< trim END + var l: list> = [{a: 1, b: 'x'}] + for item: dict in l + echo item + endfor + END + v9.CheckDefExecAndScriptFailure(lines, 'E1012: Type mismatch; expected dict but got dict') + + lines =<< trim END + var l: list> = [{n: 1}] + for item: dict in l + item->extend({s: ''}) + endfor + END + v9.CheckDefExecAndScriptFailure(lines, 'E1013: Argument 2: type mismatch, expected dict but got dict') enddef def Test_for_loop_script_var() diff --git a/src/testing.c b/src/testing.c index 5c4f118cef..448c01c1e9 100644 --- a/src/testing.c +++ b/src/testing.c @@ -1253,50 +1253,6 @@ f_test_void(typval_T *argvars UNUSED, typval_T *rettv) rettv->v_type = VAR_VOID; } -#ifdef FEAT_GUI - void -f_test_scrollbar(typval_T *argvars, typval_T *rettv UNUSED) -{ - char_u *which; - long value; - int dragging; - scrollbar_T *sb = NULL; - - if (check_for_string_arg(argvars, 0) == FAIL - || check_for_number_arg(argvars, 1) == FAIL - || check_for_number_arg(argvars, 2) == FAIL) - return; - - if (argvars[0].v_type != VAR_STRING - || (argvars[1].v_type) != VAR_NUMBER - || (argvars[2].v_type) != VAR_NUMBER) - { - emsg(_(e_invalid_argument)); - return; - } - which = tv_get_string(&argvars[0]); - value = tv_get_number(&argvars[1]); - dragging = tv_get_number(&argvars[2]); - - if (STRCMP(which, "left") == 0) - sb = &curwin->w_scrollbars[SBAR_LEFT]; - else if (STRCMP(which, "right") == 0) - sb = &curwin->w_scrollbars[SBAR_RIGHT]; - else if (STRCMP(which, "hor") == 0) - sb = &gui.bottom_sbar; - if (sb == NULL) - { - semsg(_(e_invalid_argument_str), which); - return; - } - gui_drag_scrollbar(sb, value, dragging); -# ifndef USE_ON_FLY_SCROLL - // need to loop through normal_cmd() to handle the scroll events - exec_normal(FALSE, TRUE, FALSE); -# endif -} -#endif - void f_test_setmouse(typval_T *argvars, typval_T *rettv UNUSED) { @@ -1375,6 +1331,7 @@ test_gui_drop_files(dict_T *args UNUSED) return TRUE; } +#if defined(FIND_REPLACE_DIALOG) static int test_gui_find_repl(dict_T *args) { @@ -1401,6 +1358,7 @@ test_gui_find_repl(dict_T *args) return retval; } +#endif static int test_gui_mouse_event(dict_T *args) @@ -1429,6 +1387,43 @@ test_gui_mouse_event(dict_T *args) return TRUE; } + static int +test_gui_scrollbar(dict_T *args) +{ + char_u *which; + long value; + int dragging; + scrollbar_T *sb = NULL; + + if (dict_find(args, (char_u *)"which", -1) == NULL + || dict_find(args, (char_u *)"value", -1) == NULL + || dict_find(args, (char_u *)"dragging", -1) == NULL) + return FALSE; + + which = dict_get_string(args, (char_u *)"which", FALSE); + value = (long)dict_get_number(args, (char_u *)"value"); + dragging = (int)dict_get_number(args, (char_u *)"dragging"); + + if (STRCMP(which, "left") == 0) + sb = &curwin->w_scrollbars[SBAR_LEFT]; + else if (STRCMP(which, "right") == 0) + sb = &curwin->w_scrollbars[SBAR_RIGHT]; + else if (STRCMP(which, "hor") == 0) + sb = &gui.bottom_sbar; + if (sb == NULL) + { + semsg(_(e_invalid_argument_str), which); + return FALSE; + } + gui_drag_scrollbar(sb, value, dragging); +# ifndef USE_ON_FLY_SCROLL + // need to loop through normal_cmd() to handle the scroll events + exec_normal(FALSE, TRUE, FALSE); +# endif + + return TRUE; +} + static int test_gui_tabline_event(dict_T *args UNUSED) { @@ -1483,10 +1478,14 @@ f_test_gui_event(typval_T *argvars UNUSED, typval_T *rettv UNUSED) event = tv_get_string(&argvars[0]); if (STRCMP(event, "dropfiles") == 0) rettv->vval.v_number = test_gui_drop_files(argvars[1].vval.v_dict); +# if defined(FIND_REPLACE_DIALOG) else if (STRCMP(event, "findrepl") == 0) rettv->vval.v_number = test_gui_find_repl(argvars[1].vval.v_dict); +# endif else if (STRCMP(event, "mouse") == 0) rettv->vval.v_number = test_gui_mouse_event(argvars[1].vval.v_dict); + else if (STRCMP(event, "scrollbar") == 0) + rettv->vval.v_number = test_gui_scrollbar(argvars[1].vval.v_dict); else if (STRCMP(event, "tabline") == 0) rettv->vval.v_number = test_gui_tabline_event(argvars[1].vval.v_dict); else if (STRCMP(event, "tabmenu") == 0) diff --git a/src/userfunc.c b/src/userfunc.c index 747e4d4778..371cfd328a 100644 --- a/src/userfunc.c +++ b/src/userfunc.c @@ -4232,7 +4232,8 @@ define_function(exarg_T *eap, char_u *name_arg, garray_T *lines_to_free) name = prefixed; } } - else if (vim9script && vim_strchr(name, AUTOLOAD_CHAR) != NULL) + else if (vim9script && name != NULL + && vim_strchr(name, AUTOLOAD_CHAR) != NULL) { emsg(_(e_cannot_use_name_with_hash_in_vim9_script_use_export_instead)); goto ret_free; diff --git a/src/version.c b/src/version.c index 00acbf1b76..de2fdcd126 100644 --- a/src/version.c +++ b/src/version.c @@ -231,11 +231,7 @@ static char *(features[]) = #else "-dnd", #endif -#ifdef EBCDIC - "+ebcdic", -#else "-ebcdic", -#endif #ifdef FEAT_EMACS_TAGS "+emacs_tags", #else @@ -765,6 +761,60 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 4293, +/**/ + 4292, +/**/ + 4291, +/**/ + 4290, +/**/ + 4289, +/**/ + 4288, +/**/ + 4287, +/**/ + 4286, +/**/ + 4285, +/**/ + 4284, +/**/ + 4283, +/**/ + 4282, +/**/ + 4281, +/**/ + 4280, +/**/ + 4279, +/**/ + 4278, +/**/ + 4277, +/**/ + 4276, +/**/ + 4275, +/**/ + 4274, +/**/ + 4273, +/**/ + 4272, +/**/ + 4271, +/**/ + 4270, +/**/ + 4269, +/**/ + 4268, +/**/ + 4267, /**/ 4266, /**/ @@ -9443,7 +9493,7 @@ list_in_columns(char_u **items, int size, int current) // The rightmost column doesn't need a separator. // Sacrifice it to fit in one more column if possible. ncol = (int) (Columns + 1) / width; - nrow = item_count / ncol + (item_count % ncol ? 1 : 0); + nrow = item_count / ncol + ((item_count % ncol) ? 1 : 0); // "i" counts columns then rows. "idx" counts rows then columns. for (i = 0; !got_int && i < nrow * ncol; ++i) diff --git a/src/vim9cmds.c b/src/vim9cmds.c index 716a404111..90b61dbb34 100644 --- a/src/vim9cmds.c +++ b/src/vim9cmds.c @@ -990,11 +990,8 @@ compile_for(char_u *arg_start, cctx_T *cctx) if (lhs_type == &t_any) lhs_type = item_type; else if (item_type != &t_unknown - && (item_type == &t_any - ? need_type(item_type, lhs_type, - -1, 0, cctx, FALSE, FALSE) - : check_type(lhs_type, item_type, TRUE, where)) - == FAIL) + && need_type_where(item_type, lhs_type, -1, + where, cctx, FALSE, FALSE) == FAIL) goto failed; var_lvar = reserve_local(cctx, arg, varlen, TRUE, lhs_type); if (var_lvar == NULL) @@ -1003,8 +1000,6 @@ compile_for(char_u *arg_start, cctx_T *cctx) if (semicolon && idx == var_count - 1) var_lvar->lv_type = vartype; - else - var_lvar->lv_type = item_type; generate_STORE(cctx, ISN_STORE, var_lvar->lv_idx, NULL); } diff --git a/src/vim9compile.c b/src/vim9compile.c index 9ad1e7ddc9..9dbd1198dd 100644 --- a/src/vim9compile.c +++ b/src/vim9compile.c @@ -386,7 +386,7 @@ use_typecheck(type_T *actual, type_T *expected) * If "actual_is_const" is TRUE then the type won't change at runtime, do not * generate a TYPECHECK. */ - static int + int need_type_where( type_T *actual, type_T *expected, diff --git a/src/vim9execute.c b/src/vim9execute.c index a45d7c5538..cac8c519d9 100644 --- a/src/vim9execute.c +++ b/src/vim9execute.c @@ -4412,7 +4412,8 @@ exec_instructions(ectx_T *ectx) == NULL) { SOURCING_LNUM = iptr->isn_lnum; - semsg(_(e_key_not_present_in_dictionary), iptr->isn_arg.string); + semsg(_(e_key_not_present_in_dictionary), + iptr->isn_arg.string); goto on_error; } // Put the dict used on the dict stack, it might be used by @@ -4531,21 +4532,7 @@ exec_instructions(ectx_T *ectx) break; case ISN_SETTYPE: - { - checktype_T *ct = &iptr->isn_arg.type; - - tv = STACK_TV_BOT(-1); - if (tv->v_type == VAR_DICT && tv->vval.v_dict != NULL) - { - free_type(tv->vval.v_dict->dv_type); - tv->vval.v_dict->dv_type = alloc_type(ct->ct_type); - } - else if (tv->v_type == VAR_LIST && tv->vval.v_list != NULL) - { - free_type(tv->vval.v_list->lv_type); - tv->vval.v_list->lv_type = alloc_type(ct->ct_type); - } - } + set_tv_type(STACK_TV_BOT(-1), iptr->isn_arg.type.ct_type); break; case ISN_2BOOL: diff --git a/src/vim9expr.c b/src/vim9expr.c index 6affac22ee..d36df84e0b 100644 --- a/src/vim9expr.c +++ b/src/vim9expr.c @@ -759,7 +759,7 @@ compile_call( if (STRCMP(name, "add") == 0 && argcount == 2) { - type_T *type = get_type_on_stack(cctx, 1); + type_T *type = get_decl_type_on_stack(cctx, 1); // add() can be compiled to instructions if we know the type if (type->tt_type == VAR_LIST) diff --git a/src/vim9instr.c b/src/vim9instr.c index e869d9ea68..60963a3c9b 100644 --- a/src/vim9instr.c +++ b/src/vim9instr.c @@ -1078,7 +1078,8 @@ generate_NEWLIST(cctx_T *cctx, int count) // Get the member type and the declared member type from all the items on // the stack. - member_type = get_member_type_from_stack(count, 1, &decl_member_type, cctx); + member_type = get_member_type_from_stack(count, 1, + &decl_member_type, cctx); type = get_list_type(member_type, cctx->ctx_type_list); decl_type = get_list_type(decl_member_type, cctx->ctx_type_list); @@ -1277,6 +1278,7 @@ generate_BCALL(cctx_T *cctx, int func_idx, int argcount, int method_call) type2_T shuffled_argtypes[MAX_FUNC_ARGS]; type2_T *maptype = NULL; type_T *type; + type_T *decl_type; RETURN_OK_IF_SKIP(cctx); argoff = check_internal_func(func_idx, argcount); @@ -1327,8 +1329,8 @@ generate_BCALL(cctx_T *cctx, int func_idx, int argcount, int method_call) // Drop the argument types and push the return type. stack->ga_len -= argcount; - type = internal_func_ret_type(func_idx, argcount, argtypes); - if (push_type_stack(cctx, type) == FAIL) + type = internal_func_ret_type(func_idx, argcount, argtypes, &decl_type); + if (push_type_stack2(cctx, type, decl_type) == FAIL) return FAIL; if (maptype != NULL && maptype[0].type_decl->tt_member != NULL @@ -1351,7 +1353,9 @@ generate_LISTAPPEND(cctx_T *cctx) type_T *expected; // Caller already checked that list_type is a list. - list_type = get_type_on_stack(cctx, 1); + // For checking the item type we use the declared type of the list and the + // current type of the added item, adding a string to [1, 2] is OK. + list_type = get_decl_type_on_stack(cctx, 1); item_type = get_type_on_stack(cctx, 0); expected = list_type->tt_member; if (need_type(item_type, expected, -1, 0, cctx, FALSE, FALSE) == FAIL) diff --git a/src/vim9type.c b/src/vim9type.c index 82c1b5f453..f72698cb9d 100644 --- a/src/vim9type.c +++ b/src/vim9type.c @@ -102,6 +102,71 @@ free_type(type_T *type) vim_free(type); } +/* + * Return TRUE if "type" is to be recursed into for setting the type. + */ + static int +set_tv_type_recurse(type_T *type) +{ + return type->tt_member != NULL + && (type->tt_member->tt_type == VAR_DICT + || type->tt_member->tt_type == VAR_LIST) + && type->tt_member->tt_member != NULL + && type->tt_member->tt_member != &t_any + && type->tt_member->tt_member != &t_unknown; +} + +/* + * Set the type of "tv" to "type" if it is a list or dict. + */ + void +set_tv_type(typval_T *tv, type_T *type) +{ + if (tv->v_type == VAR_DICT && tv->vval.v_dict != NULL) + { + dict_T *d = tv->vval.v_dict; + + if (d->dv_type != type) + { + free_type(d->dv_type); + d->dv_type = alloc_type(type); + if (set_tv_type_recurse(type)) + { + int todo = (int)d->dv_hashtab.ht_used; + hashitem_T *hi; + dictitem_T *di; + + for (hi = d->dv_hashtab.ht_array; todo > 0; ++hi) + { + if (!HASHITEM_EMPTY(hi)) + { + --todo; + di = HI2DI(hi); + set_tv_type(&di->di_tv, type->tt_member); + } + } + } + } + } + else if (tv->v_type == VAR_LIST && tv->vval.v_list != NULL) + { + list_T *l = tv->vval.v_list; + + if (l->lv_type != type) + { + free_type(l->lv_type); + l->lv_type = alloc_type(type); + if (l->lv_first != &range_list_item && set_tv_type_recurse(type)) + { + listitem_T *li; + + FOR_ALL_LIST_ITEMS(l, li) + set_tv_type(&li->li_tv, type->tt_member); + } + } + } +} + type_T * get_list_type(type_T *member_type, garray_T *type_gap) { @@ -279,7 +344,11 @@ typval2type_int(typval_T *tv, int copyID, garray_T *type_gap, int flags) list_T *l = tv->vval.v_list; listitem_T *li; - if (l == NULL || (l->lv_first == NULL && l->lv_type == NULL)) + // An empty list has type list, unless the type was specified + // and is not list. This matters when assigning to a variable + // with a specific list type. + if (l == NULL || (l->lv_first == NULL + && (l->lv_type == NULL || l->lv_type->tt_member == &t_any))) return &t_list_empty; if ((flags & TVTT_DO_MEMBER) == 0) return &t_list_any; @@ -357,8 +426,10 @@ typval2type_int(typval_T *tv, int copyID, garray_T *type_gap, int flags) if (idx >= 0) { + type_T *decl_type; // unused + internal_func_get_argcount(idx, &argcount, &min_argcount); - member_type = internal_func_ret_type(idx, 0, NULL); + member_type = internal_func_ret_type(idx, 0, NULL, &decl_type); } else ufunc = find_func(name, FALSE); @@ -1244,7 +1315,8 @@ set_type_on_stack(cctx_T *cctx, type_T *type, int offset) } /* - * Get the type from the type stack. If "offset" is zero the one at the top, + * Get the current type from the type stack. If "offset" is zero the one at + * the top, * if "offset" is one the type above that, etc. * Returns &t_unknown if there is no such stack entry. */ @@ -1259,6 +1331,23 @@ get_type_on_stack(cctx_T *cctx, int offset) ->type_curr; } +/* + * Get the declared type from the type stack. If "offset" is zero the one at + * the top, + * if "offset" is one the type above that, etc. + * Returns &t_unknown if there is no such stack entry. + */ + type_T * +get_decl_type_on_stack(cctx_T *cctx, int offset) +{ + garray_T *stack = &cctx->ctx_type_stack; + + if (offset + 1 > stack->ga_len) + return &t_unknown; + return (((type2_T *)stack->ga_data) + stack->ga_len - offset - 1) + ->type_decl; +} + /* * Get the member type of a dict or list from the items on the stack of "cctx". * The declared type is stored in "decl_type". diff --git a/src/viminfo.c b/src/viminfo.c index 3620b58de5..cc28a12097 100644 --- a/src/viminfo.c +++ b/src/viminfo.c @@ -162,7 +162,7 @@ viminfo_writestring(FILE *fd, char_u *p) // the string (e.g., variable name). Add something to the length for the // '<', NL and trailing NUL. if (len > LSIZE / 2) - fprintf(fd, IF_EB("\026%d\n<", CTRL_V_STR "%d\n<"), len + 3); + fprintf(fd, "\026%d\n<", len + 3); while ((c = *p++) != NUL) { @@ -2485,11 +2485,9 @@ read_viminfo_filemark(vir_T *virp, int force) // We only get here if line[0] == '\'' or '-'. // Illegal mark names are ignored (for future expansion). str = virp->vir_line + 1; - if ( -#ifndef EBCDIC - *str <= 127 && -#endif - ((*virp->vir_line == '\'' && (VIM_ISDIGIT(*str) || isupper(*str))) + if (*str <= 127 + && ((*virp->vir_line == '\'' + && (VIM_ISDIGIT(*str) || isupper(*str))) || (*virp->vir_line == '-' && *str == '\''))) { if (*str == '\'')