Merge remote-tracking branch 'vim/master'

This commit is contained in:
ichizok
2022-02-04 10:07:01 +09:00
115 changed files with 1722 additions and 2903 deletions
+2 -4
View File
@@ -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 \
+29 -34
View File
@@ -4,13 +4,13 @@ vim9script noclear
# Language: C
# Maintainer: Bram Moolenaar <Bram@vim.org>
# Rewritten in Vim9 script by github user lacygoill
# Last Change: 2021 Dec 27
# Last Change: 2022 Jan 31
var prepended: string
var grepCache: dict<list<dict<any>>>
# 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<any>) => Tag2item(v)))
res = res->extend(tags->map((_, v: dict<any>) => 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<dict<any>>,
bracket: bool
): string
line: string,
match: string,
memarg: list<dict<any>>,
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<any>, brackets: string): dict<string> # {{{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<string>,
depth: number,
all: bool
): list<dict<string>>
lead: string,
items: list<string>,
depth: number,
all: bool): list<dict<string>>
# 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<string>,
all: bool
): list<dict<string>>
atypename: string,
items: list<string>,
all: bool): list<dict<string>>
# 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<dict<any>>,
items: list<string>,
all: bool
): list<dict<string>>
matches: list<dict<any>>,
items: list<string>,
all: bool): list<dict<string>>
# 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
+20 -2
View File
@@ -1,7 +1,7 @@
" Vim functions for file type detection
"
" Maintainer: Bram Moolenaar <Bram@vim.org>
" 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()
-8
View File
@@ -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
+10 -1
View File
@@ -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 <script> and <style>
"auto" auto indent (same indent as the blocktag)
"inc" auto indent + one indent step
You can set the indent for attributes after an open <tag line: >
:let g:html_indent_attribute = 1
<
VALUE MEANING ~
1 auto indent, one indent step more than <tag
2 auto indent, two indent steps (default)
> 2 auto indent, more indent steps
Many tags increase the indent for what follows per default (see "Add Indent
Tags" in the script). You can add further tags with: >
+2
View File
@@ -256,6 +256,8 @@ a slash. Thus "-R" means recovery and "-/R" readonly.
Interfaces, such as Python, Ruby and Lua, are also disabled,
since they could be used to execute shell commands. Perl uses
the Safe module.
For Unix restricted mode is used when the last part of $SHELL
is "nologin" or "false".
Note that the user may still find a loophole to execute a
shell command, it has only been made difficult.
+1 -5
View File
@@ -7873,7 +7873,6 @@ interactive-functions usr_41.txt /*interactive-functions*
interfaces-5.2 version5.txt /*interfaces-5.2*
internal-variables eval.txt /*internal-variables*
internal-wordlist spell.txt /*internal-wordlist*
internal_get_nv_cmdchar() builtin.txt /*internal_get_nv_cmdchar()*
internet intro.txt /*internet*
interrupt() builtin.txt /*interrupt()*
intro intro.txt /*intro*
@@ -10066,10 +10065,7 @@ test_feedinput() testing.txt /*test_feedinput()*
test_garbagecollect_now() testing.txt /*test_garbagecollect_now()*
test_garbagecollect_soon() testing.txt /*test_garbagecollect_soon()*
test_getvalue() testing.txt /*test_getvalue()*
test_gui_drop_files() testing.txt /*test_gui_drop_files()*
test_gui_mouse_event() testing.txt /*test_gui_mouse_event()*
test_gui_tabline_event() testing.txt /*test_gui_tabline_event()*
test_gui_tabmenu_event() testing.txt /*test_gui_tabmenu_event()*
test_gui_event() testing.txt /*test_gui_event()*
test_ignore_error() testing.txt /*test_ignore_error()*
test_null_blob() testing.txt /*test_null_blob()*
test_null_channel() testing.txt /*test_null_channel()*
+4 -7
View File
@@ -1,4 +1,4 @@
*todo.txt* For Vim version 8.2. Last change: 2022 Jan 29
*todo.txt* For Vim version 8.2. Last change: 2022 Jan 31
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -38,19 +38,16 @@ browser use: https://github.com/vim/vim/issues/1234
*known-bugs*
-------------------- Known bugs and current work -----------------------
Only find a global function from Vim9 script when using "g:" ? #9637
Disallow defining a script#Func() in Vim9 script.
Cannot use command modifier for "import 'name.vim' as vim9"
range() returns list<number>, but it's OK if map() changes the type.
#9665 Change internal_func_ret_type() to return current and declared type?
When making a copy of a list or dict, do not keep the type? #9644
With deepcopy() all, with copy() this still fails:
var l: list<list<number>> = [[1], [2]]
l->copy()[0][0] = 'x'
Remove EBCDIC support?
Once Vim9 is stable:
- Add all the error numbers in a good place in documentation.
done until E1145
-2
View File
@@ -1110,7 +1110,6 @@ Testing: *test-functions*
assert_nobeep() assert that a command does not cause a beep
assert_fails() assert that a command fails
assert_report() report a test failure
internal_get_nv_cmdchar() normal/visual command character at an index
test_alloc_fail() make memory allocation fail
test_autochdir() enable 'autochdir' during startup
test_override() test with Vim internal overrides
@@ -1131,7 +1130,6 @@ Testing: *test-functions*
test_setmouse() set the mouse position
test_feedinput() add key sequence to input buffer
test_option_not_set() reset flag indicating option was set
test_scrollbar() simulate scrollbar movement in the GUI
test_refcount() return an expression's reference count
test_srand_seed() set the seed value for srand()
test_unknown() return a value with unknown type
+5 -6
View File
@@ -1,4 +1,4 @@
*vim9.txt* For Vim version 8.2. Last change: 2022 Jan 29
*vim9.txt* For Vim version 8.2. Last change: 2022 Jan 30
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -372,13 +372,12 @@ Global variables must be prefixed with "g:", also at the script level. >
g:global = 'value'
var Funcref = g:ThatFunction
Global functions must be prefixed with "g:" when defining them, but can be
called without "g:". >
Global functions must be prefixed with "g:": >
vim9script
def g:GlobalFunc(): string
return 'text'
enddef
echo GlobalFunc()
echo g:GlobalFunc()
The "g:" prefix is not needed for auto-load functions.
*vim9-function-defined-later*
@@ -1334,10 +1333,10 @@ variable was declared in a legacy function.
When a type has been declared this is attached to a list or string. When
later some expression attempts to change the type an error will be given: >
var ll: list<number> = [1, 2, 3]
ll->extend('x') # Error, 'x' is not a number
ll->extend(['x']) # Error, 'x' is not a number
If the type is inferred then the type is allowed to change: >
[1, 2, 3]->extend('x') # result: [1, 2, 3, 'x']
[1, 2, 3]->extend(['x']) # result: [1, 2, 3, 'x']
Stricter type checking ~
+2 -2
View File
@@ -1,7 +1,7 @@
" Vim support file to detect file types
"
" Maintainer: Bram Moolenaar <Bram@vim.org>
" Last Change: 2022 Jan 29
" Last Change: 2022 Jan 31
" Listen very carefully, I will say this only once
if exists("did_load_filetypes")
@@ -2051,7 +2051,7 @@ au BufRead,BufNewFile *.hw,*.module,*.pkg
\ endif
" Visual Basic (also uses *.bas) or FORM
au BufNewFile,BufRead *.frm call dist#ft#FTVB("form")
au BufNewFile,BufRead *.frm call dist#ft#FTfrm()
" SaxBasic is close to Visual Basic
au BufNewFile,BufRead *.sba setf vb
+12 -3
View File
@@ -1,7 +1,7 @@
" Vim indent script for HTML
" Maintainer: Bram Moolenaar
" Original Author: Andy Wokula <anwoku@yahoo.de>
" Last Change: 2021 Jun 13
" Last Change: 2022 Jan 31
" Version: 1.0 "{{{
" Description: HTML indent script with cached state for faster indenting on a
" range of lines.
@@ -149,6 +149,15 @@ func HtmlIndent_CheckUserSettings()
let b:html_indent_line_limit = 200
endif
endif
if exists('b:html_indent_attribute')
let b:hi_attr_indent = b:html_indent_attribute
elseif exists('g:html_indent_attribute')
let b:hi_attr_indent = g:html_indent_attribute
else
let b:hi_attr_indent = 2
endif
endfunc "}}}
" Init Script Vars
@@ -946,11 +955,11 @@ func s:InsideTag(foundHtmlString)
let idx = match(text, '<' . s:tagname . '\s\+\zs\w')
endif
if idx == -1
" after just "<tag" indent two levels more
" after just "<tag" indent two levels more by default
let idx = match(text, '<' . s:tagname . '$')
if idx >= 0
call cursor(lnum, idx + 1)
return virtcol('.') - 1 + shiftwidth() * 2
return virtcol('.') - 1 + shiftwidth() * b:hi_attr_indent
endif
endif
if idx > 0
+12 -1
View File
@@ -1,4 +1,4 @@
" vim: set ft=html sw=4 :
" vim: set ft=html sw=4 ts=8 :
" START_INDENT
@@ -41,6 +41,11 @@ dd text
dt text
</dt>
</dl>
<div
class="test"
style="color: yellow">
text
</div>
</body>
</html>
@@ -50,6 +55,7 @@ dt text
% 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()
<html>
<body>
@@ -61,6 +67,11 @@ div#d2 { color: green; }
var v1 = "v1";
var v2 = "v2";
</script>
<div
class="test"
style="color: yellow">
text
</div>
</body>
</html>
% END_INDENT
+12 -1
View File
@@ -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
</dt>
</dl>
<div
class="test"
style="color: yellow">
text
</div>
</body>
</html>
@@ -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()
<html>
<body>
@@ -61,6 +67,11 @@ div#d2 { color: green; }
var v1 = "v1";
var v2 = "v2";
</script>
<div
class="test"
style="color: yellow">
text
</div>
</body>
</html>
% END_INDENT
+7 -7
View File
@@ -1,8 +1,8 @@
" Vim syntax file
" Language: Vim 8.2 script
" Maintainer: Charles E. Campbell <NcampObell@SdrPchip.AorgM-NOSPAM>
" 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 ---
+13 -9
View File
@@ -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
+12 -8
View File
@@ -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
+1 -1
View File
@@ -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
+12 -18
View File
@@ -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 \
+2 -2
View File
@@ -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;
-94
View File
@@ -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
+10 -4
View File
@@ -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
+2 -2
View File
@@ -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
+3 -104
View File
@@ -87,18 +87,11 @@ buf_init_chartab(
* Set the default size for printable characters:
* From <Space> 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
+1 -7
View File
@@ -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;
+3 -3
View File
@@ -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)
{
+38
View File
@@ -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 <stdio.h>
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;
}
+49 -61
View File
@@ -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<dict<number>> = []
" 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[<normal mode command character>] => nv_cmds[] index
static const unsigned short nv_cmd_idx[] =
{
END
# Generate a header file with the table
var output: list<string> =<< 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[<normal mode command character>] => 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<string> = 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
-45
View File
@@ -1,45 +0,0 @@
# Python script to get both the data and resource fork from a BinHex encoded
# file.
# Author: MURAOKA Taro <koron.kaoriya@gmail.com>
# Last Change: 2018 Mar 27
#
# Copyright (C) 2003,12 MURAOKA Taro <koron.kaoriya@gmail.com>
# 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:
+7 -5
View File
@@ -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;
}
+3 -116
View File
@@ -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
/*
+7 -7
View File
@@ -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
+4 -18
View File
@@ -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 "<C-V>048", "^" as "<C-V>^"
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);
+2 -3
View File
@@ -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[]
+6 -9
View File
@@ -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;
+187 -87
View File
@@ -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<number>, 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
+1 -18
View File
@@ -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"
+4 -10
View File
@@ -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), " <M-%s>",
(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
+25 -30
View File
@@ -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;
}
/*
+4 -18
View File
@@ -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
+4 -13
View File
@@ -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');
}
-1
View File
@@ -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.
+9 -21
View File
@@ -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 <CR>
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;
}
+11 -20
View File
@@ -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)
{
-4
View File
@@ -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())
+22 -37
View File
@@ -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
+11 -21
View File
@@ -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]);
+2 -2
View File
@@ -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
+1 -10
View File
@@ -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);
+2 -2
View File
@@ -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
-74
View File
@@ -1,74 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- vim:set ts=2 sts=2 sw=2 tw=0: -->
<!DOCTYPE plist SYSTEM "file://localhost/System/Library/DTDs/PropertyList.dtd">
<plist version="0.9">
<dict>
<key>CFBundleIdentifier</key>
<string>org.vim.Vim-APP_VER</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleExecutable</key>
<string>APP_EXE</string>
<key>CFBundleName</key>
<string>APP_NAME</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleVersion</key>
<string>APP_VER</string>
<key>CFBundleShortVersionString</key>
<string>APP_VER</string>
<key>CFBundleSignature</key>
<string>VIM!</string>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CSResourcesFileMapped</key>
<true/>
<key>CFBundleIconFile</key>
<string>app.icns</string>
<key>CFBundleDocumentTypes</key>
<array>
<dict>
<key>CFBundleTypeExtensions</key>
<array>
<string>txt</string>
<string>text</string>
</array>
<key>CFBundleTypeMIMETypes</key>
<array>
<string>text/plain</string>
</array>
<key>CFBundleTypeIconFile</key>
<string>doc-txt.icns</string>
<key>CFBundleTypeName</key>
<string>Text File</string>
<key>CFBundleTypeRole</key>
<string>Editor</string>
</dict>
<dict>
<key>CFBundleTypeExtensions</key>
<array>
<string>*</string>
</array>
<key>CFBundleTypeMIMETypes</key>
<array>
<string>text/*</string>
</array>
<key>CFBundleTypeIconFile</key>
<string>doc.icns</string>
<key>CFBundleTypeName</key>
<string>File</string>
<key>CFBundleTypeOSTypes</key>
<array>
<string>****</string>
</array>
<key>CFBundleTypeRole</key>
<string>Editor</string>
</dict>
</array>
</dict>
</plist>
+3 -4
View File
@@ -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 // <SNR>
, KE_PLUG = 83 // <Plug>
, 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
+13 -8
View File
@@ -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;
}
+6 -18
View File
@@ -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 *)"")
+1 -1
View File
@@ -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
+1 -4
View File
@@ -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
+1 -1
View File
@@ -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
+8 -23
View File
@@ -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
+5 -324
View File
@@ -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);
+310
View File
@@ -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)
+2 -10
View File
@@ -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
+14 -11
View File
@@ -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] == '_');
-4
View File
@@ -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
+2 -28
View File
@@ -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,
-659
View File
@@ -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!:
Binary file not shown.
Binary file not shown.
Binary file not shown.
+21 -153
View File
@@ -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
+13 -13
View File
@@ -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;
+1 -1
View File
@@ -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);
+1 -1
View File
@@ -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);
+1 -2
View File
@@ -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);
+1 -1
View File
@@ -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);
-1
View File
@@ -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);
-1
View File
@@ -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);
+1
View File
@@ -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);
+2
View File
@@ -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);
+1 -45
View File
@@ -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,
+1 -29
View File
@@ -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;
}
+59 -128
View File
@@ -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;
-14
View File
@@ -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)
+2 -2
View File
@@ -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
+1 -1
View File
@@ -2294,7 +2294,7 @@ script_autoload(
// Try loading the package from $VIMRUNTIME/autoload/<name>.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;
}
-1
View File
@@ -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)
-4
View File
@@ -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
}
}
-3
View File
@@ -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
+281 -291
View File
@@ -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: <Esc>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 <Esc> 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)
{
+1 -7
View File
@@ -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\<C-V>193\<C-V>xc2\<C-V>o303 \<C-V>90a\<C-V>xfg\<C-V>o578\<Esc>"
else
let t = "o\<C-V>65\<C-V>x42\<C-V>o103 \<C-V>33a\<C-V>xfg\<C-V>o78\<Esc>"
endif
let t = "o\<C-V>65\<C-V>x42\<C-V>o103 \<C-V>33a\<C-V>xfg\<C-V>o78\<Esc>"
exe "normal " . t
call assert_equal("ABC !a\<C-O>g\<C-G>8", getline(2))
+3 -15
View File
@@ -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
+1 -5
View File
@@ -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'))
+28
View File
@@ -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
+2 -10
View File
@@ -19,11 +19,7 @@ func Test_gf_url()
call search("^second")
call search("URL")
call assert_equal("URL://machine.name/tmp/vimtest2b", expand("<cfile>"))
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("<cfile>"))
@@ -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")
+27 -3
View File
@@ -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
+13
View File
@@ -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'
+17
View File
@@ -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
-5
View File
@@ -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
+8
View File
@@ -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')
+10 -1
View File
@@ -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<any> = []
var l: list<string>
l = l2
END
v9.CheckDefAndScriptSuccess(lines)
enddef
def Test_assignment_vim9script()
var lines =<< trim END
vim9script
+38 -8
View File
@@ -77,7 +77,12 @@ enddef
def Test_add()
v9.CheckDefAndScriptFailure(['add({}, 1)'], ['E1013: Argument 1: type mismatch, expected list<any> but got dict<unknown>', '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<number> = [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<number> = [1, 2]
assert_equal([1, 2, 'x'], nl->copy()->extend(['x']))
var lines =<< trim END
var nll: list<list<number>> = [[1, 2]]
nll->copy()[0]->extend(['x'])
END
v9.CheckDefExecAndScriptFailure(lines, 'E1013: Argument 2: type mismatch, expected list<number> but got list<string> in extend()')
var nd: dict<number> = {a: 1, b: 2}
assert_equal({a: 1, b: 2, c: 'x'}, nd->copy()->extend({c: 'x'}))
lines =<< trim END
var ndd: dict<dict<number>> = {a: {x: 1, y: 2}}
ndd->copy()['a']->extend({z: 'x'})
END
v9.CheckDefExecAndScriptFailure(lines, 'E1013: Argument 2: type mismatch, expected dict<number> but got dict<string> in extend()')
# after a deepcopy() the item type can also change
var nll: list<list<number>> = [[1, 2]]
assert_equal([1, 2, 'x'], nll->deepcopy()[0]->extend(['x']))
var ndd: dict<dict<number>> = {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<number> 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'])

Some files were not shown because too many files have changed in this diff Show More