317 lines
7.1 KiB
VimL
317 lines
7.1 KiB
VimL
" Vim Global Plugin for Editing .srec Files
|
|
" Maintainer: Alexander Fleck
|
|
" <alexander.fleck@gmx.net>
|
|
" License: This File is placed in the Public Domain.
|
|
" Revision | Date [DD.MM.YY] | Changes
|
|
" 00.01.00 | 05.07.09 | 01. Revision
|
|
" 00.01.10 | | -
|
|
" 00.02.00 | 29.03.10 | Fun added, MakeSrecS5()
|
|
" 00.02.10 | | -
|
|
" 00.02.20 | 15.11.12 | Fun added, MakeSrecSet()
|
|
|
|
if exists("loaded_editsrec")
|
|
finish
|
|
endif
|
|
let loaded_editsrec = 1
|
|
|
|
let s:save_cpo = &cpo
|
|
set cpo&vim
|
|
|
|
" BC = ByteCount
|
|
if !hasmapto('<Plug>EditSrecLineBC')
|
|
map <unique> <Leader>lb <Plug>EditSrecLineBC
|
|
endif
|
|
noremap <unique> <script> <Plug>EditSrecLineBC <SID>AutoLineBC
|
|
noremap <SID>AutoLineBC <Esc>:call <SID>AutoLineBC()<CR>
|
|
if !hasmapto('<Plug>EditSrecPartBC')
|
|
map <unique> <Leader>pb <Plug>EditSrecPartBC
|
|
endif
|
|
noremap <unique> <script> <Plug>EditSrecPartBC <SID>AutoPartBC
|
|
noremap <SID>AutoPartBC <Esc>:call <SID>AutoPartBC()<CR>
|
|
|
|
" AD = ADdress
|
|
if !hasmapto('<Plug>EditSrecLineAD')
|
|
map <unique> <Leader>la <Plug>EditSrecLineAD
|
|
endif
|
|
noremap <unique> <script> <Plug>EditSrecLineAD <SID>AutoLineAD
|
|
noremap <SID>AutoLineAD <Esc>:call <SID>AutoLineAD()<CR>
|
|
if !hasmapto('<Plug>EditSrecPartAD')
|
|
map <unique> <Leader>pa <Plug>EditSrecPartAD
|
|
endif
|
|
noremap <unique> <script> <Plug>EditSrecPartAD <SID>AutoPartAD
|
|
noremap <SID>AutoPartAD <Esc>:call <SID>AutoPartAD()<CR>
|
|
|
|
" DA = DAta
|
|
if !hasmapto('<Plug>EditSrecLineDA')
|
|
map <unique> <Leader>ld <Plug>EditSrecLineDA
|
|
endif
|
|
noremap <unique> <script> <Plug>EditSrecLineDA <SID>AutoLineDA
|
|
noremap <SID>AutoLineDA <Esc>:call <SID>AutoLineDA()<CR>
|
|
if !hasmapto('<Plug>EditSrecPartDA')
|
|
map <unique> <Leader>pd <Plug>EditSrecPartDA
|
|
endif
|
|
noremap <unique> <script> <Plug>EditSrecPartDA <SID>AutoPartDA
|
|
noremap <SID>AutoPartDA <Esc>:call <SID>AutoPartDA()<CR>
|
|
|
|
" CS = CheckSum
|
|
if !hasmapto('<Plug>EditSrecLineCS')
|
|
map <unique> <Leader>lc <Plug>EditSrecLineCS
|
|
endif
|
|
noremap <unique> <script> <Plug>EditSrecLineCS <SID>AutoLineCS
|
|
noremap <SID>AutoLineCS <Esc>:call <SID>AutoLineCS()<CR>
|
|
if !hasmapto('<Plug>EditSrecPartCS')
|
|
map <unique> <Leader>pc <Plug>EditSrecPartCS
|
|
endif
|
|
noremap <unique> <script> <Plug>EditSrecPartCS <SID>AutoPartCS
|
|
noremap <SID>AutoPartCS <Esc>:call <SID>AutoPartCS()<CR>
|
|
|
|
" M0
|
|
" M1
|
|
" M2
|
|
" M3
|
|
" M4
|
|
" M5 = MakeS5
|
|
if !hasmapto('<Plug>MakeSrecLineS5')
|
|
map <unique> <Leader>m5 <Plug>MakeSrecLineS5
|
|
endif
|
|
noremap <unique> <script> <Plug>MakeSrecLineS5 <SID>MakeSrecS5
|
|
noremap <SID>MakeSrecS5 <Esc>:call <SID>MakeSrecS5()<CR>
|
|
" M6
|
|
" M7
|
|
" M8
|
|
" M9
|
|
|
|
" MS = MakeSet
|
|
if !hasmapto('<Plug>MakeSet')
|
|
map <unique> <Leader>ms <Plug>MakeSet
|
|
endif
|
|
noremap <unique> <script> <Plug>MakeSet <SID>MakeSrecSet
|
|
noremap <SID>MakeSrecSet <Esc>:call <SID>MakeSrecSet()<CR>
|
|
|
|
" Functions
|
|
" create Line from ByteCount
|
|
fun s:AutoLineBC()
|
|
let s:ln = getline(".")
|
|
|
|
let s:ln = s:ln . libsrec#CrBC(s:ln)
|
|
let s:ln = s:ln . libsrec#CrAD(s:ln)
|
|
let s:ln = s:ln . libsrec#CrDA(s:ln)
|
|
let s:ln = s:ln . libsrec#CrCS(s:ln)
|
|
|
|
call setline(".", s:ln)
|
|
|
|
unlet s:ln
|
|
endfun
|
|
|
|
" create only ByteCount
|
|
fun s:AutoPartBC()
|
|
let s:ln = getline(".")
|
|
|
|
let s:ln = s:ln . libsrec#CrBC(s:ln)
|
|
|
|
call setline(".", s:ln)
|
|
|
|
unlet s:ln
|
|
endfun
|
|
|
|
" create Line from ADdress
|
|
fun s:AutoLineAD()
|
|
let s:ln = getline(".")
|
|
|
|
let s:ln = s:ln . libsrec#CrAD(s:ln)
|
|
let s:ln = s:ln . libsrec#CrDA(s:ln)
|
|
let s:ln = s:ln . libsrec#CrCS(s:ln)
|
|
|
|
call setline(".", s:ln)
|
|
|
|
unlet s:ln
|
|
endfun
|
|
|
|
" create only ADdress
|
|
fun s:AutoPartAD()
|
|
let s:ln = getline(".")
|
|
|
|
let s:ln = s:ln . libsrec#CrAD(s:ln)
|
|
|
|
call setline(".", s:ln)
|
|
|
|
unlet s:ln
|
|
endfun
|
|
|
|
" create Line from DAta
|
|
fun s:AutoLineDA()
|
|
let s:ln = getline(".")
|
|
|
|
let s:ln = s:ln . libsrec#CrDA(s:ln)
|
|
let s:ln = s:ln . libsrec#CrCS(s:ln)
|
|
|
|
call setline(".", s:ln)
|
|
|
|
unlet s:ln
|
|
endfun
|
|
|
|
" create only DAta
|
|
fun s:AutoPartDA()
|
|
let s:ln = getline(".")
|
|
|
|
let s:ln = s:ln . libsrec#CrDA(s:ln)
|
|
|
|
call setline(".", s:ln)
|
|
|
|
unlet s:ln
|
|
endfun
|
|
|
|
" create Line from CheckSum
|
|
fun s:AutoLineCS()
|
|
let s:ln = getline(".")
|
|
|
|
let s:ln = s:ln . libsrec#CrCS(s:ln)
|
|
|
|
call setline(".", s:ln)
|
|
|
|
unlet s:ln
|
|
endfun
|
|
|
|
" create only CheckSum
|
|
fun s:AutoPartCS()
|
|
let s:ln = getline(".")
|
|
|
|
let s:ln = s:ln . libsrec#CrCS(s:ln)
|
|
|
|
call setline(".", s:ln)
|
|
|
|
unlet s:ln
|
|
endfun
|
|
|
|
" make S5 record
|
|
fun s:MakeSrecS5()
|
|
let s:ln = getline(".")
|
|
|
|
let s:ln = s:ln . libsrec#MkS5(s:ln)
|
|
|
|
call setline(".", s:ln)
|
|
|
|
unlet s:ln
|
|
endfun
|
|
|
|
" make srec set
|
|
fun s:MakeSrecSet()
|
|
" Dict for Type of Record
|
|
let s:dict = { 2: "S1",
|
|
\ 3: "S2",
|
|
\ 4: "S3" }
|
|
|
|
let s:ln = getline(".")
|
|
|
|
call inputsave()
|
|
let s:nodl = input('Num of Data-Lines: ')
|
|
call inputrestore()
|
|
call inputsave()
|
|
let s:nodb = input('Num of Data-Bytes: ')
|
|
call inputrestore()
|
|
|
|
call inputsave()
|
|
let s:noab = input('Num of Addr-Bytes: ')
|
|
call inputrestore()
|
|
|
|
call inputsave()
|
|
let s:atad = input('at Addr: ')
|
|
call inputrestore()
|
|
|
|
" check for valid Range, Type of Record
|
|
if ((s:noab > 1) && (s:noab < 5))
|
|
let s:tosr = s:dict[s:noab]
|
|
else
|
|
let s:tosr = ""
|
|
" bypass the Loop below
|
|
let s:nodl = 0
|
|
endif
|
|
|
|
" Cntr of Data Lines
|
|
let s:dlct = s:nodl
|
|
while s:dlct > 0
|
|
" get Cursor Line
|
|
let s:cl = line(".")
|
|
" append Line with Type
|
|
call append(".", s:tosr)
|
|
call cursor(s:cl + 1, 1)
|
|
|
|
let s:ln = getline(".")
|
|
|
|
" create ByteCount
|
|
"-----------------------------------
|
|
" calc Input for ByteCount
|
|
let s:hxin = s:nodb + s:noab + 1
|
|
" convert to Hex Value,
|
|
" Hex String without "0x"
|
|
let s:hxva = "0123456789ABCDEF"
|
|
let s:srbc = ""
|
|
while s:hxin
|
|
let s:srbc = s:hxva[s:hxin % 16] . s:srbc
|
|
let s:hxin = s:hxin / 16
|
|
endwhile
|
|
|
|
" add missing Zeros
|
|
while strlen(s:srbc) < 2
|
|
let s:srbc = "0" . s:srbc
|
|
endwhile
|
|
" Exception Handling
|
|
if strlen(s:srbc) > 2
|
|
" check Number of ByteCount Bytes
|
|
let s:srbc = "__cNBB__"
|
|
endif
|
|
|
|
let s:ln = s:ln . s:srbc
|
|
"-----------------------------------
|
|
|
|
" create Addr, but with running Vals
|
|
"-----------------------------------
|
|
" calc Input for Addr
|
|
let s:hxin = s:atad + ((s:nodl - s:dlct) * s:nodb)
|
|
" convert to Hex Value,
|
|
" Hex String without "0x"
|
|
let s:hxva = "0123456789ABCDEF"
|
|
let s:srad = ""
|
|
while s:hxin
|
|
let s:srad = s:hxva[s:hxin % 16] . s:srad
|
|
let s:hxin = s:hxin / 16
|
|
endwhile
|
|
|
|
" add missing Zeros
|
|
while strlen(s:srad) < (2 * s:noab)
|
|
let s:srad = "0" . s:srad
|
|
endwhile
|
|
" Exception Handling
|
|
if strlen(s:srad) > (2 * s:noab)
|
|
" check Number of Address Bytes
|
|
let s:srad = "__cNAB__"
|
|
endif
|
|
|
|
let s:ln = s:ln . s:srad
|
|
"-----------------------------------
|
|
let s:ln = s:ln . libsrec#CrDA(s:ln)
|
|
let s:ln = s:ln . libsrec#CrCS(s:ln)
|
|
|
|
call setline(".", s:ln)
|
|
let s:dlct = s:dlct - 1
|
|
|
|
unlet s:srad
|
|
unlet s:srbc
|
|
unlet s:hxva
|
|
unlet s:hxin
|
|
unlet s:cl
|
|
endwhile
|
|
|
|
unlet s:dlct
|
|
unlet s:tosr
|
|
unlet s:atad
|
|
unlet s:noab
|
|
unlet s:nodb
|
|
unlet s:nodl
|
|
unlet s:ln
|
|
unlet s:dict
|
|
endfun
|
|
|
|
let &cpo = s:save_cpo
|
|
|