git-svn-id: https://vimsuite.svn.sourceforge.net/svnroot/vimsuite/trunk@134 eb2d0018-73a3-4aeb-bfe9-1def61c9ec69
1037 lines
34 KiB
VimL
1037 lines
34 KiB
VimL
if exists('nobmsk')
|
||
finish
|
||
endif
|
||
|
||
if !exists('g:Austausch')
|
||
let g:Austausch = fnamemodify('//smuc1805/ee-org/Austausch/ea-92', ':p')
|
||
endif
|
||
if !exists('g:myAustausch')
|
||
let g:myAustausch = fnamemodify(g:Austausch . '/Liebl', ':p')
|
||
endif
|
||
|
||
" ----
|
||
" Menu
|
||
" ----
|
||
let s:BmskMenuLocation = 90
|
||
let s:BMSKmenuname = '&BMSK.'
|
||
|
||
" -----------
|
||
" Set Project
|
||
" -----------
|
||
command -complete=dir -nargs=1 SetBmskWA let g:bmskWA = '<args>'
|
||
command -complete=custom,GetAllBmskProjects -nargs=? SetBmskProject
|
||
\ call s:SetBmskProject('<args>')
|
||
|
||
function s:SetBmskProject(basedir)
|
||
if ((a:basedir == '') && has('browse'))
|
||
" Browse for makefile
|
||
if exists('g:bmskWA')
|
||
let l:bmskWA = g:bmskWA
|
||
else
|
||
let l:bmskWA = ''
|
||
endif
|
||
|
||
if exists('b:browsefilter')
|
||
let l:browsefilter = b:browsefilter
|
||
endif
|
||
let b:browsefilter =
|
||
\ 'Makefiles (make_fsw.bat)\tmake_fsw.bat\n' .
|
||
\ 'Makefiles (makefile*)\tmakefile*\n' .
|
||
\ 'All Files (*.*)\t*.*'
|
||
let makefile = browse(0, 'Select makefile', l:bmskWA, '')
|
||
if exists('l:browsefilter')
|
||
let b:browsefilter = l:browsefilter
|
||
endif
|
||
let basedir = fnamemodify(makefile, ':p:h')
|
||
let makefile = fnamemodify(makefile, ':t')
|
||
if ((makefile == 'make_fsw.bat') || (makefile == 'makefile.mak') || (makefile == 'makefile'))
|
||
let g:makeCommand = makefile
|
||
let &makeprg = g:makeCommand . ' $*'
|
||
call s:SetBmskDirs(basedir)
|
||
else
|
||
echo 'No makefile:' makefile
|
||
endif
|
||
else
|
||
" set Workarea and basedir
|
||
if (isdirectory(a:basedir))
|
||
let basedir = a:basedir
|
||
let makefile = fnamemodify(a:basedir . '/make_fsw.bat', ':p')
|
||
if !filereadable(makefile)
|
||
let makefile = glob(a:basedir . '/*/make_fsw.bat')
|
||
let basedir = fnamemodify(makefile, ':p:h')
|
||
endif
|
||
if (filereadable(makefile))
|
||
let g:makeCommand = makefile
|
||
let &makeprg = g:makeCommand . ' $*'
|
||
call s:SetBmskDirs(basedir)
|
||
else
|
||
echo 'No makefile' makefile
|
||
endif
|
||
else
|
||
echo 'No directory:' a:basedir
|
||
endif
|
||
endif
|
||
endfunction
|
||
|
||
function GetAllBmskProjects(ArgLead, CmdLine, CursorPos)
|
||
let projects_txt = fnamemodify($VIMRUNTIME . '/../projects.txt', ':p')
|
||
let projects = ''
|
||
" if exists('g:bmskWA')
|
||
" let projects = projects . GlobLong(g:bmskWA . '/bmsk*')
|
||
" endif
|
||
if filereadable(projects_txt)
|
||
let projects = projects . system('more ' . projects_txt)
|
||
endif
|
||
" if (a:CursorPos > strlen('SetBmskProject e:'))
|
||
" let path = substitute(a:CmdLine, '.*SetBmskProject\s\+\(\f*\)', '\1', '')
|
||
" let projects = projects . GlobLong(path)
|
||
" endif
|
||
return projects
|
||
endfunction
|
||
|
||
function s:AddAllKnownProjectsToMenu()
|
||
let projREGEX = '\(\f\+\)' . "\n" . '\(.*\)'
|
||
let projects = GetAllBmskProjects(0, '', 0)
|
||
while strlen(projects) > 0
|
||
let project = substitute(projects, projREGEX, '\1', '')
|
||
call s:AddBmskProjectToMenu(project)
|
||
let projects = substitute(projects, projREGEX, '\2', '')
|
||
endwhile
|
||
endfunction
|
||
|
||
function s:AddBmskProjectToMenu(projectPath)
|
||
if isdirectory(a:projectPath)
|
||
let projectName = fnamemodify(a:projectPath, ':p:h:t')
|
||
exec 'anoremenu ..30 '.s:BMSKmenuname.'&Project.'
|
||
\ . escape(projectName, '.') . '<tab>'
|
||
\ . ' :SetBmskProject ' . a:projectPath . '<CR>'
|
||
endif
|
||
endfunction
|
||
|
||
function s:DelBmskProjects()
|
||
exec 'silent! aunmenu '.s:BMSKmenuname.'&Project'
|
||
exec 'anoremenu '.s:BmskMenuLocation.'.10.10 '.s:BMSKmenuname.
|
||
\'&Project.&Browse\ for\ makefile<tab>:SetBmskProject'.
|
||
\' :SetBmskProject<CR>'
|
||
exec 'anoremenu ..25 '. s:BMSKmenuname.
|
||
\'&Project.-sep1- :'
|
||
endfunction
|
||
|
||
function s:BmskRedrawProjectMenu()
|
||
call s:DelBmskProjects()
|
||
call s:AddAllKnownProjectsToMenu()
|
||
endfunction
|
||
|
||
function s:BmskRedrawMenu()
|
||
" exec 'anoremenu '.s:BmskMenuLocation.'.25 '. s:BMSKmenuname.'-sepsuite0- :'
|
||
" Project
|
||
call s:BmskRedrawProjectMenu()
|
||
if exists('g:bmskdir')
|
||
exec 'anoremenu ..20 '.s:BMSKmenuname.
|
||
\'&Project.&Update\ Buffers<tab>:BuffersUpdate'.
|
||
\' :BuffersUpdate<CR>'
|
||
" Settings
|
||
exec 'anoremenu .20.10 '.s:BMSKmenuname.
|
||
\'&Settings.&Motorvariante<tab>:SetMotorvariante'.
|
||
\' :SetMotorvariante<CR>'
|
||
exec 'anoremenu ..20 '.s:BMSKmenuname.
|
||
\'&Settings.Hardware-&Muster<tab>:SetMuster'.
|
||
\' :SetMuster<CR>'
|
||
exec 'anoremenu ..30 '.s:BMSKmenuname.
|
||
\'&Settings.&Egas<tab>:SetEgas'.
|
||
\' :SetEgas<CR>'
|
||
exec 'anoremenu ..40 '.s:BMSKmenuname.
|
||
\'&Settings.Software-&Stand<tab>:SetSWStand'.
|
||
\' :SetSWStand<CR>'
|
||
" Compile
|
||
exec 'anoremenu .30.10 '.s:BMSKmenuname.
|
||
\'&Compile.&Build<tab>:Bmsk'.
|
||
\' :Bmsk<CR>'
|
||
exec 'anoremenu ..20 '.s:BMSKmenuname.
|
||
\'&Compile.&Alle\ Testst<73>nde<tab>:BmskAll\ Test'.
|
||
\' :BmskAll Test<CR>'
|
||
exec 'anoremenu ..30 '.s:BMSKmenuname.
|
||
\'&Compile.&Lint<tab>:Lint'.
|
||
\' :Lint<CR>'
|
||
exec 'anoremenu ..35 '.s:BMSKmenuname.
|
||
\'&Compile.&Doku\ erstellen<tab>:Bmsk\ doku'.
|
||
\' :Bmsk doku<CR>'
|
||
exec 'anoremenu ..36 '.s:BMSKmenuname.
|
||
\'&Compile.&Einzeldoku\ erstellen<tab>:BmskDoku\ doku\ funktionen="\.\.\."'.
|
||
\' :BmskDoku<CR>'
|
||
exec 'anoremenu ..40 '.s:BMSKmenuname.
|
||
\'&Compile.&Clean<tab>:Bmsk\ clean'.
|
||
\' :Bmsk clean<CR>'
|
||
exec 'anoremenu ..45 '.s:BMSKmenuname.
|
||
\'&Compile.&Clean\ all<tab>:Bmsk\ distclean'.
|
||
\' :Bmsk distclean<CR>'
|
||
exec 'anoremenu ..50 '. s:BMSKmenuname.
|
||
\'&Compile.-sep- :'
|
||
exec 'anoremenu ..60 '.s:BMSKmenuname.
|
||
\'&Compile.&Show\ Errors<tab>:cl'.
|
||
\' :cl<CR>'
|
||
exec 'anoremenu ..70 '.s:BMSKmenuname.
|
||
\'&Compile.&Open\ Error\ Window<tab>:copen'.
|
||
\' :copen<CR>'
|
||
exec 'anoremenu ..75 '.s:BMSKmenuname.
|
||
\'&Compile.&Parse\ make\.log<tab>:cfile\ out/make\.log'.
|
||
\' :cfile out/make.log<CR>'
|
||
exec 'anoremenu ..80 '.s:BMSKmenuname.
|
||
\'&Compile.Goto\ &Error<tab>:cc'.
|
||
\' :cc<CR>'
|
||
exec 'anoremenu ..90 '.s:BMSKmenuname.
|
||
\'&Compile.Goto\ &next\ Error<tab>:cn'.
|
||
\' :cn<CR>'
|
||
exec 'anoremenu ..100 '. s:BMSKmenuname.
|
||
\'&Compile.-sep1- :'
|
||
exec 'anoremenu ..110 '.s:BMSKmenuname.
|
||
\'&Compile.&A2L-Patch<tab>:A2L'.
|
||
\' :A2L<CR>'
|
||
exec 'anoremenu ..120 '.s:BMSKmenuname.
|
||
\'&Compile.Copy\ output\ to\ &Austausch<tab>:COPYoutput'.
|
||
\' :COPYoutput<CR>'
|
||
exec 'anoremenu ..130 '.s:BMSKmenuname.
|
||
\'&Compile.&Rename\ output<tab>:RENAMEoutput'.
|
||
\' :RENAMEoutput<CR>'
|
||
" Tools
|
||
exec 'anoremenu .40.10 '.s:BMSKmenuname.
|
||
\'&Tools.&A2L-Patch<tab>:A2L'.
|
||
\' :A2L<CR>'
|
||
exec 'anoremenu ..20 '.s:BMSKmenuname.
|
||
\'&Tools.Copy\ output\ to\ &Austausch<tab>:COPYoutput'.
|
||
\' :COPYoutput<CR>'
|
||
exec 'anoremenu ..30 '.s:BMSKmenuname.
|
||
\'&Tools.&Rename\ output<tab>:RENAMEoutput'.
|
||
\' :RENAMEoutput<CR>'
|
||
exec 'anoremenu ..40 '. s:BMSKmenuname.
|
||
\'&Tools.-sep1- :'
|
||
exec 'anoremenu ..50 '.s:BMSKmenuname.
|
||
\'&Tools.&Check\ A2L\ Types<tab>:BmskCheckA2l'.
|
||
\' :BmskCheckA2l<CR>'
|
||
" Search
|
||
exec 'anoremenu .50.10 '.s:BMSKmenuname.
|
||
\'&Search.&Grep<tab>:GrepBmsk'.
|
||
\' :GrepBmsk<CR>'
|
||
exec 'anoremenu ..20 '.s:BMSKmenuname.
|
||
\'&Search.Goto\ &Cscope-Tag<tab>:cscope'.
|
||
\' :cscope find i <C-R><C-W><CR>'
|
||
exec 'anoremenu ..30 '.s:BMSKmenuname.
|
||
\'&Search.Goto\ &CTag<tab>:tag'.
|
||
\' :tag <C-R><C-W><CR>'
|
||
exec 'anoremenu ..40 '.s:BMSKmenuname.
|
||
\'&Search.List\ &CTags<tab>:tselect'.
|
||
\' :tselect /<C-R><C-W><CR>'
|
||
exec 'anoremenu ..50 '.s:BMSKmenuname.
|
||
\'&Search.Update\ c&tags<tab>:Bmsk\ ctags'.
|
||
\' :Bmsk ctags<CR>'
|
||
exec 'anoremenu ..60 '.s:BMSKmenuname.
|
||
\'&Search.Update\ C&scope<tab>:Bmsk\ cscope'.
|
||
\' :Bmsk cscope<CR>'
|
||
exec 'anoremenu ..70 '.s:BMSKmenuname.
|
||
\'&Search.Disconnect\ C&scope<tab>:cscope\ kill\ -1'.
|
||
\' :cscope kill -1<CR>'
|
||
" BuildManager
|
||
exec 'anoremenu .60.10 '.s:BMSKmenuname.
|
||
\'&BuildManager.&Entwicklerstand<tab>:BmskAll\ Entwickler'.
|
||
\' :BmskAll Entwickler<CR>'
|
||
exec 'anoremenu ..20 '.s:BMSKmenuname.
|
||
\'&BuildManager.&Serienstand<tab>:BmskAll\ Serie'.
|
||
\' :BmskAll Serie<CR>'
|
||
exec 'anoremenu ..30 '.s:BMSKmenuname.
|
||
\'&BuildManager.&Deliver\ Products<tab>:CopyProgrammstand'.
|
||
\' :CopyProgrammstand<CR>'
|
||
exec 'anoremenu ..40 '.s:BMSKmenuname.
|
||
\'&BuildManager.&Task\ Report<tab>:TaskReport'.
|
||
\' :TaskReport<CR>'
|
||
endif
|
||
endfunction
|
||
|
||
" -----------------
|
||
" Men<65> BMSK anlegen
|
||
" -----------------
|
||
if !exists('nobmskmenu')
|
||
call s:BmskRedrawMenu()
|
||
exec 'anoremenu .42 Hilfe.-BMSK- :'
|
||
exec 'anoremenu .43 Hilfe.BMSK<tab> :help bmsk<CR>'
|
||
endif
|
||
|
||
" -----------------------
|
||
" Alle Buffer neu anlegen
|
||
" -----------------------
|
||
command BuffersUpdate call BuffersUpdate()
|
||
function BuffersUpdate()
|
||
" alle Buffer l<>schen
|
||
let last_buffer = bufnr('$')
|
||
execute '1,' . last_buffer . 'bdelete'
|
||
|
||
" load all bmsk-files as buffers
|
||
try
|
||
python <<EOF
|
||
import vim
|
||
import os
|
||
basedir = vim.eval('GetBmskDir()')
|
||
parsedirs = ['sw', 'config', 'make', 'fremd']
|
||
bufferExtentions = ['.c', '.h', '.kgs', '.dat', '.osp', '.mak', '.mkink']
|
||
specialFiles = ['makefile']
|
||
def AddAllFiles(basedir, path, files):
|
||
print path
|
||
#print 'Extentions:', bufferExtentions
|
||
for file in files:
|
||
bufferExtention = os.path.splitext(file)[1]
|
||
#print 'BufExt:', bufferExtention
|
||
if ((bufferExtention in bufferExtentions) or (file in specialFiles)):
|
||
buffername = os.path.join(path, file).replace(basedir + '//','')
|
||
#print buffername
|
||
vim.command('badd ' + buffername)
|
||
# start adding buffers
|
||
for dir in parsedirs:
|
||
parsedir = os.path.join(basedir, dir)
|
||
os.path.walk(parsedir, AddAllFiles, basedir)
|
||
EOF
|
||
catch /^Vim\%((\a\+)\)\=:E370/ " python not available
|
||
echo 'BuffersUpdate needs python'
|
||
endtry
|
||
endfunction
|
||
|
||
" -----------
|
||
" bmsk Muster
|
||
" -----------
|
||
command -nargs=? SetMuster call SetMuster('<args>')
|
||
function SetMuster(Muster)
|
||
if (a:Muster == '')
|
||
let l:Muster = confirm('Muster:', "&default\nC&0\nC&1\nC&2\nC&5", 1, 'Question')
|
||
if l:Muster == 1
|
||
let g:Muster = ''
|
||
elseif l:Muster == 2
|
||
let g:Muster = 'C0'
|
||
elseif l:Muster == 3
|
||
let g:Muster = 'C1'
|
||
elseif l:Muster == 4
|
||
let g:Muster = 'C2'
|
||
elseif l:Muster == 5
|
||
let g:Muster = 'C5'
|
||
else
|
||
echo 'Abbruch'
|
||
return
|
||
endif
|
||
else
|
||
let g:Muster = a:Muster
|
||
endif
|
||
call s:SetBmskDirs(g:bmskdir)
|
||
endfunction
|
||
|
||
" -----------
|
||
" bmsk Egas
|
||
" -----------
|
||
command -nargs=? SetEgas call SetEgas('<args>')
|
||
function SetEgas(Egas)
|
||
if (a:Egas == '')
|
||
let l:Egas = confirm('Egas:', "&default\n&0\n&1\n&2", 1, 'Question')
|
||
if l:Egas == 1
|
||
let g:Egas = ''
|
||
elseif l:Egas == 2
|
||
let g:Egas = '0'
|
||
elseif l:Egas == 3
|
||
let g:Egas = '1'
|
||
elseif l:Egas == 4
|
||
let g:Egas = '2'
|
||
else
|
||
echo 'Abbruch'
|
||
return
|
||
endif
|
||
else
|
||
let g:Egas = a:Egas
|
||
endif
|
||
call s:SetBmskDirs(g:bmskdir)
|
||
endfunction
|
||
|
||
" -------------
|
||
" bmsk Baureihe
|
||
" -------------
|
||
command -nargs=? SetMotorvariante call s:SetMotorvariante('<args>')
|
||
function s:SetMotorvariante(Motor)
|
||
if a:Motor == ''
|
||
let l:Motor = confirm('Motor:', "&default\nK&25\nK&40\nK&46\nK&71", 1, 'Question')
|
||
if l:Motor == 1
|
||
let g:Motor = ''
|
||
elseif l:Motor == 2
|
||
let g:Motor = 'K25'
|
||
elseif l:Motor == 3
|
||
let g:Motor = 'K40'
|
||
elseif l:Motor == 4
|
||
let g:Motor = 'K46'
|
||
let g:Egas = '1'
|
||
elseif l:Motor == 5
|
||
let g:Motor = 'K71'
|
||
else
|
||
echo 'Abbruch'
|
||
return
|
||
endif
|
||
else
|
||
let g:Motor = a:Motor
|
||
endif
|
||
call s:SetBmskDirs(g:bmskdir)
|
||
endfunction
|
||
|
||
" -------------
|
||
" bmsk SW_Stand
|
||
" -------------
|
||
command -nargs=? SetSWStand call SetSWStand('<args>')
|
||
function SetSWStand(SW_Stand)
|
||
if (a:SW_Stand == '')
|
||
let l:SW_Stand = confirm('SW_Stand:', "&default\n&Test\n&Entwickler\n&Serie", 1, 'Question')
|
||
if l:SW_Stand == 1
|
||
let g:SW_Stand = ''
|
||
elseif l:SW_Stand == 2
|
||
let g:SW_Stand = 'Test'
|
||
elseif l:SW_Stand == 3
|
||
let g:SW_Stand = 'Entwickler'
|
||
elseif l:SW_Stand == 4
|
||
let g:SW_Stand = 'Serie'
|
||
else
|
||
echo 'Abbruch'
|
||
return
|
||
endif
|
||
else
|
||
let g:SW_Stand = a:SW_Stand
|
||
endif
|
||
call s:SetBmskDirs(g:bmskdir)
|
||
endfunction
|
||
|
||
" ----------
|
||
" bmsk Xlint
|
||
" ----------
|
||
command -nargs=? SetXlint call SetXlint('<args>')
|
||
function SetXlint(Xlint)
|
||
if (a:Xlint == '')
|
||
let l:Xlint = inputdialog('Xlint:', g:Xlint, 'cancel')
|
||
if l:Xlint == 'cancel'
|
||
return
|
||
else
|
||
g:Xlint = l:Xlint
|
||
endif
|
||
else
|
||
let g:Xlint = a:Xlint
|
||
endif
|
||
call s:SetBmskDirs(g:bmskdir)
|
||
endfunction
|
||
|
||
|
||
" -----------
|
||
" Directories
|
||
" -----------
|
||
|
||
function s:SetBmskDirs(bmskdir)
|
||
" R<>cksetzen der Make-Variablen
|
||
unlet! g:OutDir
|
||
unlet! g:ProductDir
|
||
unlet! g:DfilesDir
|
||
unlet! g:CscopeFile
|
||
unlet! g:CTagsFile
|
||
unlet! g:PTagsFile
|
||
unlet! g:Goals
|
||
unlet! g:Programname
|
||
unlet! g:OutDirVariante
|
||
unlet! g:bmsk_stand
|
||
|
||
" Variablen erzeugen, damit GetMakeVar funktioniert
|
||
if !exists('g:Muster')
|
||
let g:Muster = ''
|
||
endif
|
||
if !exists('g:Egas')
|
||
let g:Egas = ''
|
||
endif
|
||
if !exists('g:Motor')
|
||
let g:Motor = ''
|
||
endif
|
||
if !exists('g:SW_Stand')
|
||
let g:SW_Stand = ''
|
||
endif
|
||
if !exists('g:Xlint')
|
||
let g:Xlint = ''
|
||
endif
|
||
|
||
" bmsk dirs
|
||
let g:bmskdir = substitute(fnamemodify(a:bmskdir, ':p'), '\\', '/', 'g')
|
||
|
||
" cd to bmskdir
|
||
execute 'cd ' . g:bmskdir
|
||
compiler bmsk
|
||
|
||
" Default-Werte aus Make <20>bernehmen
|
||
call GetAllMakeVars()
|
||
|
||
if g:Muster == ''
|
||
let g:Muster = GetMakeVar('Muster')
|
||
endif
|
||
if g:Egas == ''
|
||
let g:Egas = GetMakeVar('Egas')
|
||
endif
|
||
if g:Motor == ''
|
||
let g:Motor = GetMakeVar('Motor')
|
||
endif
|
||
if g:SW_Stand == ''
|
||
let g:SW_Stand = GetMakeVar('Stand')
|
||
endif
|
||
if g:Xlint == ''
|
||
let g:Xlint = GetMakeVar('DIAB_LINT_OPTION')
|
||
endif
|
||
|
||
" bmsk dirs
|
||
let g:bmskWA = fnamemodify(g:bmskdir, ':h:h')
|
||
let g:bmskProject = fnamemodify(g:bmskdir, ':h:h:t')
|
||
let g:bmsk_sw = fnamemodify(g:bmskdir . '/sw', ':p')
|
||
let g:bmsk_bios = fnamemodify(g:bmskdir . '/sw/bios', ':p')
|
||
let g:bmsk_d = GetDfilesDir()
|
||
let g:bmsk_stand = GetStandDir()
|
||
let g:OutDir = GetOutDir()
|
||
let g:OutDirVariante = GetOutDirVariante()
|
||
let g:bmsk_ext = '*.c *.h *.kgs *.d *.dat *.mak *.inv'
|
||
|
||
" cd path
|
||
let &cdpath = g:bmskdir
|
||
" browse-dir
|
||
set browsedir=buffer
|
||
" search path
|
||
set path&
|
||
let &path = &path . ',' . g:bmskdir.''
|
||
let &path = &path . ',' . g:bmskdir.'config/**'
|
||
let &path = &path . ',' . g:bmskdir.'diagnose/**'
|
||
let &path = &path . ',' . g:bmskdir.'doku/**'
|
||
let &path = &path . ',' . g:bmskdir.'fremd/**'
|
||
let &path = &path . ',' . g:bmskdir.'make/**'
|
||
let &path = &path . ',' . g:OutDir
|
||
let &path = &path . ',' . g:OutDir.'defndep/**'
|
||
let &path = &path . ',' . g:OutDir.'doku/**'
|
||
let &path = &path . ',' . g:OutDirVariante.'**'
|
||
let &path = &path . ',' . g:bmskdir.'product/**'
|
||
let &path = &path . ',' . g:bmskdir.'sw/**'
|
||
let &path = &path . ',' . g:bmskdir.'tools/**'
|
||
let &path = substitute(&path, '\\', '/', 'g')
|
||
" files for tags (may not start with './', since . is the path of the
|
||
" current file
|
||
let &tags = substitute(GetCTagsFile(), '^\..', '', '') . ',' . substitute(GetPTagsFile() , '^\..', '', '')
|
||
|
||
" Grep Dir and Extentions
|
||
let g:GrepDir = g:bmsk_sw
|
||
let g:GrepFiles = '*.c *.h *.kgs'
|
||
|
||
" cscope
|
||
let &cscopeprg = GetCscopePrg()
|
||
cscope kill -1
|
||
let reffile = GetCscopeFile()
|
||
if (filereadable(reffile))
|
||
execute 'cscope add' reffile
|
||
endif
|
||
|
||
call s:BmskRedrawMenu()
|
||
call GetGoals()
|
||
|
||
" Python
|
||
let g:python = fnamemodify(g:bmskdir . '/tools/python/v2.1a2/python.exe', ':p')
|
||
|
||
" Titel-Leiste
|
||
set titlelen=100
|
||
let &titlestring = '%t - (%-F) - %=BMSK: %{g:bmskProject}'
|
||
\ . ' Motor: %{g:Motor} Muster: %{g:Muster} Egas: %{g:Egas} SW-Stand: %{g:SW_Stand}'
|
||
|
||
endfunction
|
||
|
||
" make backups
|
||
set backup " keep a backup file
|
||
set backupext=~
|
||
|
||
"-------------------------
|
||
function GetAllMakeVars()
|
||
"-------------------------
|
||
let varnames = {}
|
||
let varnames['Muster'] = 'Muster'
|
||
let varnames['Egas'] = 'Egas'
|
||
let varnames['Motor'] = 'Motor'
|
||
let varnames['SW_Stand'] = 'Stand'
|
||
let varnames['Xlint'] = 'DIAB_LINT_OPTION'
|
||
let varnames['OutDir'] = 'OUTDIR'
|
||
let varnames['ProductDir'] = 'OUTDIR_PRODUCTS'
|
||
let varnames['DfilesDir'] = 'OUTDIR_D_FILES'
|
||
let varnames['bmsk_stand'] = 'OUTDIR_STAND'
|
||
let varnames['OutDirVariante'] = 'OUTDIR_VARIANTE'
|
||
let varnames['CscopePrg'] = 'CSCOPE'
|
||
let varnames['CscopeFile'] = 'CSCOPEFILE'
|
||
let varnames['CTagsFile'] = 'CTAGFILE'
|
||
let varnames['PTagsFile'] = 'PTAGFILE'
|
||
let varnames['Goals'] = 'GOALS'
|
||
let varnames['Programname'] = 'PROGRAMNAME'
|
||
let varlist = GetMakeVars(values(varnames))
|
||
for var in items(varnames)
|
||
if has_key(varlist, var[1])
|
||
let g:{var[0]} = varlist[var[1]]
|
||
endif
|
||
endfor
|
||
endfunction
|
||
|
||
" -------------------
|
||
function GetBmskDir()
|
||
" -------------------
|
||
if !exists('g:bmskdir')
|
||
echo 'Bitte erst Projekt w<>hlen'
|
||
SetBmskProject
|
||
endif
|
||
return g:bmskdir
|
||
endfunction
|
||
|
||
" ---------------------
|
||
function GetBmskSwDir()
|
||
" ---------------------
|
||
if !exists('g:bmskdir')
|
||
echo 'Bitte erst Projekt w<>hlen'
|
||
SetBmskProject
|
||
endif
|
||
return g:bmsk_sw
|
||
endfunction
|
||
|
||
" ------------------
|
||
function GetOutDir()
|
||
" ------------------
|
||
if !exists('g:OutDir')
|
||
let g:OutDir = GetMakeVar('OUTDIR')
|
||
endif
|
||
if (g:OutDir != '')
|
||
let g:OutDir = fnamemodify(g:OutDir, ':p')
|
||
endif
|
||
return g:OutDir
|
||
endfunction
|
||
|
||
" ----------------------
|
||
function GetProductDir()
|
||
" ----------------------
|
||
if !exists('g:ProductDir')
|
||
let g:ProductDir = GetMakeVar('DELIVERY_PATH')
|
||
if (g:ProductDir == '')
|
||
let g:ProductDir = GetMakeVar('OUTDIR_PRODUCTS')
|
||
endif
|
||
endif
|
||
if (g:ProductDir != '')
|
||
let g:ProductDir = fnamemodify(g:ProductDir, ':p')
|
||
endif
|
||
return g:ProductDir
|
||
endfunction
|
||
|
||
" ---------------------
|
||
function GetDfilesDir()
|
||
" ---------------------
|
||
if !exists('g:DfilesDir')
|
||
let g:DfilesDir = GetMakeVar('D_FILES_DIR')
|
||
if (g:DfilesDir == '')
|
||
let g:DfilesDir = GetMakeVar('OUTDIR_D_FILES')
|
||
endif
|
||
if (g:DfilesDir != '')
|
||
let g:DfilesDir = fnamemodify(g:DfilesDir, ':p')
|
||
endif
|
||
endif
|
||
return g:DfilesDir
|
||
endfunction
|
||
|
||
" --------------------
|
||
function GetStandDir()
|
||
" --------------------
|
||
if !exists('g:bmsk_stand')
|
||
let g:bmsk_stand = GetMakeVar('OUTDIR_STAND')
|
||
endif
|
||
if (g:bmsk_stand != '')
|
||
let g:bmsk_stand = fnamemodify(g:bmsk_stand, ':p')
|
||
endif
|
||
return g:bmsk_stand
|
||
endfunction
|
||
|
||
" --------------------------
|
||
function GetOutDirVariante()
|
||
" --------------------------
|
||
if !exists('g:OutDirVariante')
|
||
let g:OutDirVariante = GetMakeVar('OUTDIR_VARIANTE')
|
||
endif
|
||
if (g:OutDirVariante != '')
|
||
let g:OutDirVariante = fnamemodify(g:OutDirVariante, ':p')
|
||
endif
|
||
return g:OutDirVariante
|
||
endfunction
|
||
|
||
" ----------------------
|
||
function GetCscopePrg()
|
||
" ----------------------
|
||
if !exists('g:CscopePrg')
|
||
let g:CscopePrg = GetMakeVar('CSCOPE')
|
||
endif
|
||
if (g:CscopePrg != '')
|
||
let g:CscopePrg = fnamemodify(g:CscopePrg, ':p')
|
||
endif
|
||
return g:CscopePrg
|
||
endfunction
|
||
|
||
" ----------------------
|
||
function GetCscopeFile()
|
||
" ----------------------
|
||
if !exists('g:CscopeFile')
|
||
let g:CscopeFile = GetMakeVar('CSCOPEFILE')
|
||
endif
|
||
if (g:CscopeFile != '')
|
||
let g:CscopeFile = fnamemodify(g:CscopeFile, ':p')
|
||
endif
|
||
return g:CscopeFile
|
||
endfunction
|
||
|
||
" ---------------------
|
||
function GetCTagsFile()
|
||
" ---------------------
|
||
if !exists('g:CTagsFile')
|
||
let g:CTagsFile = GetMakeVar('CTAGFILE')
|
||
endif
|
||
if (g:CTagsFile != '')
|
||
let g:CTagsFile = fnamemodify(g:CTagsFile, ':p')
|
||
endif
|
||
return g:CTagsFile
|
||
endfunction
|
||
|
||
" ---------------------
|
||
function GetPTagsFile()
|
||
" ---------------------
|
||
if !exists('g:PTagsFile')
|
||
let g:PTagsFile = GetMakeVar('PTAGFILE')
|
||
endif
|
||
if (g:PTagsFile != '')
|
||
let g:PTagsFile = fnamemodify(g:PTagsFile, ':p')
|
||
endif
|
||
return g:PTagsFile
|
||
endfunction
|
||
|
||
" -----------------
|
||
function GetGoals()
|
||
" -----------------
|
||
if !exists('g:Goals')
|
||
let g:Goals = GetMakeVar('GOALS')
|
||
endif
|
||
return g:Goals
|
||
endfunction
|
||
|
||
" -----------------------
|
||
function GetProgramname()
|
||
" -----------------------
|
||
if !exists('g:Programname')
|
||
let g:Programname = GetMakeVar('PROGRAMNAME')
|
||
endif
|
||
return g:Programname
|
||
endfunction
|
||
|
||
" define and include
|
||
"set define=^#\s*define
|
||
"set include=^#\s*include
|
||
"set includeexpr=''
|
||
|
||
"command CleanSRCfile %s/\.L\d{3,4\}/.L0000/ce
|
||
"command CleanSRCfile %s/^#\tr\d\{1,2\}\t\t\$\$\d\{2,3\}\n//ce
|
||
command CleanSRCfile %s/^#\t\(\(r\d\{1,2\}\t\)\|\(not allocated\)\)\t\(\(\$\$\d\{1,3\}\)\|\([xyz]\)\)\n//ce
|
||
|
||
"function s:GetA2Lfile()
|
||
" let a2lfile = glob(GetProductDir() . '/*.a2l')
|
||
" return a2lfile
|
||
"endfunction
|
||
|
||
" ----
|
||
" tags
|
||
" ----
|
||
|
||
command CscopeConnect call s:CscopeConnect()
|
||
function s:CscopeConnect()
|
||
let reffile = GetCscopeFile()
|
||
if (filereadable(reffile))
|
||
execute 'cscope add' reffile
|
||
endif
|
||
endfunction
|
||
|
||
" significant characters in tags
|
||
set taglength=0
|
||
set notagrelative
|
||
|
||
" ------------
|
||
" grep program
|
||
" ------------
|
||
command -nargs=? GrepBmsk call GrepFull(GetBmskSwDir(), '*.c *.h *.kgs', '<args>')
|
||
|
||
" ----------------
|
||
" Make and compile
|
||
" ----------------
|
||
"command -complete=custom,GetAllBmskTargets -nargs=* Make call s:Make('<args>')
|
||
command -complete=custom,GetAllBmskTargets -nargs=* Bmsk call s:Make('<args>')
|
||
command -complete=custom,GetAllBmskTargets -nargs=* BmskDoku call s:BmskDoku('<args>')
|
||
command -nargs=* Clean compiler bmsk | Clean <args>
|
||
command -nargs=* CleanAll compiler bmsk | CleanAll <args>
|
||
command -nargs=* LintOld Bmsk <args> lint file=%:p
|
||
command -nargs=* Lint Bmsk <args> %:t:r.lint
|
||
command -complete=customlist,GetAllBmskSWStand -nargs=1 BmskAll call s:BmskAll('<args>')
|
||
|
||
" Programmstand compilieren
|
||
function s:Make(args)
|
||
echo a:args
|
||
cscope kill -1
|
||
compiler bmsk
|
||
execute 'make!' a:args g:makeopts
|
||
CscopeConnect
|
||
clist
|
||
endfunction
|
||
|
||
" Dokumentation erzeugen (Verwenden des LaTeX errorparsers)
|
||
function s:BmskDoku(args)
|
||
echo a:args
|
||
let command = 'Make ' . a:args . ' '
|
||
if match(a:args, '\(^\|\s\)\w\+\($\|\s\+\)') < 0
|
||
" kein Target angegeben, doku verwenden
|
||
let command = command . 'doku '
|
||
endif
|
||
if match(a:args, '\<funktionen\>') < 0
|
||
" keine Funktionen angegeben
|
||
if &filetype == 'tex'
|
||
let funktionen = expand('%:t:r')
|
||
else
|
||
let funktionen = ''
|
||
endif
|
||
let funktionen = inputdialog('funktionen:', funktionen, 'cancel')
|
||
if funktionen == 'cancel'
|
||
return
|
||
endif
|
||
let command = command . 'funktionen="' . funktionen . '"'
|
||
endif
|
||
|
||
cscope kill -1
|
||
compiler tex
|
||
let &makeprg = g:makeprg . ' $*'
|
||
let latexflags = '-interaction=nonstopmode'
|
||
execute command . ' LATEXFLAGS=' . latexflags
|
||
CscopeConnect
|
||
clist
|
||
endfunction
|
||
|
||
" Erzeugen aller Programmst<73>nde
|
||
function s:BmskAll(Stand)
|
||
" Software Stand gegebenenfalls einstellen
|
||
if (a:Stand != '') && (g:SW_Stand != a:Stand)
|
||
call SetSWStand(a:Stand)
|
||
endif
|
||
execute 'Bmsk all' . g:SW_Stand
|
||
endfunction
|
||
|
||
" Alle Software-St<53>nde als VimList
|
||
function GetAllBmskSWStand(ArgLead, CmdLine, CursorPos)
|
||
let StandList = ['Test', 'Entwickler', 'Serie']
|
||
return StandList
|
||
endfunction
|
||
|
||
" Alle Make-Targets als Text Liste
|
||
function GetAllBmskTargets(ArgLead, CmdLine, CursorPos)
|
||
let goals = GetGoals()
|
||
if goals == ''
|
||
let targets = 'Programmstand'
|
||
let targets = targets . "\n" . 'clean'
|
||
let targets = targets . "\n" . 'cleanall'
|
||
let targets = targets . "\n" . 'cleanProducts'
|
||
let targets = targets . "\n" . 'allTest'
|
||
let targets = targets . "\n" . 'allEntwickler'
|
||
let targets = targets . "\n" . 'allSerie'
|
||
let targets = targets . "\n" . 'patch_a2l'
|
||
let targets = targets . "\n" . 'check_memory'
|
||
let targets = targets . "\n" . 'create_csv'
|
||
let targets = targets . "\n" . 'create_arcus_csv'
|
||
let targets = targets . "\n" . 'import_arcus_csv'
|
||
let targets = targets . "\n" . 'boschsig'
|
||
let targets = targets . "\n" . 'archivate'
|
||
let targets = targets . "\n" . 'lint file=' . expand('%:p')
|
||
let targets = targets . "\n" . 'tags'
|
||
let targets = targets . "\n" . 'ctags'
|
||
let targets = targets . "\n" . 'ptags'
|
||
let targets = targets . "\n" . 'cscope'
|
||
let targets = targets . "\n" . 'ccm_products_checkout CCM=' . g:ccm
|
||
let targets = targets . "\n" . 'help'
|
||
else
|
||
let targets = substitute(goals, '\s\+', '\n', 'g')
|
||
let targets = targets . "\n" . expand('%:t:r') . '.obj'
|
||
let targets = targets . "\n" . expand('%:t:r') . '.i'
|
||
let targets = targets . "\n" . expand('%:t:r') . '.src'
|
||
let targets = targets . "\n" . expand('%:t:r') . '.lint'
|
||
let targets = targets . "\n" . 'FORCE_PROGID=no'
|
||
let targets = targets . "\n" . 'MAKE_DBG=2'
|
||
let targets = targets . "\n" . 'EXTRA_C_FLAGS='
|
||
let targets = targets . "\n" . 'DIAB_OPTIMIZE='
|
||
let targets = targets . "\n" . 'MAIN_MAKEFILES='
|
||
let targets = targets . "\n" . 'ALL_EXIT='
|
||
endif
|
||
return targets
|
||
endfunction
|
||
|
||
" -----------------------------------
|
||
" include extra-variables to a2l-file
|
||
" -----------------------------------
|
||
command PatchA2L call s:A2L_EXTENTION()
|
||
function s:A2L_EXTENTION()
|
||
execute 'compiler bmsk'
|
||
execute '!start make_fsw.bat patch_a2l ' . g:makeopts . ' & pause'
|
||
endfunction
|
||
|
||
" -------------------------------------
|
||
" Compilierte Files auf Server copieren
|
||
" -------------------------------------
|
||
command COPYoutput call s:CopyOutputFilesToAustausch()
|
||
function s:CopyOutputFilesToAustausch()
|
||
let destination = fnamemodify(g:myAustausch . '/' . g:Motor . g:Muster . g:Egas, ':p')
|
||
echo destination
|
||
if isdirectory(g:myAustausch)==0
|
||
echo 'mkdir Liebl'
|
||
call system(g:mkdir . g:myAustausch)
|
||
endif
|
||
if isdirectory(destination)==0
|
||
echo 'mkdir' destination
|
||
call system(g:mkdir . destination)
|
||
endif
|
||
call system(g:rm_f . destination . '\*.*')
|
||
let sourceDir = GetProductDir()
|
||
call s:CopyOutputFiles(sourceDir, destination)
|
||
endfunction
|
||
|
||
command CopyProgrammstand call s:CopyProgrammstand()
|
||
function s:CopyProgrammstand()
|
||
let pstDir = browsedir('Verzeichnis des Programmstands', 'c:')
|
||
let Variants = s:GetOutputVariants()
|
||
for variante in Variants
|
||
let varianteOrig = fnamemodify(GetOutDirVariante(), ':h:t')
|
||
let sourceDir = substitute(GetProductDir(), varianteOrig, variante, '')
|
||
let destDir = expand(pstDir . '/' . strpart(variante, 0, 2) . 'x' . '/' . variante)
|
||
if !isdirectory(destDir)
|
||
echo destDir . ' is not a directory'
|
||
else
|
||
call system(g:cp . sourceDir . '\\*.* ' . destDir)
|
||
endif
|
||
endfor
|
||
endfunction
|
||
|
||
function! s:GetOutputVariants()
|
||
let Variants = split(system('dir /B out\\K*'), "\n")
|
||
return Variants
|
||
endfunction
|
||
|
||
function s:CopyOutputFiles(sourceDir, destination)
|
||
let destination = fnamemodify(a:destination, ':p')
|
||
let ProgID = GetProgramname()
|
||
let files = fnamemodify(a:sourceDir . '/' . ProgID, ':p') . '*.*'
|
||
let command = g:cp . files . ' ' . destination
|
||
echo command
|
||
call system(command)
|
||
let files = fnamemodify(a:sourceDir . '/' . strpart(ProgID, 3, 3) . '*.daf', ':p')
|
||
let command = g:cp . files . ' ' . destination
|
||
echo command
|
||
call system(command)
|
||
endfunction
|
||
|
||
" ----------------------------
|
||
" Compilierte Files umbenennen
|
||
" ----------------------------
|
||
command -nargs=? RENAMEoutput call s:RENAMEoutput('<args>')
|
||
function s:RENAMEoutput(pattern)
|
||
if (a:pattern == '')
|
||
let l:pattern = inputdialog('pattern:', '_test01', '')
|
||
else
|
||
let l:pattern = a:pattern
|
||
endif
|
||
let product_path = GetProductDir()
|
||
let ProgID = GetProgramname()
|
||
call s:RenameFile(fnamemodify(product_path . '/' . ProgID . '.DCM', ':p'), l:pattern)
|
||
call s:RenameFile(fnamemodify(product_path . '/' . ProgID . '.ELF', ':p'), l:pattern)
|
||
call s:RenameFile(fnamemodify(product_path . '/' . ProgID . '.a2l', ':p'), l:pattern)
|
||
call s:RenameFile(fnamemodify(product_path . '/' . ProgID . '_patch.a2l', ':p'), l:pattern)
|
||
call s:RenameFile(fnamemodify(product_path . '/' . ProgID . '.map', ':p'), l:pattern)
|
||
call s:RenameFile(fnamemodify(product_path . '/' . ProgID . '.paf', ':p'), l:pattern)
|
||
call s:RenameFile(fnamemodify(product_path . '/' . ProgID . '.s19', ':p'), l:pattern)
|
||
call s:RenameFile(fnamemodify(product_path . '/' . ProgID . '_BOSCH.s19', ':p'), l:pattern)
|
||
call s:RenameFile(fnamemodify(product_path . '/' . strpart(ProgID, 3, 3) . 'BXXXX.daf', ':p'), l:pattern)
|
||
endfunction
|
||
|
||
function s:RenameFile(File, Pattern)
|
||
if (filereadable(a:File))
|
||
let newfile = fnamemodify(a:File, ':p:r') . a:Pattern . '.'
|
||
\ . fnamemodify(a:File, ':e')
|
||
call rename(a:File, newfile)
|
||
endif
|
||
endfunction
|
||
|
||
"---------------------
|
||
" Task Report erzeugen
|
||
"---------------------
|
||
command TaskReport call s:TaskReport()
|
||
function s:TaskReport()
|
||
let b:browsefilter = 'Textfiles \t*.txt\n'
|
||
let file = browse(1, 'Select File for Task Report', 'c:', g:bmskProject . '.txt')
|
||
execute 'Bmsk ccm_task_report file=' . fnamemodify(file, ':p')
|
||
endfunction
|
||
|
||
" ------------------------------------------
|
||
" <20>berpr<70>fen der File-Inodes der EEEmulation
|
||
" ------------------------------------------
|
||
command FindEEEmuFile call s:FindEEEmuFile()
|
||
function s:FindEEEmuFile()
|
||
|
||
let typeFile = '0000F1DE'
|
||
let address = 'S325\x\{8}'
|
||
let linebreak = '\(\x\{2}\n' . address . '\)\?'
|
||
let longword = '\x\{8}'
|
||
let stateValid = 'BABABABA'
|
||
let fileNames = '\(000005FB\|000000FC\|000000E5\|000000BB\|00000B55\|00005B55\|00000CCB\|00EEEF15\)'
|
||
|
||
let fileNameValid = typeFile
|
||
\ . linebreak
|
||
\ . fileNames
|
||
let fileName = typeFile
|
||
\ . linebreak
|
||
\ . longword
|
||
let fileStateValid = typeFile
|
||
\ . linebreak
|
||
\ . longword
|
||
\ . linebreak
|
||
\ . longword
|
||
\ . linebreak
|
||
\ . stateValid
|
||
let fileState = typeFile
|
||
\ . linebreak
|
||
\ . longword
|
||
\ . linebreak
|
||
\ . longword
|
||
\ . linebreak
|
||
\ . longword
|
||
let fileInode = typeFile
|
||
\ . linebreak
|
||
\ . longword
|
||
\ . linebreak
|
||
\ . longword
|
||
\ . linebreak
|
||
\ . longword
|
||
|
||
execute 'syntax match fileInode "' . fileInode
|
||
\.'" contains=address,fileState,fileStateValid'
|
||
execute 'syntax match fileState "' . fileState
|
||
\.'"hs=e-7 contained contains=address,fileName,fileNameValid'
|
||
execute 'syntax match fileStateValid "' . fileStateValid
|
||
\.'"hs=e-7 contained contains=address,fileName,fileNameValid'
|
||
execute 'syntax match fileName "' . fileName
|
||
\.'"hs=e-7 contained contains=address'
|
||
execute 'syntax match fileNameValid "' . fileNameValid
|
||
\.'"hs=e-7 contained contains=address'
|
||
execute 'syntax match address "' . address
|
||
\.'" contained contains=fileName,fileNameValid'
|
||
|
||
hi def link fileInode Constant
|
||
hi def link fileState PreCondit
|
||
hi def link fileStateValid Label
|
||
hi def link fileName PreCondit
|
||
hi def link fileNameValid Identifier
|
||
hi def link address Constant
|
||
|
||
" damit mit n weitergesprungen werden kann
|
||
let @/ = typeFile
|
||
setlocal nohlsearch
|
||
endfunction
|