diff --git a/.drone.yml b/.drone.yml index f7a7f74..ed50ae5 100644 --- a/.drone.yml +++ b/.drone.yml @@ -9,5 +9,5 @@ steps: - mkdir .secret - echo "$USER" > .secret/user - echo "$TOKEN" > .secret/token - - DOCKER_BUILDKIT=1 docker build . --secret id=user,src=.secret/user --secret id=token,src=.secret/token + - make - rm -rf .secret diff --git a/Dockerfile b/Dockerfile index 10b3495..98a28a1 100644 --- a/Dockerfile +++ b/Dockerfile @@ -80,11 +80,61 @@ WORKDIR act-06 RUN XYCE_INSTALL="/usr/local" make RUN cp prsim/prsim chan.py measure.py sim2vcd.py tlint/tlint spi2act/spi2act.py v2act/v2act /opt/cad/bin -# TODO(edward.bingham) install gaw +# install pr +WORKDIR /toolsrc +RUN --mount=type=secret,id=user --mount=type=secret,id=token git clone https://$(cat /run/secrets/user):$(cat /run/secrets/token)@git.broccolimicro.io/Broccoli/pr.git +RUN cp pr/* /opt/cad/bin + +# install OpenRoad +WORKDIR /toolsrc +RUN git clone https://github.com/The-OpenROAD-Project/OpenROAD-flow-scripts.git +WORKDIR OpenROAD-flow-scripts + +# install gaw +WORKDIR /toolsrc +RUN --mount=type=secret,id=user --mount=type=secret,id=token git clone https://$(cat /run/secrets/user):$(cat /run/secrets/token)@git.broccolimicro.io/Broccoli/waveview.git +WORKDIR waveview +RUN ./configure +RUN make +RUN cp src/gaw /opt/cad/bin # TODO(edward.bingham) setup vnc -# TODO(edward.bingham) setup mounted source folder - # TODO(edward.bingham) setup network mounted tech folder +# install go +WORKDIR /toolsrc +RUN apt-get -y install wget +RUN /usr/bin/wget https://go.dev/dl/go1.19.1.linux-amd64.tar.gz +RUN tar -C /opt -xzf go1.19.1.linux-amd64.tar.gz + +# install python +RUN apt-get install -y python3 pip + +# install editors +RUN apt-get install -y vim + +# setup home directory template and install vim plugins +WORKDIR "/" +ADD home template +RUN mkdir -p /template/.vim/pack/plugins/start +RUN git clone https://github.com/fatih/vim-go.git /template/.vim/pack/plugins/start/vim-go +RUN git clone https://tpope.io/vim/fugitive.git /template/.vim/pack/plugins/start/fugitive +RUN git clone https://github.com/preservim/nerdtree.git /template/.vim/pack/plugins/start/nerdtree + +# Clean up source code folder +RUN rm -rf /toolsrc + +# Connect user home directory of host machine +RUN mkdir "/host" +WORKDIR "/host" + +ENV USER "bcli" +ENV USER_ID "1000" +ENV GROUP_ID "1000" + +CMD exec /bin/bash -c "/usr/sbin/groupadd -g $GROUP_ID $USER; \ + /usr/sbin/useradd -u $USER_ID -g $USER $USER; \ + cp -r /template /home/$USER; \ + chown -R $USER:$USER /home/$USER; \ + trap : TERM INT; sleep infinity & wait" diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..49b5853 --- /dev/null +++ b/Makefile @@ -0,0 +1,2 @@ +all: + DOCKER_BUILDKIT=1 docker build . --secret id=user,src=.secret/user --secret id=token,src=.secret/token -t git.broccolimicro.io/broccoli/development-environment:latest diff --git a/bcli-develop.sh b/bcli-develop.sh new file mode 100644 index 0000000..6d4e7f6 --- /dev/null +++ b/bcli-develop.sh @@ -0,0 +1,11 @@ +bcli() { + if [ "$1" = "up" ]; then + docker run -d -v $HOME:/host --rm --name "bcli-develop" -h "bcli-develop" -e USER=$USER -e USER_ID=$(id -u) -e GROUP_ID=$(id -g) git.broccolimicro.io/broccoli/development-environment:latest > /dev/null + echo "bcli-develop started" + elif [ "$1" = "down" ]; then + docker stop bcli-develop > /dev/null + echo "bcli-develop stopped" + else + docker exec -u $(id -u):$(id -g) -it bcli-develop /bin/bash + fi +} diff --git a/home/.bash_aliases b/home/.bash_aliases new file mode 100644 index 0000000..551434e --- /dev/null +++ b/home/.bash_aliases @@ -0,0 +1,3 @@ +export ACT_HOME="/opt/cad" +export PATH="/opt/go/bin:/opt/cad/bin:$HOME/.local/bin:$PATH" +export PRSPICE_INSTALL="$ACT_HOME/lib/prspice" diff --git a/home/.bashrc b/home/.bashrc new file mode 100644 index 0000000..9d7f1f8 --- /dev/null +++ b/home/.bashrc @@ -0,0 +1,128 @@ +# ~/.bashrc: executed by bash(1) for non-login shells. +# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc) +# for examples + +# If not running interactively, don't do anything +case $- in + *i*) ;; + *) return;; +esac + +# don't put duplicate lines or lines starting with space in the history. +# See bash(1) for more options +HISTCONTROL=ignoreboth + +# append to the history file, don't overwrite it +shopt -s histappend + +# for setting history length see HISTSIZE and HISTFILESIZE in bash(1) +HISTSIZE=1000 +HISTFILESIZE=2000 + +# check the window size after each command and, if necessary, +# update the values of LINES and COLUMNS. +shopt -s checkwinsize + +# If set, the pattern "**" used in a pathname expansion context will +# match all files and zero or more directories and subdirectories. +#shopt -s globstar + +# make less more friendly for non-text input files, see lesspipe(1) +[ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)" + +# set variable identifying the chroot you work in (used in the prompt below) +if [ -z "${debian_chroot:-}" ] && [ -r /etc/debian_chroot ]; then + debian_chroot=$(cat /etc/debian_chroot) +fi + +# set a fancy prompt (non-color, unless we know we "want" color) +case "$TERM" in + xterm-color|*-256color) color_prompt=yes;; +esac + +# uncomment for a colored prompt, if the terminal has the capability; turned +# off by default to not distract the user: the focus in a terminal window +# should be on the output of commands, not on the prompt +force_color_prompt=yes + +if [ -n "$force_color_prompt" ]; then + if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then + # We have color support; assume it's compliant with Ecma-48 + # (ISO/IEC-6429). (Lack of such support is extremely rare, and such + # a case would tend to support setf rather than setaf.) + color_prompt=yes + else + color_prompt= + fi +fi + +if [ "$color_prompt" = yes ]; then + PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ ' +else + PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ ' +fi +unset color_prompt force_color_prompt + +# If this is an xterm set the title to user@host:dir +case "$TERM" in +xterm*|rxvt*) + PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1" + ;; +*) + ;; +esac + +# enable color support of ls and also add handy aliases +if [ -x /usr/bin/dircolors ]; then + test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)" + alias ls='ls --color=auto' + #alias dir='dir --color=auto' + #alias vdir='vdir --color=auto' + + alias grep='grep --color=auto' + alias fgrep='fgrep --color=auto' + alias egrep='egrep --color=auto' +fi + +# colored GCC warnings and errors +#export GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01' + +# some more ls aliases +alias ll='ls -alF' +alias la='ls -A' +alias l='ls -CF' + +# Add an "alert" alias for long running commands. Use like so: +# sleep 10; alert +alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"' + +# Alias definitions. +# You may want to put all your additions into a separate file like +# ~/.bash_aliases, instead of adding them here directly. +# See /usr/share/doc/bash-doc/examples in the bash-doc package. + +# set PATH so it includes user's private bin if it exists +if [ -d "$HOME/bin" ] ; then + export PATH="$HOME/bin:$PATH" +fi + +# set PATH so it includes user's private bin if it exists +if [ -d "$HOME/go/bin" ] ; then + export PATH="$HOME/go/bin:$PATH" +fi + +if [ -f ~/.bash_aliases ]; then + . ~/.bash_aliases +fi + +# enable programmable completion features (you don't need to enable +# this, if it's already enabled in /etc/bash.bashrc and /etc/profile +# sources /etc/bash.bashrc). +if ! shopt -oq posix; then + if [ -f /usr/share/bash-completion/bash_completion ]; then + . /usr/share/bash-completion/bash_completion + elif [ -f /etc/bash_completion ]; then + . /etc/bash_completion + fi +fi + diff --git a/home/.vim/.netrwhist b/home/.vim/.netrwhist new file mode 100644 index 0000000..e66ade1 --- /dev/null +++ b/home/.vim/.netrwhist @@ -0,0 +1,9 @@ +let g:netrw_dirhistmax =10 +let g:netrw_dirhistcnt =7 +let g:netrw_dirhist_7='/home/nbingham/workspace/support/gcc/INSTALL' +let g:netrw_dirhist_6='/home/nbingham/workspace/src/haystack/lib/parse' +let g:netrw_dirhist_5='/home/nbingham/workspace/siden/content-seeder/internal/app/service/seeder/mocks' +let g:netrw_dirhist_4='/home/nbingham' +let g:netrw_dirhist_3='/home/nbingham/.ssh' +let g:netrw_dirhist_2='/home/nbingham/workspace/vlsi/act/build' +let g:netrw_dirhist_1='/home/nbingham/backup/act_conf/st28' diff --git a/home/.vim/syntax/hackt.vim b/home/.vim/syntax/hackt.vim new file mode 100644 index 0000000..4790e59 --- /dev/null +++ b/home/.vim/syntax/hackt.vim @@ -0,0 +1,340 @@ +" Vim syntax file +" Language: HACTK +" Maintainer: CARLOS TADEO ORTEGA OTERO +" Last Change: NOV 02, 07 + + +" A bunch of useful C keywords +syn keyword cStatement template export open +syn keyword cLabel case default defproc chp defchan namespace +"syn keyword cConditional if else switch +"syn keyword cRepeat for while + +syn keyword cTodo contained TODO FIXME XXX + +" cCommentGroup allows adding matches for special things in comments +syn cluster cCommentGroup contains=cTodo + +" String and Character constants +" Highlight special characters (those which have a backslash) differently +syn match cSpecial display contained "\\\(x\x\+\|\o\{1,3}\|.\|$\)" +if !exists("c_no_utf") + syn match cSpecial display contained "\\\(u\x\{4}\|U\x\{8}\)" +endif +if exists("c_no_cformat") + syn region cString start=+L\="+ skip=+\\\\\|\\"+ end=+"+ contains=cSpecial + " cCppString: same as cString, but ends at end of line + syn region cCppString start=+L\="+ skip=+\\\\\|\\"\|\\$+ excludenl end=+"+ end='$' contains=cSpecial +else + syn match cFormat display "%\(\d\+\$\)\=[-+' #0*]*\(\d*\|\*\|\*\d\+\$\)\(\.\(\d*\|\*\|\*\d\+\$\)\)\=\([hlL]\|ll\)\=\([diuoxXDOUfeEgGcCsSpn]\|\[\^\=.[^]]*\]\)" contained + syn match cFormat display "%%" contained + syn region cString start=+L\="+ skip=+\\\\\|\\"+ end=+"+ contains=cSpecial,cFormat + " cCppString: same as cString, but ends at end of line + syn region cCppString start=+L\="+ skip=+\\\\\|\\"\|\\$+ excludenl end=+"+ end='$' contains=cSpecial,cFormat +endif + +syn match cCharacter "L\='[^\\]'" +syn match cCharacter "L'[^']*'" contains=cSpecial +if exists("c_gnu") + syn match cSpecialError "L\='\\[^'\"?\\abefnrtv]'" + syn match cSpecialCharacter "L\='\\['\"?\\abefnrtv]'" +else + syn match cSpecialError "L\='\\[^'\"?\\abfnrtv]'" + syn match cSpecialCharacter "L\='\\['\"?\\abfnrtv]'" +endif +syn match cSpecialCharacter display "L\='\\\o\{1,3}'" +syn match cSpecialCharacter display "'\\x\x\{1,2}'" +syn match cSpecialCharacter display "L'\\x\x\+'" + +"when wanted, highlight trailing white space +if exists("c_space_errors") + if !exists("c_no_trail_space_error") + syn match cSpaceError display excludenl "\s\+$" + endif + if !exists("c_no_tab_space_error") + syn match cSpaceError display " \+\t"me=e-1 + endif +endif + +"catch errors caused by wrong parenthesis and brackets +" also accept <% for {, %> for }, <: for [ and :> for ] (C99) +syn cluster cParenGroup contains=cParenError,cIncluded,cSpecial,cCommentSkip,cCommentString,cComment2String,@cCommentGroup,cCommentStartError,cUserCont,cUserLabel,cBitField,cCommentSkip,cOctalZero,cCppOut,cCppOut2,cCppSkip,cFormat,cNumber,cFloat,cOctal,cOctalError,cNumbersCom +if exists("c_no_bracket_error") + syn region cParen transparent start='(' end=')' contains=ALLBUT,@cParenGroup,cCppParen,cCppString + + " cCppParen: same as cParen but ends at end-of-line; used in cDefine + syn region cCppParen transparent start='(' skip='\\$' excludenl end=')' end='$' contained contains=ALLBUT,@cParenGroup,cParen,cString + syn match cParenError display ")" + syn match cErrInParen display contained "[{}]\|<%\|%>" +else + syn region cParen transparent start='(' end=')' contains=ALLBUT,@cParenGroup,cCppParen,cErrInBracket,cCppBracket,cCppString + " cCppParen: same as cParen but ends at end-of-line; used in cDefine + syn region cCppParen transparent start='(' skip='\\$' excludenl end=')' end='$' contained contains=ALLBUT,@cParenGroup,cErrInBracket,cParen,cBracket,cString + syn match cParenError display "[\])]" + syn match cErrInParen display contained "[\]{}]\|<%\|%>" + syn region cBracket transparent start='\[\|<:' end=']\|:>' contains=ALLBUT,@cParenGroup,cErrInParen,cCppParen,cCppBracket,cCppString + " cCppBracket: same as cParen but ends at end-of-line; used in cDefine + syn region cCppBracket transparent start='\[\|<:' skip='\\$' excludenl end=']\|:>' end='$' contained contains=ALLBUT,@cParenGroup,cErrInParen,cParen,cBracket,cString + "syn match cErrInBracket display contained "[);{}]\|<%\|%>" + syn match cErrInBracket display contained "[)]\|<%\|%>" +endif + +"integer number, or floating point number without a dot and with "f". +syn case ignore +syn match cNumbers display transparent "\<\d\|\.\d" contains=cNumber,cFloat,cOctalError,cOctal +" Same, but without octal error (for comments) +syn match cNumbersCom display contained transparent "\<\d\|\.\d" contains=cNumber,cFloat,cOctal +syn match cNumber display contained "\d\+\(u\=l\{0,2}\|ll\=u\)\>" +"hex number +syn match cNumber display contained "0x\x\+\(u\=l\{0,2}\|ll\=u\)\>" +" Flag the first zero of an octal number as something special +syn match cOctal display contained "0\o\+\(u\=l\{0,2}\|ll\=u\)\>" contains=cOctalZero +syn match cOctalZero display contained "\<0" +syn match cFloat display contained "\d\+f" +"floating point number, with dot, optional exponent +syn match cFloat display contained "\d\+\.\d*\(e[-+]\=\d\+\)\=[fl]\=" +"floating point number, starting with a dot, optional exponent +syn match cFloat display contained "\.\d\+\(e[-+]\=\d\+\)\=[fl]\=\>" +"floating point number, without dot, with exponent +syn match cFloat display contained "\d\+e[-+]\=\d\+[fl]\=\>" +if !exists("c_no_c99") + "hexadecimal floating point number, optional leading digits, with dot, with exponent + syn match cFloat display contained "0x\x*\.\x\+p[-+]\=\d\+[fl]\=\>" + "hexadecimal floating point number, with leading digits, optional dot, with exponent + syn match cFloat display contained "0x\x\+\.\=p[-+]\=\d\+[fl]\=\>" +endif + +" flag an octal number with wrong digits +syn match cOctalError display contained "0\o*[89]\d*" +syn case match + +if exists("c_comment_strings") + " A comment can contain cString, cCharacter and cNumber. + " But a "*/" inside a cString in a cComment DOES end the comment! So we + " need to use a special type of cString: cCommentString, which also ends on + " "*/", and sees a "*" at the start of the line as comment again. + " Unfortunately this doesn't very well work for // type of comments :-( + syntax match cCommentSkip contained "^\s*\*\($\|\s\+\)" + syntax region cCommentString contained start=+L\=\\\@" skip="\\$" end="$" end="//"me=s-1 contains=cComment,cCppString,cCharacter,cCppParen,cParenError,cNumbers,cCommentError,cSpaceError +syn match cPreCondit display "^\s*\(%:\|#\)\s*\(else\|endif\)\>" +if !exists("c_no_if0") + syn region cCppOut start="^\s*\(%:\|#\)\s*if\s\+0\+\>" end=".\@=\|$" contains=cCppOut2 + syn region cCppOut2 contained start="0" end="^\s*\(%:\|#\)\s*\(endif\>\|else\>\|elif\>\)" contains=cSpaceError,cCppSkip + syn region cCppSkip contained start="^\s*\(%:\|#\)\s*\(if\>\|ifdef\>\|ifndef\>\)" skip="\\$" end="^\s*\(%:\|#\)\s*endif\>" contains=cSpaceError,cCppSkip +endif +syn region cIncluded display contained start=+"+ skip=+\\\\\|\\"+ end=+"+ +syn match cIncluded display contained "<[^>]*>" +syn match cInclude display "^\s*\(%:\|#\)\s*include\>\s*["<]" contains=cIncluded +"syn match cLineSkip "\\$" +syn cluster cPreProcGroup contains=cPreCondit,cIncluded,cInclude,cDefine,cErrInParen,cErrInBracket,cUserLabel,cSpecial,cOctalZero,cCppOut,cCppOut2,cCppSkip,cFormat,cNumber,cFloat,cOctal,cOctalError,cNumbersCom,cString,cCommentSkip,cCommentString,cComment2String,@cCommentGroup,cCommentStartError,cParen,cBracket +syn region cDefine start="^\s*\(%:\|#\)\s*\(define\|undef\)\>" skip="\\$" end="$" end="//"me=s-1 contains=ALLBUT,@cPreProcGroup +syn region cPreProc start="^\s*\(%:\|#\)\s*\(pragma\>\|line\>\|warning\>\|warn\>\|error\>\)" skip="\\$" end="$" keepend contains=ALLBUT,@cPreProcGroup + +" Highlight User Labels +syn cluster cMultiGroup contains=cIncluded,cSpecial,cCommentSkip,cCommentString,cComment2String,@cCommentGroup,cCommentStartError,cUserCont,cUserLabel,cBitField,cOctalZero,cCppOut,cCppOut2,cCppSkip,cFormat,cNumber,cFloat,cOctal,cOctalError,cNumbersCom,cCppParen,cCppBracket,cCppString +"syn region cMulti transparent start='?' skip='::' end=':' contains=ALLBUT,@cMultiGroup +" Avoid matching foo::bar() in C++ by requiring that the next char is not ':' +syn cluster cLabelGroup contains=cUserLabel +syn match cUserCont display "^\s*\I\i*\s*:$" contains=@cLabelGroup +syn match cUserCont display ";\s*\I\i*\s*:$" contains=@cLabelGroup +syn match cUserCont display "^\s*\I\i*\s*:[^:]"me=e-1 contains=@cLabelGroup +syn match cUserCont display ";\s*\I\i*\s*:[^:]"me=e-1 contains=@cLabelGroup + +syn match cUserLabel display "\I\i*" contained + +" Avoid recognizing most bitfields as labels +syn match cBitField display "^\s*\I\i*\s*:\s*[1-9]"me=e-1 +syn match cBitField display ";\s*\I\i*\s*:\s*[1-9]"me=e-1 + +if exists("c_minlines") + let b:c_minlines = c_minlines +else + if !exists("c_no_if0") + let b:c_minlines = 50 " #if 0 constructs can be long + else + let b:c_minlines = 15 " mostly for () constructs + endif +endif +exec "syn sync ccomment cComment minlines=" . b:c_minlines + +" Define the default highlighting. +" For version 5.7 and earlier: only when not done already +" For version 5.8 and later: only when an item doesn't have highlighting yet +if version >= 508 || !exists("did_c_syn_inits") + if version < 508 + let did_c_syn_inits = 1 + command -nargs=+ HiLink hi link + else + command -nargs=+ HiLink hi def link + endif + + HiLink cFormat cSpecial + HiLink cCppString cString + HiLink cCommentL cComment + HiLink cCommentStart cComment + HiLink cLabel Label + HiLink cUserLabel Label + HiLink cConditional Conditional + HiLink cRepeat Repeat + HiLink cCharacter Character + HiLink cSpecialCharacter cSpecial + HiLink cNumber Number + HiLink cOctal Number + HiLink cOctalZero PreProc " link this to Error if you want + HiLink cFloat Float + HiLink cOctalError cError + HiLink cParenError cError + HiLink cErrInParen cError + HiLink cErrInBracket cError + HiLink cCommentError cError + HiLink cCommentStartError cError + HiLink cSpaceError cError + HiLink cSpecialError cError + HiLink cOperator Operator + HiLink cStructure Structure + HiLink cStorageClass StorageClass + HiLink cInclude Include + HiLink cPreProc PreProc + HiLink cDefine Macro + HiLink cIncluded cString + HiLink cError Error + HiLink cStatement Statement + HiLink cPreCondit PreCondit + HiLink cType Type + HiLink cConstant Constant + HiLink cCommentString cString + HiLink cComment2String cString + HiLink cCommentSkip cComment + HiLink cString String + HiLink cComment Comment + HiLink cSpecial SpecialChar + HiLink cTodo Todo + HiLink cCppSkip cCppOut + HiLink cCppOut2 cCppOut + HiLink cCppOut Comment + + delcommand HiLink +endif + +let b:current_syntax = "c" + +" vim: ts=8 diff --git a/home/.vimrc b/home/.vimrc new file mode 100644 index 0000000..073588b --- /dev/null +++ b/home/.vimrc @@ -0,0 +1,60 @@ +"filetype plugin indent on +"set backspace=indent,eol,start + +"let g:go_fmt_command = "goimports" +"let g:go_auto_type_info = 1 +nnoremap :NERDTreeToggle +let g:NERDTreeWinSize=20 + +set undofile " Maintain undo history between sessions +set undodir=~/.vim/undodir + +command T execute "vertical term" + +set tabstop=2 +set softtabstop=0 noexpandtab +set shiftwidth=2 + +set foldmethod=indent +set foldlevelstart=99 +nnoremap za +nnoremap zA + +autocmd FileType tex,md,html setlocal spell spelllang=en + +nnoremap U +vmap v (expand_region_expand) +vmap (expand_region_shrink) + +filetype on +syntax on +set hlsearch +" used to dark background, use cyan instead of blue for comments +:highlight darkComment ctermfg=6 +:highlight cComment ctermfg=6 +:highlight texComment ctermfg=6 +:highlight shComment ctermfg=6 +:highlight cshComment ctermfg=6 +:highlight makeComment ctermfg=2 +:highlight gnuplotComment ctermfg=6 +"//#:imap ` +:highlight awkComment ctermfg=2 +au BufRead,BufNewFile *.hac set filetype=hackt +au BufRead,BufNewFile *.actmx set filetype=hackt +au BufRead,BufNewFile *.act set filetype=hackt +au! Syntax hackt source ~/.vim/syntax/hackt.vim + +imap gj +imap gk +nmap gj +nmap gk + +command C execute "set splitbelow | 20new | setlocal buftype=nofile | setlocal bufhidden=hide | setlocal noswapfile | r ! hseenc # -c" +command CU execute "set splitbelow | 20new | setlocal buftype=nofile | setlocal bufhidden=hide | setlocal noswapfile | r ! hseenc # -cu" +command CD execute "set splitbelow | 20new | setlocal buftype=nofile | setlocal bufhidden=hide | setlocal noswapfile | r ! hseenc # -cd" +command S execute "set splitbelow | 20new | setlocal buftype=nofile | setlocal bufhidden=hide | setlocal noswapfile | r ! hseenc # -s" +command SU execute "set splitbelow | 20new | setlocal buftype=nofile | setlocal bufhidden=hide | setlocal noswapfile | r ! hseenc # -su" +command SD execute "set splitbelow | 20new | setlocal buftype=nofile | setlocal bufhidden=hide | setlocal noswapfile | r ! hseenc # -sd" + +command HSE execute "exe \"ConqueTermVSplit hsesim \" . expand(\"%\")" +