" special keywords
syntax keyword cType     uint8  sint8  uint16  sint16  uint32  sint32  uint64  sint64
syntax keyword cType    tuint8 tsint8 tuint16 tsint16 tuint32 tsint32 tuint64 tsint64
syntax keyword cType    DfpType SfpType SfpErrorType LWrd LInt
syntax keyword cType    TickType
syntax keyword Special  ATOMIC BEGIN_ATOMIC END_ATOMIC

" debug
syntax match   cTodo    "\(debug\)"

" Lint-Komments and #ifdef's
" Flexelint-Comment
syntax match   cLint    "\(\/\/\)\(lint.*\)"
syntax match   cLint    "\(\/\*\)\(lint\_.\{-}\)\(\*\/\)"
" Splint-Comment
syntax match   cLint    "\/\*@\_.\{-}@\*\/"
" #ifdef _lint or #ifndef _lint
syntax match   cLint    "\(#\s*ifn\?def\s\+_lint\)"

hi def link cLint		Todo

syntax keyword cConstant TRUE FALSE

syntax region myFold start="{" end="}" transparent fold
syntax region if0Fold start="^\s*#\s*if\s\+0\+\>" end="^\s*#\s*endif" fold containedin=cPreCondit
let c_no_if0 = 1
syntax sync fromstart
"set foldmethod=syntax
"set nofoldenable

" Folds for #ifdef
command! -nargs=0 FoldDefine call FoldDefine(<args>)
function! FoldDefine ()
    execute 'normal mx'
    let startline = line('.')
"    execute 'normal %k'
    execute 'normal 0%'
    if match(GetLine(), 'endif') < 0
        execute 'normal k'
    endif
    let endline = line('.')
"    echo 'start: ' . startline . ' end: ' . endline
    let foldname = 'FoldDefine' . startline
    let start='"\%' . startline . 'l.*"'
    let end='"\%' . endline . 'l.*"'
    let command = 'syntax region ' . foldname . ' start=' . start . ' end=' . end . ' fold containedin=cPreCondit'
"    echo command
    execute command
    execute 'highlight def link ' . foldname . ' Comment'
    syntax sync fromstart
    set foldmethod=syntax
    execute 'normal `x'
endfunction

command! -nargs=0 UnFoldDefine call UnFoldDefine(<args>)
function! UnFoldDefine ()
    let foldname = 'FoldDefine' . line('.')
    execute "syntax clear " . foldname
endfunction