From bafd496df39b4b7eb4ae0576791a33371cd9c6ff Mon Sep 17 00:00:00 2001 From: AlterDepp Date: Thu, 22 Sep 2011 13:13:02 +0000 Subject: [PATCH] enhancement ftplugin/paf.vim git-svn-id: https://vimsuite.svn.sourceforge.net/svnroot/vimsuite/trunk@209 eb2d0018-73a3-4aeb-bfe9-1def61c9ec69 --- vimfiles.stefan/ftplugin/paf.vim | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/vimfiles.stefan/ftplugin/paf.vim b/vimfiles.stefan/ftplugin/paf.vim index 9ef0485..e2164d4 100644 --- a/vimfiles.stefan/ftplugin/paf.vim +++ b/vimfiles.stefan/ftplugin/paf.vim @@ -1,3 +1,26 @@ +" Paf file specification +" : (RecMark) +" 10 (RecLen) +" 0000 (Offset) +" 00 (RecTyp: 00=Data, 01=EndOfFile, 02=ExtendedSegmentAddress, 04=ExtendedLinearAddress, 10=EndOfDataBlock) +" xxx (Data) +" 00 (Checksum) + +" Get number of current byte of data +function! s:GetDataByte() + let Pos = getpos('.') + let Column = Pos[2] + let FirstData = 10 + let LastData = len(getline(line('.'))) - 2 + if Column < FirstData + let Column = FirstData + endif + if Column > LastData + let Column = LastData + endif + let DataByte = eval('('.Column.'-'.FirstData.') / 2') + return DataByte +endfunction " Adresse der aktuellen Zeile berechnen und in der Statusline anzeigen command! PafGetAddress call PafGetAddress() @@ -8,10 +31,11 @@ function! PafGetAddress() let RE = ':\x\{2}\x\{4}04\(\x\{4}\)\x\{2}' let line = search(RE, 'bcnW') let ESAR = substitute(getline(line), RE, '0x\10000', '') - let RE = ':\x\{2}\(\x\{4}\)00\x\+' + let RE = ':\x\{2}\(\x\{4}\)[01]0\x\+' let line = line('.') let LA = substitute(getline(line), RE, '0x\1', '') - let address = eval(ELAR + ESAR + LA) + let BYTE = s:GetDataByte() + let address = eval(ELAR + ESAR + LA + BYTE) return printf('0x%08x', address) endfunction