Patch 9.0.0698
Problem:    VisVim is outdated, does not work with current Visual Studio.
Solution:   Remove VisVim. (Martin Tournoij)
Files:      Filelist, Makefile, READMEdir/README_extra.txt,
            READMEdir/README_ole.txt, READMEdir/README_srcdos.txt,
            nsis/README.txt, nsis/gvim.nsi, nsis/lang/danish.nsi,
            nsis/lang/dutch.nsi, nsis/lang/english.nsi, nsis/lang/german.nsi,
            nsis/lang/italian.nsi, nsis/lang/japanese.nsi,
            nsis/lang/russian.nsi, nsis/lang/serbian.nsi,
            nsis/lang/simpchinese.nsi, nsis/lang/tradchinese.nsi,
            nsis/lang/turkish.nsi, runtime/doc/if_ole.txt,
            src/VisVim/Commands.cpp, src/VisVim/Commands.h,
            src/VisVim/DSAddIn.cpp, src/VisVim/DSAddIn.h,
            src/VisVim/OleAut.cpp, src/VisVim/OleAut.h,
            src/VisVim/README_VisVim.txt, src/VisVim/Reg.cpp,
            src/VisVim/Register.bat, src/VisVim/Res/ToolbarL.bmp,
            src/VisVim/Res/ToolbarM.bmp, src/VisVim/Resource.h,
            src/VisVim/StdAfx.cpp, src/VisVim/StdAfx.h,
            src/VisVim/UnRegist.bat, src/VisVim/VisVim.cpp,
            src/VisVim/VisVim.def, src/VisVim/VisVim.dll, src/VisVim/VisVim.h,
            src/VisVim/VisVim.mak, src/VisVim/VisVim.odl,
            src/VisVim/VisVim.rc, src/VisVim/VsReadMe.txt, uninstall.txt


*** ../vim-9.0.0697/Filelist    2022-09-26 19:50:07.463112932 +0100
--- Filelist    2022-10-08 17:02:06.685722357 +0100
***************
*** 590,619 ****
                nsis/README.txt \
                nsis/lang/*.nsi \
                uninstall.txt \
-               src/VisVim/Commands.cpp \
-               src/VisVim/Commands.h \
-               src/VisVim/DSAddIn.cpp \
-               src/VisVim/DSAddIn.h \
-               src/VisVim/OleAut.cpp \
-               src/VisVim/OleAut.h \
-               src/VisVim/README_VisVim.txt \
-               src/VisVim/Reg.cpp \
-               src/VisVim/Register.bat \
-               src/VisVim/Resource.h \
-               src/VisVim/StdAfx.cpp \
-               src/VisVim/StdAfx.h \
-               src/VisVim/UnRegist.bat \
-               src/VisVim/VisVim.cpp \
-               src/VisVim/VisVim.def \
-               src/VisVim/VisVim.mak \
-               src/VisVim/VisVim.h \
-               src/VisVim/VisVim.odl \
-               src/VisVim/VisVim.rc \
-               src/VisVim/VsReadMe.txt \
  
  # source files for DOS without CR/LF translation (also in the extra archive)
  SRC_DOS_BIN = \
-               src/VisVim/Res/*.bmp \
                src/tearoff.bmp \
                src/tools.bmp \
                src/vim*.ico \
--- 591,599 ----
***************
*** 945,951 ****
                $(RT_EXTRA) \
                $(SRC_EXTRA) \
                README_extra.txt \
-               src/VisVim/VisVim.dll \
                runtime/vimlogo.xpm \
  
  # files in READMEdir that are included from the top dir
--- 925,930 ----
*** ../vim-9.0.0697/Makefile    2022-07-02 17:55:14.628322357 +0100
--- Makefile    2022-10-08 17:02:06.685722357 +0100
***************
*** 198,205 ****
  # - copy these files (get them from a binary archive or build them):
  #     gvimext.dll in src/GvimExt
  #     gvimext64.dll in src/GvimExt
- #     VisVim.dll in src/VisVim
- #   Note: VisVim needs to be build with MSVC 5, newer versions don't work.
  #   gvimext64.dll can be obtained from:
  #   https://github.com/vim/vim-win32-installer/releases
  #     It is part of gvim_9.0.*_x64.zip as vim/vim90/GvimExt/gvimext64.dll.
--- 198,203 ----
***************
*** 554,561 ****
        cp uninstallw32.exe dist/vim/$(VIMRTDIR)/uninstall.exe
        cp gvimext.dll dist/vim/$(VIMRTDIR)/gvimext.dll
        cp README_ole.txt dist/vim/$(VIMRTDIR)
-       cp src/VisVim/VisVim.dll dist/vim/$(VIMRTDIR)/VisVim.dll
-       cp src/VisVim/README_VisVim.txt dist/vim/$(VIMRTDIR)
        cd dist && zip -9 -rD -z gvim$(VERSION)ole.zip vim <$(COMMENT_OLE)
        cp gvim_ole.pdb dist/gvim$(VERSION)ole.pdb
  
--- 552,557 ----
*** ../vim-9.0.0697/nsis/README.txt     2021-06-01 09:12:21.000000000 +0100
--- nsis/README.txt     2022-10-08 17:02:06.689722348 +0100
***************
*** 27,49 ****
        64-bit: src/GvimExt/gvimext64.dll
        32-bit: src/GvimExt/gvimext.dll
  
! 4.  Go to the VisVim directory and build VisVim.dll (or get it from a binary
!     archive).
! 
! 5.  Get a "diff.exe" program.  If you skip this the built-in diff will always
      be used (which is fine for most users).  If you do have your own
      "diff.exe" put it in the "../.." directory (above the "vim82" directory,
      it's the same for all Vim versions).
      You can find one in previous Vim versions or in this archive:
                http://www.mossbayeng.com/~ron/vim/diffutils.tar.gz
  
! 6   Also put winpty32.dll and winpty-agent.exe in "../.." (above the "vim82"
      directory).  This is required for the terminal window.
  
! 7.  Do "make uganda.nsis.txt" in runtime/doc.  This requires sed, you may have
      to do this on Unix.  Make sure the file is in DOS file format!
  
! 8.  Get gettext and iconv DLLs from the following site:
        https://github.com/mlocati/gettext-iconv-windows/releases
      Both 64- and 32-bit versions are needed.
      Download the files gettextX.X.X.X-iconvX.XX-shared-{32,64}.zip, extract
--- 27,46 ----
        64-bit: src/GvimExt/gvimext64.dll
        32-bit: src/GvimExt/gvimext.dll
  
! 4.  Get a "diff.exe" program.  If you skip this the built-in diff will always
      be used (which is fine for most users).  If you do have your own
      "diff.exe" put it in the "../.." directory (above the "vim82" directory,
      it's the same for all Vim versions).
      You can find one in previous Vim versions or in this archive:
                http://www.mossbayeng.com/~ron/vim/diffutils.tar.gz
  
! 5   Also put winpty32.dll and winpty-agent.exe in "../.." (above the "vim82"
      directory).  This is required for the terminal window.
  
! 6.  Do "make uganda.nsis.txt" in runtime/doc.  This requires sed, you may have
      to do this on Unix.  Make sure the file is in DOS file format!
  
! 7.  Get gettext and iconv DLLs from the following site:
        https://github.com/mlocati/gettext-iconv-windows/releases
      Both 64- and 32-bit versions are needed.
      Download the files gettextX.X.X.X-iconvX.XX-shared-{32,64}.zip, extract
*** ../vim-9.0.0697/nsis/gvim.nsi       2022-08-24 18:07:56.889586310 +0100
--- nsis/gvim.nsi       2022-10-08 17:02:06.689722348 +0100
***************
*** 36,44 ****
  # Comment the next line if you do not want to add Native Language Support
  !define HAVE_NLS
  
- # Uncomment the next line if you want to include VisVim extension:
- #!define HAVE_VIS_VIM
- 
  # Comment the following line to create an English-only installer:
  !define HAVE_MULTI_LANG
  
--- 36,41 ----
***************
*** 55,63 ****
  # ----------- No configurable settings below this line -----------
  
  !include "Library.nsh"                # For DLL install
- !ifdef HAVE_VIS_VIM
-   !include "UpgradeDLL.nsh"   # for VisVim.dll
- !endif
  !include "LogicLib.nsh"
  !include "MUI2.nsh"
  !include "nsDialogs.nsh"
--- 52,57 ----
***************
*** 537,553 ****
  SectionGroupEnd
  
  ##########################################################
- !ifdef HAVE_VIS_VIM
- Section "$(str_section_vis_vim)" id_section_visvim
-       SectionIn 3
- 
-       SetOutPath $0
-       !insertmacro UpgradeDLL "${VIMSRC}\VisVim\VisVim.dll" "$0\VisVim.dll" 
"$0"
-       File ${VIMSRC}\VisVim\README_VisVim.txt
- SectionEnd
- !endif
- 
- ##########################################################
  !ifdef HAVE_NLS
  Section "$(str_section_nls)" id_section_nls
        SectionIn 1 3
--- 531,536 ----
***************
*** 634,645 ****
          SectionGetSize ${id_section_editwith} $4
          IntOp $3 $3 + $4
        ${EndIf}
- !ifdef HAVE_VIS_VIM
-       ${If} ${SectionIsSelected} ${id_section_visvim}
-         SectionGetSize ${id_section_visvim} $4
-         IntOp $3 $3 + $4
-       ${EndIf}
- !endif
  !ifdef HAVE_NLS
        ${If} ${SectionIsSelected} ${id_section_nls}
          SectionGetSize ${id_section_nls} $4
--- 617,622 ----
***************
*** 670,678 ****
        !insertmacro SaveSectionSelection ${id_section_vimrc}      
"select_vimrc"
        !insertmacro SaveSectionSelection ${id_section_pluginhome} 
"select_pluginhome"
        !insertmacro SaveSectionSelection ${id_section_pluginvim}  
"select_pluginvim"
- !ifdef HAVE_VIS_VIM
-       !insertmacro SaveSectionSelection ${id_section_visvim}     
"select_visvim"
- !endif
  !ifdef HAVE_NLS
        !insertmacro SaveSectionSelection ${id_section_nls}        "select_nls"
  !endif
--- 647,652 ----
***************
*** 744,752 ****
    !insertmacro LoadSectionSelection ${id_section_vimrc}      "select_vimrc"
    !insertmacro LoadSectionSelection ${id_section_pluginhome} 
"select_pluginhome"
    !insertmacro LoadSectionSelection ${id_section_pluginvim}  
"select_pluginvim"
- !ifdef HAVE_VIS_VIM
-   !insertmacro LoadSectionSelection ${id_section_visvim}     "select_visvim"
- !endif
  !ifdef HAVE_NLS
    !insertmacro LoadSectionSelection ${id_section_nls}        "select_nls"
  !endif
--- 718,723 ----
***************
*** 921,929 ****
      !insertmacro MUI_DESCRIPTION_TEXT ${id_group_plugin}        
$(str_desc_plugin)
      !insertmacro MUI_DESCRIPTION_TEXT ${id_section_pluginhome}  
$(str_desc_plugin_home)
      !insertmacro MUI_DESCRIPTION_TEXT ${id_section_pluginvim}   
$(str_desc_plugin_vim)
- !ifdef HAVE_VIS_VIM
-     !insertmacro MUI_DESCRIPTION_TEXT ${id_section_visvim}      
$(str_desc_vis_vim)
- !endif
  !ifdef HAVE_NLS
      !insertmacro MUI_DESCRIPTION_TEXT ${id_section_nls}         
$(str_desc_nls)
  !endif
--- 892,897 ----
***************
*** 947,959 ****
        # created.  Thus the "vim61" directory is included in it.
        StrCpy $0 "$INSTDIR"
  
- !ifdef HAVE_VIS_VIM
-       # If VisVim was installed, unregister the DLL.
-       ${If} ${FileExists} "$0\VisVim.dll"
-         ExecWait "regsvr32.exe /u /s $0\VisVim.dll"
-       ${EndIf}
- !endif
- 
        # delete the context menu entry and batch files
        DetailPrint "$(str_msg_unregistering)"
        nsExec::Exec "$0\uninstall.exe -nsis"
--- 915,920 ----
***************
*** 1046,1054 ****
        RMDir /r $0\syntax
        RMDir /r $0\tools
        RMDir /r $0\tutor
- !ifdef HAVE_VIS_VIM
-       RMDir /r $0\VisVim
- !endif
        RMDir /r $0\lang
        RMDir /r $0\keymap
        Delete $0\*.exe
--- 1007,1012 ----
*** ../vim-9.0.0697/nsis/lang/danish.nsi        2019-02-13 17:18:53.000000000 
+0000
--- nsis/lang/danish.nsi        2022-10-08 17:02:06.689722348 +0100
***************
*** 79,87 ****
  LangString str_section_plugin_vim   ${LANG_DANISH}     "Delte"
  LangString str_desc_plugin_vim      ${LANG_DANISH}     "Opret plugin-mapper i 
Vim-installationsmappe, det bruges af alle på systemet."
  
- LangString str_section_vis_vim      ${LANG_DANISH}     "VisVim-udvidelser"
- LangString str_desc_vis_vim         ${LANG_DANISH}     "VisVim-udvidelser til 
integrering i Microsoft Visual Studio."
- 
  LangString str_section_nls          ${LANG_DANISH}     "Understøttelse af 
modersmål"
  LangString str_desc_nls             ${LANG_DANISH}     "Installer filer til 
understøttelse af modersmål."
  
--- 79,84 ----
*** ../vim-9.0.0697/nsis/lang/dutch.nsi 2019-01-09 19:44:20.000000000 +0000
--- nsis/lang/dutch.nsi 2022-10-08 17:02:06.689722348 +0100
***************
*** 123,133 ****
      "Creëer plugin mappen in Vim installatie map, deze worden gebruikt \
       voor iedereen op het systeem."
  
- LangString str_section_vis_vim      ${LANG_DUTCH} \
-     "VisVim extensie"
- LangString str_desc_vis_vim         ${LANG_DUTCH} \
-     "VisVim extensie voor Microsoft Visual Studio integratie."
- 
  LangString str_section_nls          ${LANG_DUTCH} \
      "Ondersteuning voor andere talen"
  LangString str_desc_nls             ${LANG_DUTCH} \
--- 123,128 ----
*** ../vim-9.0.0697/nsis/lang/english.nsi       2021-05-01 20:15:59.000000000 
+0100
--- nsis/lang/english.nsi       2022-10-08 17:02:06.689722348 +0100
***************
*** 121,131 ****
      "Create plugin directories in Vim install directory, it is used for \
       everybody on the system."
  
- LangString str_section_vis_vim      ${LANG_ENGLISH} \
-     "VisVim Extension"
- LangString str_desc_vis_vim         ${LANG_ENGLISH} \
-     "VisVim Extension for Microsoft Visual Studio integration."
- 
  LangString str_section_nls          ${LANG_ENGLISH} \
      "Native Language Support"
  LangString str_desc_nls             ${LANG_ENGLISH} \
--- 121,126 ----
*** ../vim-9.0.0697/nsis/lang/german.nsi        2019-01-09 19:44:20.000000000 
+0000
--- nsis/lang/german.nsi        2022-10-08 17:02:06.689722348 +0100
***************
*** 122,132 ****
      "Plugin-Verzeichnisse im Vim-Installationsverzeichnis erstellen. Diese 
werden \
       für alle Benutzer dieses Systems genutzt."
  
- LangString str_section_vis_vim      ${LANG_GERMAN} \
-     "VisVim-Erweiterung"
- LangString str_desc_vis_vim         ${LANG_GERMAN} \
-     "VisVim-Erweiterung zur Integration in Microsoft Visual Studio."
- 
  LangString str_section_nls          ${LANG_GERMAN} \
      "Unterstützung für andere Sprachen"
  LangString str_desc_nls             ${LANG_GERMAN} \
--- 122,127 ----
*** ../vim-9.0.0697/nsis/lang/italian.nsi       2020-09-09 11:13:35.000000000 
+0100
--- nsis/lang/italian.nsi       2022-10-08 17:02:06.689722348 +0100
***************
*** 123,133 ****
      "Crea directory per plugin nella directory di installazione di Vim \
       per uso da parte di tutti gli utenti di questo sistema."
  
- LangString str_section_vis_vim      ${LANG_ITALIAN} \
-     "Estensione VisVim"
- LangString str_desc_vis_vim         ${LANG_ITALIAN} \
-     "Estensione VisVim per integrazione con Microsoft Visual Studio."
- 
  LangString str_section_nls          ${LANG_ITALIAN} \
      "Supporto Multilingue (NLS)"
  LangString str_desc_nls             ${LANG_ITALIAN} \
--- 123,128 ----
*** ../vim-9.0.0697/nsis/lang/japanese.nsi      2019-01-09 19:44:20.000000000 
+0000
--- nsis/lang/japanese.nsi      2022-10-08 17:02:06.689722348 +0100
***************
*** 128,138 ****
  LangString str_desc_plugin_vim      ${LANG_JAPANESE} \
      "プラグインディレクトリを Vim ã 
®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã «ä½œæˆ 㠗㠾㠙。システムã 
®å…¨å“¡ã §å…±æœ‰ã •れ㠾㠙。"
  
- LangString str_section_vis_vim      ${LANG_JAPANESE} \
-     "VisVim æ‹¡å¼µ"
- LangString str_desc_vis_vim         ${LANG_JAPANESE} \
-     "Microsoft Visual Studio çµ±å ˆç”¨ã ® VisVim 拡張。"
- 
  LangString str_section_nls          ${LANG_JAPANESE} \
      "多言語サムート"
  LangString str_desc_nls             ${LANG_JAPANESE} \
--- 128,133 ----
*** ../vim-9.0.0697/nsis/lang/russian.nsi       2020-09-21 19:13:13.000000000 
+0100
--- nsis/lang/russian.nsi       2022-10-08 17:02:06.689722348 +0100
***************
*** 125,135 ****
       Модули в Ñ Ñ‚Ð¾Ð¼ каталоге будут Ð´Ð¾Ñ Ñ‚ÑƒÐ¿Ð½Ñ‹ 
Ð´Ð»Ñ  любого Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ  \
       Ð·Ð°Ñ€ÐµÐ³Ð¸Ñ Ñ‚Ñ€Ð¸Ñ€Ð¾Ð²Ð°Ð²ÑˆÐµÐ³Ð¾Ñ Ñ  в Ñ Ð¸Ñ Ñ‚ÐµÐ¼Ðµ"
  
- LangString str_section_vis_vim      ${LANG_RUSSIAN} \
-     "Подключаемый модуль VisVim"
- LangString str_desc_vis_vim         ${LANG_RUSSIAN} \
-     "Подключаемый модуль VisVim Ð¸Ñ Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚Ñ Ñ  
Ð´Ð»Ñ  интеграции Ñ  Microsoft Visual Studio"
- 
  LangString str_section_nls          ${LANG_RUSSIAN} \
      "Поддержка региональных Ñ Ð·Ñ‹ÐºÐ¾Ð²"
  LangString str_desc_nls             ${LANG_RUSSIAN} \
--- 125,130 ----
*** ../vim-9.0.0697/nsis/lang/serbian.nsi       2019-09-08 12:06:34.000000000 
+0100
--- nsis/lang/serbian.nsi       2022-10-08 17:02:06.689722348 +0100
***************
*** 121,131 ****
      "Креира директоријуме додатака у Vim Ð¸Ð½Ñ 
талационом директоријуму, ÐºÐ¾Ñ€Ð¸Ñ Ñ‚Ðµ их Ñ Ð²Ð¸ \
       на Ñ Ð¸Ñ Ñ‚ÐµÐ¼Ñƒ."
  
- LangString str_section_vis_vim      ${LANG_SERBIAN} \
-     "VisVim проширење"
- LangString str_desc_vis_vim         ${LANG_SERBIAN} \
-     "VisVim проширење за Microsoft Visual Studio 
интеграцију."
- 
  LangString str_section_nls          ${LANG_SERBIAN} \
      "Подршка за домаћи језик"
  LangString str_desc_nls             ${LANG_SERBIAN} \
--- 121,126 ----
*** ../vim-9.0.0697/nsis/lang/simpchinese.nsi   2019-10-02 21:48:30.000000000 
+0100
--- nsis/lang/simpchinese.nsi   2022-10-08 17:02:06.689722348 +0100
***************
*** 120,130 ****
      "在 Vim 安装目录下创建(空的)æ 
’件目录结构,系统上所有用户都能使用安装在\
       è¯¥ç›®å½•ä¸‹çš„æ‰©å±•æ ’ä»¶ã€‚"
  
- LangString str_section_vis_vim      ${LANG_SIMPCHINESE} \
-     "VisVim æ ’ä»¶"
- LangString str_desc_vis_vim         ${LANG_SIMPCHINESE} \
-     "安装与 Visual Studio é›†æˆ çš„ VisVim æ ’ä»¶ã€‚"
- 
  LangString str_section_nls          ${LANG_SIMPCHINESE} \
      "å®‰è£…å¤šè¯­è¨€æ”¯æŒ "
  LangString str_desc_nls             ${LANG_SIMPCHINESE} \
--- 120,125 ----
*** ../vim-9.0.0697/nsis/lang/tradchinese.nsi   2019-01-09 19:44:20.000000000 
+0000
--- nsis/lang/tradchinese.nsi   2022-10-08 17:02:06.689722348 +0100
***************
*** 121,131 ****
      "在 Vim å®‰è£ è³‡æ–™å¤¾ä¸‹å»ºç«‹(空的)æ ’ä»¶è³‡æ–™å¤¾çµ 
æ§‹ï¼Œé›»è…¦ä¸Šæ‰€æœ‰ç”¨æˆ¶éƒ½èƒ½ä½¿ç”¨å®‰è£ \
       åœ¨è©²è³‡æ–™å¤¾é‡Œçš„æ“´å±•æ ’ä»¶ã€‚"
  
- LangString str_section_vis_vim      ${LANG_TRADCHINESE} \
-     "å®‰è£  VisVim æ ’ä»¶"
- LangString str_desc_vis_vim         ${LANG_TRADCHINESE} \
-     "VisVim 是用于與微軟 Microsoft Visual Studio è»Ÿé«”é€²è¡Œæ•´å ˆçš„æ 
’件。"
- 
  LangString str_section_nls          ${LANG_TRADCHINESE} \
      "å®‰è£ æœ¬åœ°èªžè¨€æ”¯æŒ "
  LangString str_desc_nls             ${LANG_TRADCHINESE} \
--- 121,126 ----
*** ../vim-9.0.0697/nsis/lang/turkish.nsi       2021-08-19 19:07:06.000000000 
+0100
--- nsis/lang/turkish.nsi       2022-10-08 17:02:06.689722348 +0100
***************
*** 90,100 ****
      "Eklenti dizinlerini Vim yükleme dizininde oluşturur. Bu eklentilerden \
       bilgisayarın tüm kullanıcıları yararlanabilir."
  
- LangString str_section_vis_vim      ${LANG_TURKISH} \
-     "VisVim eklentisi"
- LangString str_desc_vis_vim         ${LANG_TURKISH} \
-     "Microsoft Visual Studio entegrasyonu için VisVim eklentisi"
- 
  LangString str_section_nls          ${LANG_TURKISH} \
      "Ek dil desteÄŸi"
  LangString str_desc_nls             ${LANG_TURKISH} \
--- 90,95 ----
*** ../vim-9.0.0697/runtime/doc/if_ole.txt      2022-06-28 11:21:05.000000000 
+0100
--- runtime/doc/if_ole.txt      2022-10-08 17:07:04.073075563 +0100
***************
*** 1,4 ****
! *if_ole.txt*    For Vim version 9.0.  Last change: 2019 Dec 07
  
  
                  VIM REFERENCE MANUAL    by Paul Moore
--- 1,4 ----
! *if_ole.txt*    For Vim version 9.0.  Last change: 2022 Oct 08
  
  
                  VIM REFERENCE MANUAL    by Paul Moore
***************
*** 156,173 ****
        gvim -silent -unregister
  
  ==============================================================================
! 5. MS Visual Studio integration                       *MSVisualStudio* 
*VisVim*
  
! The OLE version can be used to run Vim as the editor in Microsoft Visual
! Studio.  This is called "VisVim".  It is included in the archive that contains
! the OLE version.  The documentation can be found in the runtime directory, the
! README_VisVim.txt file.
  
  
  Using Vim with Visual Studio .Net~
  
! With .Net you no longer really need VisVim, since .Net studio has support for
! external editors.  Follow these directions:
  
  In .Net Studio choose from the menu Tools->External Tools...
  Add
--- 156,169 ----
        gvim -silent -unregister
  
  ==============================================================================
! 5. MS Visual Studio integration                               *MSVisualStudio*
  
! The old "VisVim" integration was removed from Vim in patch 9.0.0698.
  
  
  Using Vim with Visual Studio .Net~
  
! .Net studio has support for external editors.  Follow these directions:
  
  In .Net Studio choose from the menu Tools->External Tools...
  Add
*** ../vim-9.0.0697/src/VisVim/Commands.cpp     2019-04-17 17:26:51.000000000 
+0100
--- src/VisVim/Commands.cpp     1970-01-01 00:00:00.000000000 +0000
***************
*** 1,710 ****
- #include "stdafx.h"
- #include <comdef.h>   // For _bstr_t
- #include "VisVim.h"
- #include "Commands.h"
- #include "OleAut.h"
- 
- #ifdef _DEBUG
- #define new DEBUG_NEW
- #undef THIS_FILE
- static char THIS_FILE[] = __FILE__;
- 
- #endif
- 
- 
- // Change directory before opening file?
- #define CD_SOURCE             0       // Cd to source path
- #define CD_SOURCE_PARENT      1       // Cd to parent directory of source path
- #define CD_NONE                       2       // No cd
- 
- 
- static BOOL g_bEnableVim = TRUE;      // Vim enabled
- static BOOL g_bDevStudioEditor = FALSE;       // Open file in Dev Studio 
editor simultaneously
- static BOOL g_bNewTabs = FALSE;
- static int g_ChangeDir = CD_NONE;     // CD after file open?
- 
- static void VimSetEnableState(BOOL bEnableState);
- static BOOL VimOpenFile(BSTR& FileName, long LineNr);
- static DISPID VimGetDispatchId(COleAutomationControl& VimOle, char* Method);
- static void VimErrDiag(COleAutomationControl& VimOle);
- static void VimChangeDir(COleAutomationControl& VimOle, DISPID DispatchId, 
BSTR& FileName);
- static void DebugMsg(char* Msg, char* Arg = NULL);
- 
- 
- /////////////////////////////////////////////////////////////////////////////
- // CCommands
- 
- CCommands::CCommands()
- {
-       // m_pApplication == NULL; M$ Code generation bug!!!
-       m_pApplication = NULL;
-       m_pApplicationEventsObj = NULL;
-       m_pDebuggerEventsObj = NULL;
- }
- 
- CCommands::~CCommands()
- {
-       ASSERT(m_pApplication != NULL);
-       if (m_pApplication)
-       {
-               m_pApplication->Release();
-               m_pApplication = NULL;
-       }
- }
- 
- void CCommands::SetApplicationObject(IApplication * pApplication)
- {
-       // This function assumes pApplication has already been AddRef'd
-       // for us, which CDSAddIn did in its QueryInterface call
-       // just before it called us.
-       m_pApplication = pApplication;
-       if (! m_pApplication)
-               return;
- 
-       // Create Application event handlers
-       XApplicationEventsObj::CreateInstance(&m_pApplicationEventsObj);
-       if (! m_pApplicationEventsObj)
-       {
-               ReportInternalError("XApplicationEventsObj::CreateInstance");
-               return;
-       }
-       m_pApplicationEventsObj->AddRef();
-       m_pApplicationEventsObj->Connect(m_pApplication);
-       m_pApplicationEventsObj->m_pCommands = this;
- 
- #ifdef NEVER
-       // Create Debugger event handler
-       CComPtr < IDispatch > pDebugger;
-       if (SUCCEEDED(m_pApplication->get_Debugger(&pDebugger))
-           && pDebugger != NULL)
-       {
-               XDebuggerEventsObj::CreateInstance(&m_pDebuggerEventsObj);
-               m_pDebuggerEventsObj->AddRef();
-               m_pDebuggerEventsObj->Connect(pDebugger);
-               m_pDebuggerEventsObj->m_pCommands = this;
-       }
- #endif
- 
-       // Get settings from registry HKEY_CURRENT_USER\Software\Vim\VisVim
-       HKEY hAppKey = GetAppKey("Vim");
-       if (hAppKey)
-       {
-               HKEY hSectionKey = GetSectionKey(hAppKey, "VisVim");
-               if (hSectionKey)
-               {
-                       g_bEnableVim = GetRegistryInt(hSectionKey, "EnableVim",
-                                                      g_bEnableVim);
-                       g_bDevStudioEditor = GetRegistryInt(hSectionKey,
-                                       "DevStudioEditor", g_bDevStudioEditor);
-                       g_bNewTabs = GetRegistryInt(hSectionKey, "NewTabs",
-                                                   g_bNewTabs);
-                       g_ChangeDir = GetRegistryInt(hSectionKey, "ChangeDir",
-                                                     g_ChangeDir);
-                       RegCloseKey(hSectionKey);
-               }
-               RegCloseKey(hAppKey);
-       }
- }
- 
- void CCommands::UnadviseFromEvents()
- {
-       ASSERT(m_pApplicationEventsObj != NULL);
-       if (m_pApplicationEventsObj)
-       {
-               m_pApplicationEventsObj->Disconnect(m_pApplication);
-               m_pApplicationEventsObj->Release();
-               m_pApplicationEventsObj = NULL;
-       }
- 
- #ifdef NEVER
-       if (m_pDebuggerEventsObj)
-       {
-               // Since we were able to connect to the Debugger events, we
-               // should be able to access the Debugger object again to
-               // unadvise from its events (thus the VERIFY_OK below--see
-               // stdafx.h).
-               CComPtr < IDispatch > pDebugger;
-               VERIFY_OK(m_pApplication->get_Debugger(&pDebugger));
-               ASSERT(pDebugger != NULL);
-               m_pDebuggerEventsObj->Disconnect(pDebugger);
-               m_pDebuggerEventsObj->Release();
-               m_pDebuggerEventsObj = NULL;
-       }
- #endif
- }
- 
- 
- /////////////////////////////////////////////////////////////////////////////
- // Event handlers
- 
- // Application events
- 
- HRESULT CCommands::XApplicationEvents::BeforeBuildStart()
- {
-       AFX_MANAGE_STATE(AfxGetStaticModuleState());
-       return S_OK;
- }
- 
- HRESULT CCommands::XApplicationEvents::BuildFinish(long nNumErrors, long 
nNumWarnings)
- {
-       AFX_MANAGE_STATE(AfxGetStaticModuleState());
-       return S_OK;
- }
- 
- HRESULT CCommands::XApplicationEvents::BeforeApplicationShutDown()
- {
-       AFX_MANAGE_STATE(AfxGetStaticModuleState());
-       return S_OK;
- }
- 
- // The open document event handle is the place where the real interface work
- // is done.
- // Vim gets called from here.
- //
- HRESULT CCommands::XApplicationEvents::DocumentOpen(IDispatch * theDocument)
- {
-       AFX_MANAGE_STATE(AfxGetStaticModuleState());
- 
-       if (! g_bEnableVim)
-               // Vim not enabled or empty command line entered
-               return S_OK;
- 
-       // First get the current file name and line number
- 
-       // Get the document object
-       CComQIPtr < ITextDocument, &IID_ITextDocument > pDoc(theDocument);
-       if (! pDoc)
-               return S_OK;
- 
-       BSTR FileName;
-       long LineNr = -1;
- 
-       // Get the document name
-       if (FAILED(pDoc->get_FullName(&FileName)))
-               return S_OK;
- 
-       LPDISPATCH pDispSel;
- 
-       // Get a selection object dispatch pointer
-       if (SUCCEEDED(pDoc->get_Selection(&pDispSel)))
-       {
-               // Get the selection object
-               CComQIPtr < ITextSelection, &IID_ITextSelection > 
pSel(pDispSel);
- 
-               if (pSel)
-                       // Get the selection line number
-                       pSel->get_CurrentLine(&LineNr);
- 
-               pDispSel->Release();
-       }
- 
-       // Open the file in Vim and position to the current line
-       if (VimOpenFile(FileName, LineNr))
-       {
-               if (! g_bDevStudioEditor)
-               {
-                       // Close the document in developer studio
-                       CComVariant vSaveChanges = dsSaveChangesPrompt;
-                       DsSaveStatus Saved;
- 
-                       pDoc->Close(vSaveChanges, &Saved);
-               }
-       }
- 
-       // We're done here
-       SysFreeString(FileName);
-       return S_OK;
- }
- 
- HRESULT CCommands::XApplicationEvents::BeforeDocumentClose(IDispatch * 
theDocument)
- {
-       AFX_MANAGE_STATE(AfxGetStaticModuleState());
-       return S_OK;
- }
- 
- HRESULT CCommands::XApplicationEvents::DocumentSave(IDispatch * theDocument)
- {
-       AFX_MANAGE_STATE(AfxGetStaticModuleState());
-       return S_OK;
- }
- 
- HRESULT CCommands::XApplicationEvents::NewDocument(IDispatch * theDocument)
- {
-       AFX_MANAGE_STATE(AfxGetStaticModuleState());
- 
-       if (! g_bEnableVim)
-               // Vim not enabled or empty command line entered
-               return S_OK;
- 
-       // First get the current file name and line number
- 
-       CComQIPtr < ITextDocument, &IID_ITextDocument > pDoc(theDocument);
-       if (! pDoc)
-               return S_OK;
- 
-       BSTR FileName;
-       HRESULT hr;
- 
-       hr = pDoc->get_FullName(&FileName);
-       if (FAILED(hr))
-               return S_OK;
- 
-       // Open the file in Vim and position to the current line
-       if (VimOpenFile(FileName, 0))
-       {
-               if (! g_bDevStudioEditor)
-               {
-                       // Close the document in developer studio
-                       CComVariant vSaveChanges = dsSaveChangesPrompt;
-                       DsSaveStatus Saved;
- 
-                       pDoc->Close(vSaveChanges, &Saved);
-               }
-       }
- 
-       SysFreeString(FileName);
-       return S_OK;
- }
- 
- HRESULT CCommands::XApplicationEvents::WindowActivate(IDispatch * theWindow)
- {
-       AFX_MANAGE_STATE(AfxGetStaticModuleState());
-       return S_OK;
- }
- 
- HRESULT CCommands::XApplicationEvents::WindowDeactivate(IDispatch * theWindow)
- {
-       AFX_MANAGE_STATE(AfxGetStaticModuleState());
-       return S_OK;
- }
- 
- HRESULT CCommands::XApplicationEvents::WorkspaceOpen()
- {
-       AFX_MANAGE_STATE(AfxGetStaticModuleState());
-       return S_OK;
- }
- 
- HRESULT CCommands::XApplicationEvents::WorkspaceClose()
- {
-       AFX_MANAGE_STATE(AfxGetStaticModuleState());
-       return S_OK;
- }
- 
- HRESULT CCommands::XApplicationEvents::NewWorkspace()
- {
-       AFX_MANAGE_STATE(AfxGetStaticModuleState());
-       return S_OK;
- }
- 
- // Debugger event
- 
- HRESULT CCommands::XDebuggerEvents::BreakpointHit(IDispatch * pBreakpoint)
- {
-       AFX_MANAGE_STATE(AfxGetStaticModuleState());
-       return S_OK;
- }
- 
- 
- /////////////////////////////////////////////////////////////////////////////
- // VisVim dialog
- 
- class CMainDialog : public CDialog
- {
-     public:
-       CMainDialog(CWnd * pParent = NULL);     // Standard constructor
- 
-       //{{AFX_DATA(CMainDialog)
-       enum { IDD = IDD_ADDINMAIN };
-       int     m_ChangeDir;
-       BOOL    m_bDevStudioEditor;
-       BOOL    m_bNewTabs;
-       //}}AFX_DATA
- 
-       //{{AFX_VIRTUAL(CMainDialog)
-     protected:
-       virtual void DoDataExchange(CDataExchange * pDX);       // DDX/DDV 
support
-       //}}AFX_VIRTUAL
- 
-     protected:
-       //{{AFX_MSG(CMainDialog)
-       afx_msg void OnEnable();
-       afx_msg void OnDisable();
-       //}}AFX_MSG
-       DECLARE_MESSAGE_MAP()
- };
- 
- CMainDialog::CMainDialog(CWnd * pParent /* =NULL */ )
-       : CDialog(CMainDialog::IDD, pParent)
- {
-       //{{AFX_DATA_INIT(CMainDialog)
-       m_ChangeDir = -1;
-       m_bDevStudioEditor = FALSE;
-       m_bNewTabs = FALSE;
-       //}}AFX_DATA_INIT
- }
- 
- void CMainDialog::DoDataExchange(CDataExchange * pDX)
- {
-       CDialog::DoDataExchange(pDX);
-       //{{AFX_DATA_MAP(CMainDialog)
-       DDX_Radio(pDX, IDC_CD_SOURCE_PATH, m_ChangeDir);
-       DDX_Check(pDX, IDC_DEVSTUDIO_EDITOR, m_bDevStudioEditor);
-       DDX_Check(pDX, IDC_NEW_TABS, m_bNewTabs);
-       //}}AFX_DATA_MAP
- }
- 
- BEGIN_MESSAGE_MAP(CMainDialog, CDialog)
-       //{{AFX_MSG_MAP(CMainDialog)
-       //}}AFX_MSG_MAP
- END_MESSAGE_MAP()
- 
- 
- /////////////////////////////////////////////////////////////////////////////
- // CCommands methods
- 
- STDMETHODIMP CCommands::VisVimDialog()
- {
-       AFX_MANAGE_STATE(AfxGetStaticModuleState());
- 
-       // Use m_pApplication to access the Developer Studio Application
-       // object,
-       // and VERIFY_OK to see error strings in DEBUG builds of your add-in
-       // (see stdafx.h)
- 
-       VERIFY_OK(m_pApplication->EnableModeless(VARIANT_FALSE));
- 
-       CMainDialog Dlg;
- 
-       Dlg.m_bDevStudioEditor = g_bDevStudioEditor;
-       Dlg.m_bNewTabs = g_bNewTabs;
-       Dlg.m_ChangeDir = g_ChangeDir;
-       if (Dlg.DoModal() == IDOK)
-       {
-               g_bDevStudioEditor = Dlg.m_bDevStudioEditor;
-               g_bNewTabs = Dlg.m_bNewTabs;
-               g_ChangeDir = Dlg.m_ChangeDir;
- 
-               // Save settings to registry 
HKEY_CURRENT_USER\Software\Vim\VisVim
-               HKEY hAppKey = GetAppKey("Vim");
-               if (hAppKey)
-               {
-                       HKEY hSectionKey = GetSectionKey(hAppKey, "VisVim");
-                       if (hSectionKey)
-                       {
-                               WriteRegistryInt(hSectionKey, "DevStudioEditor",
-                                                 g_bDevStudioEditor);
-                               WriteRegistryInt(hSectionKey, "NewTabs",
-                                                 g_bNewTabs);
-                               WriteRegistryInt(hSectionKey, "ChangeDir", 
g_ChangeDir);
-                               RegCloseKey(hSectionKey);
-                       }
-                       RegCloseKey(hAppKey);
-               }
-       }
- 
-       VERIFY_OK(m_pApplication->EnableModeless(VARIANT_TRUE));
-       return S_OK;
- }
- 
- STDMETHODIMP CCommands::VisVimEnable()
- {
-       AFX_MANAGE_STATE(AfxGetStaticModuleState());
-       VimSetEnableState(true);
-       return S_OK;
- }
- 
- STDMETHODIMP CCommands::VisVimDisable()
- {
-       AFX_MANAGE_STATE(AfxGetStaticModuleState());
-       VimSetEnableState(false);
-       return S_OK;
- }
- 
- STDMETHODIMP CCommands::VisVimToggle()
- {
-       AFX_MANAGE_STATE(AfxGetStaticModuleState());
-       VimSetEnableState(! g_bEnableVim);
-       return S_OK;
- }
- 
- STDMETHODIMP CCommands::VisVimLoad()
- {
-       AFX_MANAGE_STATE(AfxGetStaticModuleState());
- 
-       // Use m_pApplication to access the Developer Studio Application object,
-       // and VERIFY_OK to see error strings in DEBUG builds of your add-in
-       // (see stdafx.h)
- 
-       CComBSTR bStr;
-       // Define dispatch pointers for document and selection objects
-       CComPtr < IDispatch > pDispDoc, pDispSel;
- 
-       // Get a document object dispatch pointer
-       VERIFY_OK(m_pApplication->get_ActiveDocument(&pDispDoc));
-       if (! pDispDoc)
-               return S_OK;
- 
-       BSTR FileName;
-       long LineNr = -1;
- 
-       // Get the document object
-       CComQIPtr < ITextDocument, &IID_ITextDocument > pDoc(pDispDoc);
- 
-       if (! pDoc)
-               return S_OK;
- 
-       // Get the document name
-       if (FAILED(pDoc->get_FullName(&FileName)))
-               return S_OK;
- 
-       // Get a selection object dispatch pointer
-       if (SUCCEEDED(pDoc->get_Selection(&pDispSel)))
-       {
-               // Get the selection object
-               CComQIPtr < ITextSelection, &IID_ITextSelection > 
pSel(pDispSel);
- 
-               if (pSel)
-                       // Get the selection line number
-                       pSel->get_CurrentLine(&LineNr);
-       }
- 
-       // Open the file in Vim
-       VimOpenFile(FileName, LineNr);
- 
-       SysFreeString(FileName);
-       return S_OK;
- }
- 
- 
- //
- // Here we do the actual processing and communication with Vim
- //
- 
- // Set the enable state and save to registry
- //
- static void VimSetEnableState(BOOL bEnableState)
- {
-       g_bEnableVim = bEnableState;
-       HKEY hAppKey = GetAppKey("Vim");
-       if (hAppKey)
-       {
-               HKEY hSectionKey = GetSectionKey(hAppKey, "VisVim");
-               if (hSectionKey)
-                       WriteRegistryInt(hSectionKey, "EnableVim", 
g_bEnableVim);
-               RegCloseKey(hAppKey);
-       }
- }
- 
- // Open the file 'FileName' in Vim and goto line 'LineNr'
- // 'FileName' is expected to contain an absolute DOS path including the drive
- // letter.
- // 'LineNr' must contain a valid line number or 0, e. g. for a new file
- //
- static BOOL VimOpenFile(BSTR& FileName, long LineNr)
- {
- 
-       // OLE automation object for com. with Vim
-       // When the object goes out of scope, its destructor destroys the OLE
-       // connection;
-       // This is important to avoid blocking the object
-       // (in this memory corruption would be likely when terminating Vim
-       // while still running DevStudio).
-       // So keep this object local!
-       COleAutomationControl VimOle;
- 
-       // :cd D:/Src2/VisVim/
-       //
-       // Get a dispatch id for the SendKeys method of Vim;
-       // enables connection to Vim if necessary
-       DISPID DispatchId;
-       DispatchId = VimGetDispatchId(VimOle, "SendKeys");
-       if (! DispatchId)
-               // OLE error, can't obtain dispatch id
-               goto OleError;
- 
-       OLECHAR Buf[MAX_OLE_STR];
-       char FileNameTmp[MAX_OLE_STR];
-       char VimCmd[MAX_OLE_STR];
-       char *s, *p;
- 
-       // Prepend CTRL-\ CTRL-N to exit insert mode
-       VimCmd[0] = 0x1c;
-       VimCmd[1] = 0x0e;
-       VimCmd[2] = 0;
- 
- #ifdef SINGLE_WINDOW
-       // Update the current file in Vim if it has been modified.
-       // Disabled, because it could write the file when you don't want to.
-       sprintf(VimCmd + 2, ":up\n");
- #endif
-       if (! VimOle.Method(DispatchId, "s", TO_OLE_STR_BUF(VimCmd, Buf)))
-               goto OleError;
- 
-       // Change Vim working directory to where the file is if desired
-       if (g_ChangeDir != CD_NONE)
-               VimChangeDir(VimOle, DispatchId, FileName);
- 
-       // Make Vim open the file.
-       // In the filename convert all \ to /, put a \ before a space.
-       if (g_bNewTabs)
-       {
-               sprintf(VimCmd, ":tab drop ");
-               s = VimCmd + 10;
-       }
-       else
-       {
-               sprintf(VimCmd, ":drop ");
-               s = VimCmd + 6;
-       }
-       sprintf(FileNameTmp, "%S", (char *)FileName);
-       for (p = FileNameTmp; *p != '\0' && s < VimCmd + MAX_OLE_STR - 4; ++p)
-               if (*p == '\\')
-                       *s++ = '/';
-               else
-               {
-                       if (*p == ' ')
-                               *s++ = '\\';
-                       *s++ = *p;
-               }
-       *s++ = '\n';
-       *s = '\0';
- 
-       if (! VimOle.Method(DispatchId, "s", TO_OLE_STR_BUF(VimCmd, Buf)))
-               goto OleError;
- 
-       if (LineNr > 0)
-       {
-               // Goto line
-               sprintf(VimCmd, ":%ld\n", LineNr);
-               if (! VimOle.Method(DispatchId, "s", TO_OLE_STR_BUF(VimCmd, 
Buf)))
-                       goto OleError;
-       }
- 
-       // Make Vim come to the foreground
-       if (! VimOle.Method("SetForeground"))
-               VimOle.ErrDiag();
- 
-       // We're done
-       return true;
- 
-     OleError:
-       // There was an OLE error
-       // Check if it's the "unknown class string" error
-       VimErrDiag(VimOle);
-       return false;
- }
- 
- // Return the dispatch id for the Vim method 'Method'
- // Create the Vim OLE object if necessary
- // Returns a valid dispatch id or null on error
- //
- static DISPID VimGetDispatchId(COleAutomationControl& VimOle, char* Method)
- {
-       // Initialize Vim OLE connection if not already done
-       if (! VimOle.IsCreated())
-       {
-               if (! VimOle.CreateObject("Vim.Application"))
-                       return NULL;
-       }
- 
-       // Get the dispatch id for the SendKeys method.
-       // By doing this, we are checking if Vim is still there...
-       DISPID DispatchId = VimOle.GetDispatchId("SendKeys");
-       if (! DispatchId)
-       {
-               // We can't get a dispatch id.
-               // This means that probably Vim has been terminated.
-               // Don't issue an error message here, instead
-               // destroy the OLE object and try to connect once more
-               //
-               // In fact, this should never happen, because the OLE aut. 
object
-               // should not be kept long enough to allow the user to 
terminate Vim
-               // to avoid memory corruption (why the heck is there no system 
garbage
-               // collection for those damned OLE memory chunks???).
-               VimOle.DeleteObject();
-               if (! VimOle.CreateObject("Vim.Application"))
-                       // If this create fails, it's time for an error msg
-                       return NULL;
- 
-               if (! (DispatchId = VimOle.GetDispatchId("SendKeys")))
-                       // There is something wrong...
-                       return NULL;
-       }
- 
-       return DispatchId;
- }
- 
- // Output an error message for an OLE error
- // Check on the classstring error, which probably means Vim wasn't registered.
- //
- static void VimErrDiag(COleAutomationControl& VimOle)
- {
-       SCODE sc = GetScode(VimOle.GetResult());
-       if (sc == CO_E_CLASSSTRING)
-       {
-               char Buf[256];
-               sprintf(Buf, "There is no registered OLE automation server 
named "
-                        "\"Vim.Application\".\n"
-                        "Use the OLE-enabled version of Vim with VisVim and "
-                        "make sure to register Vim by running \"vim 
-register\".");
-               MessageBox(NULL, Buf, "OLE Error", MB_OK);
-       }
-       else
-               VimOle.ErrDiag();
- }
- 
- // Change directory to the directory the file 'FileName' is in or its parent
- // directory according to the setting of the global 'g_ChangeDir':
- // 'FileName' is expected to contain an absolute DOS path including the drive
- // letter.
- //    CD_NONE
- //    CD_SOURCE_PATH
- //    CD_SOURCE_PARENT
- //
- static void VimChangeDir(COleAutomationControl& VimOle, DISPID DispatchId, 
BSTR& FileName)
- {
-       // Do a :cd first
- 
-       // Get the path name of the file ("dir/")
-       CString StrFileName = FileName;
-       char Drive[_MAX_DRIVE];
-       char Dir[_MAX_DIR];
-       char DirUnix[_MAX_DIR * 2];
-       char *s, *t;
- 
-       _splitpath(StrFileName, Drive, Dir, NULL, NULL);
- 
-       // Convert to Unix path name format, escape spaces.
-       t = DirUnix;
-       for (s = Dir; *s; ++s)
-               if (*s == '\\')
-                       *t++ = '/';
-               else
-               {
-                       if (*s == ' ')
-                               *t++ = '\\';
-                       *t++ = *s;
-               }
-       *t = '\0';
- 
- 
-       // Construct the cd command; append /.. if cd to parent
-       // directory and not in root directory
-       OLECHAR Buf[MAX_OLE_STR];
-       char VimCmd[MAX_OLE_STR];
- 
-       sprintf(VimCmd, ":cd %s%s%s\n", Drive, DirUnix,
-                g_ChangeDir == CD_SOURCE_PARENT && DirUnix[1] ? ".." : "");
-       VimOle.Method(DispatchId, "s", TO_OLE_STR_BUF(VimCmd, Buf));
- }
- 
- #ifdef _DEBUG
- // Print out a debug message
- //
- static void DebugMsg(char* Msg, char* Arg)
- {
-       char Buf[400];
-       sprintf(Buf, Msg, Arg);
-       AfxMessageBox(Buf);
- }
- #endif
--- 0 ----
*** ../vim-9.0.0697/src/VisVim/Commands.h       2010-05-15 12:04:08.000000000 
+0100
--- src/VisVim/Commands.h       1970-01-01 00:00:00.000000000 +0000
***************
*** 1,127 ****
- // Commands.h : header file
- //
- 
- #if !defined(AFX_COMMANDS_H__AC726717_2977_11D1_B2F3_006008040780__INCLUDED_)
- #define AFX_COMMANDS_H__AC726717_2977_11D1_B2F3_006008040780__INCLUDED_
- 
- #include "vsvtypes.h"
- 
- class CCommands :
-       public   CComDualImpl < ICommands,
-                                &IID_ICommands,
-                                &LIBID_VisVim >,
-       public   CComObjectRoot,
-       public   CComCoClass < CCommands,
-                                &CLSID_Commands >
- {
-     protected:
-       IApplication * m_pApplication;
- 
-     public:
-       CCommands ();
-       ~CCommands ();
-       void SetApplicationObject (IApplication * m_pApplication);
-       IApplication *GetApplicationObject ()
-       {
-               return m_pApplication;
-       }
-       void UnadviseFromEvents ();
- 
-       BEGIN_COM_MAP (CCommands)
-       COM_INTERFACE_ENTRY (IDispatch)
-       COM_INTERFACE_ENTRY (ICommands)
-       END_COM_MAP ()
-       DECLARE_NOT_AGGREGATABLE (CCommands)
- 
-     protected:
-       // This class template is used as the base class for the Application
-       // event handler object and the Debugger event handler object,
-       // which are declared below.
-       template < class IEvents,
-               const IID * piidEvents,
-               const GUID * plibid,
-               class XEvents,
-               const CLSID * pClsidEvents >
-               class XEventHandler :
-               public        CComDualImpl < IEvents,
-                             piidEvents,
-                             plibid >,
-               public        CComObjectRoot,
-               public        CComCoClass < XEvents,
-                             pClsidEvents >
-       {
-           public:
-               BEGIN_COM_MAP (XEvents)
-               COM_INTERFACE_ENTRY (IDispatch)
-               COM_INTERFACE_ENTRY_IID (*piidEvents, IEvents)
-               END_COM_MAP ()
-               DECLARE_NOT_AGGREGATABLE (XEvents)
-               void Connect (IUnknown * pUnk)
-               {
-                       VERIFY (SUCCEEDED (AtlAdvise (pUnk, this, *piidEvents,
-                                                     &m_dwAdvise)));
-               }
-               void Disconnect (IUnknown * pUnk)
-               {
-                       AtlUnadvise (pUnk, *piidEvents, m_dwAdvise);
-               }
- 
-               CCommands *m_pCommands;
- 
-           protected:
-               DWORD m_dwAdvise;
-       };
- 
-       // This object handles events fired by the Application object
-       class XApplicationEvents : public XEventHandler < IApplicationEvents,
-                       &IID_IApplicationEvents,
-                       &LIBID_VisVim,
-                       XApplicationEvents,
-                       &CLSID_ApplicationEvents >
-       {
-           public:
-               // IApplicationEvents methods
-               STDMETHOD (BeforeBuildStart) (THIS);
-               STDMETHOD (BuildFinish) (THIS_ long nNumErrors, long 
nNumWarnings);
-               STDMETHOD (BeforeApplicationShutDown) (THIS);
-               STDMETHOD (DocumentOpen) (THIS_ IDispatch * theDocument);
-               STDMETHOD (BeforeDocumentClose) (THIS_ IDispatch * theDocument);
-               STDMETHOD (DocumentSave) (THIS_ IDispatch * theDocument);
-               STDMETHOD (NewDocument) (THIS_ IDispatch * theDocument);
-               STDMETHOD (WindowActivate) (THIS_ IDispatch * theWindow);
-               STDMETHOD (WindowDeactivate) (THIS_ IDispatch * theWindow);
-               STDMETHOD (WorkspaceOpen) (THIS);
-               STDMETHOD (WorkspaceClose) (THIS);
-               STDMETHOD (NewWorkspace) (THIS);
-       };
-       typedef CComObject < XApplicationEvents > XApplicationEventsObj;
-       XApplicationEventsObj *m_pApplicationEventsObj;
- 
-       // This object handles events fired by the Application object
-       class XDebuggerEvents : public XEventHandler < IDebuggerEvents,
-                       &IID_IDebuggerEvents,
-                       &LIBID_VisVim,
-                       XDebuggerEvents,
-                       &CLSID_DebuggerEvents >
-       {
-           public:
-               // IDebuggerEvents method
-               STDMETHOD (BreakpointHit) (THIS_ IDispatch * pBreakpoint);
-       };
-       typedef CComObject < XDebuggerEvents > XDebuggerEventsObj;
-       XDebuggerEventsObj *m_pDebuggerEventsObj;
- 
-     public:
-       // ICommands methods
-       STDMETHOD (VisVimDialog) (THIS);
-       STDMETHOD (VisVimEnable) (THIS);
-       STDMETHOD (VisVimDisable) (THIS);
-       STDMETHOD (VisVimToggle) (THIS);
-       STDMETHOD (VisVimLoad) (THIS);
- };
- 
- typedef CComObject < CCommands > CCommandsObj;
- 
- //{{AFX_INSERT_LOCATION}}
- 
- #endif // 
!defined(AFX_COMMANDS_H__AC726717_2977_11D1_B2F3_006008040780__INCLUDED)
--- 0 ----
*** ../vim-9.0.0697/src/VisVim/DSAddIn.cpp      2010-05-15 12:04:08.000000000 
+0100
--- src/VisVim/DSAddIn.cpp      1970-01-01 00:00:00.000000000 +0000
***************
*** 1,160 ****
- #include "stdafx.h"
- #include "VisVim.h"
- #include "DSAddIn.h"
- #include "Commands.h"
- 
- #ifdef _DEBUG
- #define new DEBUG_NEW
- #undef THIS_FILE
- static char THIS_FILE[] = __FILE__;
- 
- #endif
- 
- // This is called when the user first loads the add-in, and on start-up
- //  of each subsequent Developer Studio session
- STDMETHODIMP CDSAddIn::OnConnection (IApplication * pApp, VARIANT_BOOL 
bFirstTime,
-                                    long dwCookie, VARIANT_BOOL * OnConnection)
- {
-       AFX_MANAGE_STATE (AfxGetStaticModuleState ());
-       *OnConnection = VARIANT_FALSE;
- 
-       // Store info passed to us
-       IApplication *pApplication = NULL;
-       HRESULT hr;
- 
-       hr = pApp->QueryInterface (IID_IApplication, (void **) &pApplication);
-       if (FAILED (hr))
-       {
-               ReportLastError (hr);
-               return E_UNEXPECTED;
-       }
-       if (pApplication == NULL)
-       {
-               ReportInternalError ("IApplication::QueryInterface");
-               return E_UNEXPECTED;
-       }
- 
-       m_dwCookie = dwCookie;
- 
-       // Create command dispatch, send info back to DevStudio
-       CCommandsObj::CreateInstance (&m_pCommands);
-       if (! m_pCommands)
-       {
-               ReportInternalError ("CCommandsObj::CreateInstance");
-               return E_UNEXPECTED;
-       }
-       m_pCommands->AddRef ();
- 
-       // The QueryInterface above AddRef'd the Application object.  It will
-       // be Release'd in CCommand's destructor.
-       m_pCommands->SetApplicationObject (pApplication);
- 
-       hr = pApplication->SetAddInInfo ((long) AfxGetInstanceHandle (),
-               (LPDISPATCH) m_pCommands, IDR_TOOLBAR_MEDIUM, IDR_TOOLBAR_LARGE,
-               m_dwCookie);
-       if (FAILED (hr))
-       {
-               ReportLastError (hr);
-               return E_UNEXPECTED;
-       }
- 
-       // Inform DevStudio of the commands we implement
-       if (! AddCommand (pApplication, "VisVimDialog", "VisVimDialogCmd",
-                         IDS_CMD_DIALOG, 0, bFirstTime))
-               return E_UNEXPECTED;
-       if (! AddCommand (pApplication, "VisVimEnable", "VisVimEnableCmd",
-                         IDS_CMD_ENABLE, 1, bFirstTime))
-               return E_UNEXPECTED;
-       if (! AddCommand (pApplication, "VisVimDisable", "VisVimDisableCmd",
-                         IDS_CMD_DISABLE, 2, bFirstTime))
-               return E_UNEXPECTED;
-       if (! AddCommand (pApplication, "VisVimToggle", "VisVimToggleCmd",
-                         IDS_CMD_TOGGLE, 3, bFirstTime))
-               return E_UNEXPECTED;
-       if (! AddCommand (pApplication, "VisVimLoad", "VisVimLoadCmd",
-                         IDS_CMD_LOAD, 4, bFirstTime))
-               return E_UNEXPECTED;
- 
-       *OnConnection = VARIANT_TRUE;
-       return S_OK;
- }
- 
- // This is called on shut-down, and also when the user unloads the add-in
- STDMETHODIMP CDSAddIn::OnDisconnection (VARIANT_BOOL bLastTime)
- {
-       AFX_MANAGE_STATE (AfxGetStaticModuleState ());
- 
-       m_pCommands->UnadviseFromEvents ();
-       m_pCommands->Release ();
-       m_pCommands = NULL;
- 
-       return S_OK;
- }
- 
- // Add a command to DevStudio
- // Creates a toolbar button for the command also.
- // 'MethodName' is the name of the method specified in the .odl file
- // 'StrResId' the resource id of the descriptive string
- // 'GlyphIndex' the image index into the command buttons bitmap
- // Return true on success
- //
- bool CDSAddIn::AddCommand (IApplication* pApp, char* MethodName, char* 
CmdName,
-                          UINT StrResId, UINT GlyphIndex, VARIANT_BOOL 
bFirstTime)
- {
-       CString CmdString;
-       CString CmdText;
- 
-       CmdText.LoadString (StrResId);
-       CmdString = CmdName;
-       CmdString += CmdText;
- 
-       CComBSTR bszCmdString (CmdString);
-       CComBSTR bszMethod (MethodName);
-       CComBSTR bszCmdName (CmdName);
- 
-       // (see stdafx.h for the definition of VERIFY_OK)
- 
-       VARIANT_BOOL bRet;
-       VERIFY_OK (pApp->AddCommand (bszCmdString, bszMethod, GlyphIndex,
-                                    m_dwCookie, &bRet));
-       if (bRet == VARIANT_FALSE)
-       {
-               // AddCommand failed because a command with this name already 
exists.
-               ReportInternalError ("IApplication::AddCommand");
-               return FALSE;
-       }
- 
-       // Add toolbar buttons only if this is the first time the add-in
-       // is being loaded.  Toolbar buttons are automatically remembered
-       // by Developer Studio from session to session, so we should only
-       // add the toolbar buttons once.
-       if (bFirstTime == VARIANT_TRUE)
-               VERIFY_OK (pApp->AddCommandBarButton (dsGlyph, bszCmdName, 
m_dwCookie));
- 
-       return TRUE;
- }
- 
- void ReportLastError (HRESULT Err)
- {
-       char *Buf = NULL;
-       char Msg[512];
- 
-       FormatMessage (FORMAT_MESSAGE_FROM_SYSTEM | 
FORMAT_MESSAGE_ALLOCATE_BUFFER,
-                      NULL, Err,
-                      MAKELANGID (LANG_NEUTRAL, SUBLANG_DEFAULT),
-                      Buf, 400, NULL);
-       sprintf (Msg, "Unexpected error (Error code: %lx)\n%s", Err, Buf);
- 
-       ::MessageBox (NULL, Msg, "VisVim", MB_OK | MB_ICONSTOP);
-       if (Buf)
-               LocalFree (Buf);
- }
- 
- void ReportInternalError (char* Fct)
- {
-       char Msg[512];
- 
-       sprintf (Msg, "Unexpected error\n%s failed", Fct);
-       ::MessageBox (NULL, Msg, "VisVim", MB_OK | MB_ICONSTOP);
- }
- 
--- 0 ----
*** ../vim-9.0.0697/src/VisVim/DSAddIn.h        2010-05-15 12:04:08.000000000 
+0100
--- src/VisVim/DSAddIn.h        1970-01-01 00:00:00.000000000 +0000
***************
*** 1,53 ****
- // DSAddIn.h : header file
- //
- 
- #if !defined(AFX_DSADDIN_H__AC726715_2977_11D1_B2F3_006008040780__INCLUDED_)
- #define AFX_DSADDIN_H__AC726715_2977_11D1_B2F3_006008040780__INCLUDED_
- 
- #include "commands.h"
- 
- // {4F9E01C0-406B-11d2-8006-00001C405077}
- DEFINE_GUID (CLSID_DSAddIn,
-       0x4f9e01c0, 0x406b, 0x11d2, 0x80, 0x6, 0x0, 0x0, 0x1c, 0x40, 0x50, 
0x77);
- 
- /////////////////////////////////////////////////////////////////////////////
- // CDSAddIn
- 
- class CDSAddIn :
-       public   IDSAddIn,
-       public   CComObjectRoot,
-       public   CComCoClass < CDSAddIn,
-                &CLSID_DSAddIn >
- {
-     public:
-       DECLARE_REGISTRY (CDSAddIn, "VisVim.DSAddIn.1",
-                         "VisVim Developer Studio Add-in", IDS_VISVIM_LONGNAME,
-                         THREADFLAGS_BOTH)
- 
-       CDSAddIn ()
-       {
-       }
- 
-       BEGIN_COM_MAP (CDSAddIn)
-       COM_INTERFACE_ENTRY (IDSAddIn)
-       END_COM_MAP ()
-       DECLARE_NOT_AGGREGATABLE (CDSAddIn)
- 
-       // IDSAddIns
-     public:
-       STDMETHOD (OnConnection) (THIS_ IApplication * pApp, VARIANT_BOOL 
bFirstTime,
-                                 long dwCookie, VARIANT_BOOL * OnConnection);
-       STDMETHOD (OnDisconnection) (THIS_ VARIANT_BOOL bLastTime);
- 
-     protected:
-       bool AddCommand (IApplication* pApp, char* MethodName, char* CmdName,
-                        UINT StrResId, UINT GlyphIndex, VARIANT_BOOL 
bFirstTime);
- 
-     protected:
-       CCommandsObj * m_pCommands;
-       DWORD m_dwCookie;
- };
- 
- //{{AFX_INSERT_LOCATION}}
- 
- #endif // 
!defined(AFX_DSADDIN_H__AC726715_2977_11D1_B2F3_006008040780__INCLUDED)
--- 0 ----
*** ../vim-9.0.0697/src/VisVim/OleAut.cpp       2019-04-17 17:26:51.000000000 
+0100
--- src/VisVim/OleAut.cpp       1970-01-01 00:00:00.000000000 +0000
***************
*** 1,781 ****
- //
- // Class for creating OLE automation controllers.
- //
- // CreateObject() creates an automation object
- // Invoke() will call a property or method of the automation object.
- // GetProperty() returns a property
- // SetProperty() changes a property
- // Method() invokes a method
- //
- // For example, the following VB code will control Microsoft Word:
- //
- //    Private Sub Form_Load()
- //    Dim wb As Object
- //    Set wb = CreateObject("Word.Basic")
- //    wb.AppShow
- //    wb.FileNewDefault
- //    wb.Insert "This is a test"
- //    wb.FileSaveAs "c:\sample.doc)"
- //    End Sub
- //
- // A C++ automation controller that does the same can be written as follows:
- // the helper functions:
- //
- //   Void FormLoad ()
- //   {
- //       COleAutomationControl Aut;
- //       Aut.CreateObject("Word.Basic");
- //       Aut.Method ("AppShow");
- //       Aut.Method ("FileNewDefault");
- //       Aut.Method ("Insert", "s", (LPOLESTR) OLESTR ("This is a test"));
- //       Aut.Method ("FileSaveAs", "s", OLESTR ("c:\\sample.doc"));
- //   }
- //
- //
- 
- #include "stdafx.h"
- #include <stdarg.h>
- #include "oleaut.h"
- 
- #ifdef _DEBUG
- #define new DEBUG_NEW
- #undef THIS_FILE
- static char THIS_FILE[] = __FILE__;
- #endif
- 
- 
- static bool CountArgsInFormat (LPCTSTR Format, UINT* nArgs);
- static LPCTSTR GetNextVarType (LPCTSTR Format, VARTYPE* pVarType);
- 
- 
- COleAutomationControl::COleAutomationControl ()
- {
-       m_pDispatch = NULL;
-       m_hResult = NOERROR;
-       m_nErrArg = 0;
-       VariantInit (&m_VariantResult);
- }
- 
- COleAutomationControl::~COleAutomationControl ()
- {
-       DeleteObject ();
- }
- 
- void COleAutomationControl::DeleteObject ()
- {
-       if (m_pDispatch)
-       {
-               m_pDispatch->Release ();
-               m_pDispatch = NULL;
-       }
- }
- 
- // Creates an instance of the Automation object and
- // obtains its IDispatch interface.
- //
- // Parameters:
- // ProgId       ProgID of Automation object
- //
- bool COleAutomationControl::CreateObject (char* ProgId)
- {
-       CLSID ClsId;                    // CLSID of automation object
-       LPUNKNOWN pUnknown = NULL;      // IUnknown of automation object
- 
-       // Retrieve CLSID from the progID that the user specified
-       LPOLESTR OleProgId = TO_OLE_STR (ProgId);
-       m_hResult = CLSIDFromProgID (OleProgId, &ClsId);
-       if (FAILED (m_hResult))
-               goto error;
- 
-       // Create an instance of the automation object and ask for the
-       // IDispatch interface
-       m_hResult = CoCreateInstance (ClsId, NULL, CLSCTX_SERVER,
-                              IID_IUnknown, (void**) &pUnknown);
-       if (FAILED (m_hResult))
-               goto error;
- 
-       m_hResult = pUnknown->QueryInterface (IID_IDispatch, (void**) 
&m_pDispatch);
-       if (FAILED (m_hResult))
-               goto error;
- 
-       pUnknown->Release ();
-       return true;
- 
- error:
-       if (pUnknown)
-               pUnknown->Release ();
-       if (m_pDispatch)
-               m_pDispatch->Release ();
-       return false;
- }
- 
- // Return the dispatch id of a named service
- // This id can be used in subsequent calls to GetProperty (), SetProperty () 
and
- // Method (). This is the preferred method when performance is important.
- //
- DISPID COleAutomationControl::GetDispatchId (char* Name)
- {
-       DISPID DispatchId;
- 
-       ASSERT (m_pDispatch);
- 
-       // Get DISPID of property/method
-       LPOLESTR OleName = TO_OLE_STR (Name);
-       m_hResult = m_pDispatch->GetIDsOfNames (IID_NULL, &OleName, 1,
-                                               LOCALE_USER_DEFAULT, 
&DispatchId);
-       if (FAILED (m_hResult))
-               return NULL;
-       return DispatchId;
- }
- 
- //  The following functions use these parameters:
- //
- // Parameters:
- //
- //  Name      Name of property or method.
- //
- //  Format    Format string that describes the variable list of parameters 
that
- //          follows. The format string can contain the following characters.
- //          & = mark the following format character as VT_BYREF
- //          B = VT_BOOL
- //          i = VT_I2
- //          I = VT_I4
- //          r = VT_R2
- //          R = VT_R4
- //          c = VT_CY
- //          s = VT_BSTR (string pointer can be passed,
- //                    BSTR will be allocated by this function).
- //          e = VT_ERROR
- //          d = VT_DATE
- //          v = VT_VARIANT. Use this to pass data types that are not described
- //                    in the format string. (For example SafeArrays).
- //          D = VT_DISPATCH
- //          U = VT_UNKNOWN
- //
- //  ...       Arguments of the property or method.
- //          Arguments are described by Format.
- //
- 
- bool COleAutomationControl::GetProperty (char* Name)
- {
-       return Invoke (DISPATCH_PROPERTYGET, Name, NULL, NULL);
- }
- 
- bool COleAutomationControl::GetProperty (DISPID DispatchId)
- {
-       return Invoke (DISPATCH_PROPERTYGET, DispatchId, NULL, NULL);
- }
- 
- bool COleAutomationControl::PutProperty (char* Name, LPCTSTR Format, ...)
- {
-       va_list ArgList;
- 
-       va_start (ArgList, Format);
-       bool bRet = Invoke (DISPATCH_PROPERTYPUT, Name, Format, ArgList);
-       va_end (ArgList);
-       return bRet;
- }
- 
- bool COleAutomationControl::PutProperty (DISPID DispatchId, LPCTSTR Format, 
...)
- {
-       va_list ArgList;
- 
-       va_start (ArgList, Format);
-       bool bRet = Invoke (DISPATCH_PROPERTYPUT, DispatchId, Format, ArgList);
-       va_end (ArgList);
-       return bRet;
- }
- 
- bool COleAutomationControl::Method (char* Name, LPCTSTR Format, ...)
- {
-       va_list ArgList;
- 
-       va_start (ArgList, Format);
-       bool bRet = Invoke (DISPATCH_METHOD, Name, Format, ArgList);
-       va_end (ArgList);
-       return bRet;
- }
- 
- bool COleAutomationControl::Method (DISPID DispatchId, LPCTSTR Format, ...)
- {
-       va_list ArgList;
- 
-       va_start (ArgList, Format);
-       bool bRet = Invoke (DISPATCH_METHOD, DispatchId, Format, ArgList);
-       va_end (ArgList);
-       return bRet;
- }
- 
- bool COleAutomationControl::Invoke (WORD Flags, char* Name,
-                                   LPCTSTR Format, va_list ArgList)
- {
-       DISPID DispatchId = GetDispatchId (Name);
-       if (! DispatchId)
-               return false;
-       return Invoke (Flags, DispatchId, Format, ArgList);
- }
- 
- bool COleAutomationControl::Invoke (WORD Flags, DISPID DispatchId,
-                                   LPCTSTR Format, va_list ArgList)
- {
-       UINT ArgCount = 0;
-       VARIANTARG* ArgVector = NULL;
- 
-       ASSERT (m_pDispatch);
- 
-       DISPPARAMS DispatchParams;
-       memset (&DispatchParams, 0, sizeof (DispatchParams));
- 
-       // Determine number of arguments
-       if (Format)
-               CountArgsInFormat (Format, &ArgCount);
- 
-       // Property puts have a named argument that represents the value that
-       // the property is being assigned.
-       DISPID DispIdNamed = DISPID_PROPERTYPUT;
-       if (Flags & DISPATCH_PROPERTYPUT)
-       {
-               if (ArgCount == 0)
-               {
-                       m_hResult = ResultFromScode (E_INVALIDARG);
-                       return false;
-               }
-               DispatchParams.cNamedArgs = 1;
-               DispatchParams.rgdispidNamedArgs = &DispIdNamed;
-       }
- 
-       if (ArgCount)
-       {
-               // Allocate memory for all VARIANTARG parameters
-               ArgVector = (VARIANTARG*) CoTaskMemAlloc (
-                               ArgCount * sizeof (VARIANTARG));
-               if (! ArgVector)
-               {
-                       m_hResult = ResultFromScode (E_OUTOFMEMORY);
-                       return false;
-               }
-               memset (ArgVector, 0, sizeof (VARIANTARG) * ArgCount);
- 
-               // Get ready to walk vararg list
-               LPCTSTR s = Format;
- 
-               VARIANTARG *p = ArgVector + ArgCount - 1;  // Params go in 
opposite order
- 
-               for (;;)
-               {
-                       VariantInit (p);
-                       if (! (s = GetNextVarType (s, &p->vt)))
-                               break;
- 
-                       if (p < ArgVector)
-                       {
-                               m_hResult = ResultFromScode (E_INVALIDARG);
-                               goto Cleanup;
-                       }
-                       switch (p->vt)
-                       {
-                           case VT_I2:
-                               V_I2 (p) = va_arg (ArgList, short);
-                               break;
-                           case VT_I4:
-                               V_I4 (p) = va_arg (ArgList, long);
-                               break;
-                           case VT_R4:
-                               V_R4 (p) = va_arg (ArgList, float);
-                               break;
-                           case VT_DATE:
-                           case VT_R8:
-                               V_R8 (p) = va_arg (ArgList, double);
-                               break;
-                           case VT_CY:
-                               V_CY (p) = va_arg (ArgList, CY);
-                               break;
-                           case VT_BSTR:
-                               V_BSTR (p) = SysAllocString (va_arg (ArgList,
-                                                                    OLECHAR*));
-                               if (! p->bstrVal)
-                               {
-                                       m_hResult = ResultFromScode 
(E_OUTOFMEMORY);
-                                       p->vt = VT_EMPTY;
-                                       goto Cleanup;
-                               }
-                               break;
-                           case VT_DISPATCH:
-                               V_DISPATCH (p) = va_arg (ArgList, LPDISPATCH);
-                               break;
-                           case VT_ERROR:
-                               V_ERROR (p) = va_arg (ArgList, SCODE);
-                               break;
-                           case VT_BOOL:
-                               V_BOOL (p) = va_arg (ArgList, BOOL) ? -1 : 0;
-                               break;
-                           case VT_VARIANT:
-                               *p = va_arg (ArgList, VARIANTARG);
-                               break;
-                           case VT_UNKNOWN:
-                               V_UNKNOWN (p) = va_arg (ArgList, LPUNKNOWN);
-                               break;
- 
-                           case VT_I2 | VT_BYREF:
-                               V_I2REF (p) = va_arg (ArgList, short*);
-                               break;
-                           case VT_I4 | VT_BYREF:
-                               V_I4REF (p) = va_arg (ArgList, long*);
-                               break;
-                           case VT_R4 | VT_BYREF:
-                               V_R4REF (p) = va_arg (ArgList, float*);
-                               break;
-                           case VT_R8 | VT_BYREF:
-                               V_R8REF (p) = va_arg (ArgList, double*);
-                               break;
-                           case VT_DATE | VT_BYREF:
-                               V_DATEREF (p) = va_arg (ArgList, DATE*);
-                               break;
-                           case VT_CY | VT_BYREF:
-                               V_CYREF (p) = va_arg (ArgList, CY*);
-                               break;
-                           case VT_BSTR | VT_BYREF:
-                               V_BSTRREF (p) = va_arg (ArgList, BSTR*);
-                               break;
-                           case VT_DISPATCH | VT_BYREF:
-                               V_DISPATCHREF (p) = va_arg (ArgList, 
LPDISPATCH*);
-                               break;
-                           case VT_ERROR | VT_BYREF:
-                               V_ERRORREF (p) = va_arg (ArgList, SCODE*);
-                               break;
-                           case VT_BOOL | VT_BYREF:
-                               {
-                                       BOOL* pBool = va_arg (ArgList, BOOL*);
- 
-                                       *pBool = 0;
-                                       V_BOOLREF (p) = (VARIANT_BOOL*) pBool;
-                               }
-                               break;
-                           case VT_VARIANT | VT_BYREF:
-                               V_VARIANTREF (p) = va_arg (ArgList, 
VARIANTARG*);
-                               break;
-                           case VT_UNKNOWN | VT_BYREF:
-                               V_UNKNOWNREF (p) = va_arg (ArgList, LPUNKNOWN*);
-                               break;
- 
-                           default:
-                               {
-                                       m_hResult = ResultFromScode 
(E_INVALIDARG);
-                                       goto Cleanup;
-                               }
-                               break;
-                       }
- 
-                       --p;    // Get ready to fill next argument
-               }
-       }
- 
-       DispatchParams.cArgs = ArgCount;
-       DispatchParams.rgvarg = ArgVector;
- 
-       // Initialize return variant, in case caller forgot. Caller can pass
-       // NULL if return value is not expected.
-       VariantInit (&m_VariantResult);
- 
-       // Make the call
-       m_hResult = m_pDispatch->Invoke (DispatchId, IID_NULL, 
LOCALE_USER_DEFAULT,
-                                        Flags, &DispatchParams, 
&m_VariantResult,
-                                        &m_ExceptionInfo, &m_nErrArg);
- 
-     Cleanup:
-       // Cleanup any arguments that need cleanup
-       if (ArgCount)
-       {
-               VARIANTARG* p = ArgVector;
- 
-               while (ArgCount--)
-               {
-                       switch (p->vt)
-                       {
-                           case VT_BSTR:
-                               VariantClear (p);
-                               break;
-                       }
-                       ++p;
-               }
-               CoTaskMemFree (ArgVector);
-       }
- 
-       return FAILED (m_hResult) ? false : true;
- }
- 
- #define CASE_SCODE(sc)  \
-       case sc: \
-       lstrcpy((char*)ErrName, (char*)#sc); \
-       break;
- 
- void COleAutomationControl::ErrDiag ()
- {
-       char ErrName[200];
- 
-       SCODE sc = GetScode (m_hResult);
-       switch (sc)
-       {
-           // SCODE's defined in SCODE.H
-           CASE_SCODE (S_OK)
-           CASE_SCODE (S_FALSE)
-           CASE_SCODE (E_UNEXPECTED)
-           CASE_SCODE (E_OUTOFMEMORY)
-           CASE_SCODE (E_INVALIDARG)
-           CASE_SCODE (E_NOINTERFACE)
-           CASE_SCODE (E_POINTER)
-           CASE_SCODE (E_HANDLE)
-           CASE_SCODE (E_ABORT)
-           CASE_SCODE (E_FAIL)
-           CASE_SCODE (E_ACCESSDENIED)
- 
-           // SCODE's defined in OLE2.H
-           CASE_SCODE (OLE_E_OLEVERB)
-           CASE_SCODE (OLE_E_ADVF)
-           CASE_SCODE (OLE_E_ENUM_NOMORE)
-           CASE_SCODE (OLE_E_ADVISENOTSUPPORTED)
-           CASE_SCODE (OLE_E_NOCONNECTION)
-           CASE_SCODE (OLE_E_NOTRUNNING)
-           CASE_SCODE (OLE_E_NOCACHE)
-           CASE_SCODE (OLE_E_BLANK)
-           CASE_SCODE (OLE_E_CLASSDIFF)
-           CASE_SCODE (OLE_E_CANT_GETMONIKER)
-           CASE_SCODE (OLE_E_CANT_BINDTOSOURCE)
-           CASE_SCODE (OLE_E_STATIC)
-           CASE_SCODE (OLE_E_PROMPTSAVECANCELLED)
-           CASE_SCODE (OLE_E_INVALIDRECT)
-           CASE_SCODE (OLE_E_WRONGCOMPOBJ)
-           CASE_SCODE (OLE_E_INVALIDHWND)
-           CASE_SCODE (OLE_E_NOT_INPLACEACTIVE)
-           CASE_SCODE (OLE_E_CANTCONVERT)
-           CASE_SCODE (OLE_E_NOSTORAGE)
- 
-           CASE_SCODE (DV_E_FORMATETC)
-           CASE_SCODE (DV_E_DVTARGETDEVICE)
-           CASE_SCODE (DV_E_STGMEDIUM)
-           CASE_SCODE (DV_E_STATDATA)
-           CASE_SCODE (DV_E_LINDEX)
-           CASE_SCODE (DV_E_TYMED)
-           CASE_SCODE (DV_E_CLIPFORMAT)
-           CASE_SCODE (DV_E_DVASPECT)
-           CASE_SCODE (DV_E_DVTARGETDEVICE_SIZE)
-           CASE_SCODE (DV_E_NOIVIEWOBJECT)
- 
-           CASE_SCODE (OLE_S_USEREG)
-           CASE_SCODE (OLE_S_STATIC)
-           CASE_SCODE (OLE_S_MAC_CLIPFORMAT)
- 
-           CASE_SCODE (CONVERT10_E_OLESTREAM_GET)
-           CASE_SCODE (CONVERT10_E_OLESTREAM_PUT)
-           CASE_SCODE (CONVERT10_E_OLESTREAM_FMT)
-           CASE_SCODE (CONVERT10_E_OLESTREAM_BITMAP_TO_DIB)
-           CASE_SCODE (CONVERT10_E_STG_FMT)
-           CASE_SCODE (CONVERT10_E_STG_NO_STD_STREAM)
-           CASE_SCODE (CONVERT10_E_STG_DIB_TO_BITMAP)
-           CASE_SCODE (CONVERT10_S_NO_PRESENTATION)
- 
-           CASE_SCODE (CLIPBRD_E_CANT_OPEN)
-           CASE_SCODE (CLIPBRD_E_CANT_EMPTY)
-           CASE_SCODE (CLIPBRD_E_CANT_SET)
-           CASE_SCODE (CLIPBRD_E_BAD_DATA)
-           CASE_SCODE (CLIPBRD_E_CANT_CLOSE)
- 
-           CASE_SCODE (DRAGDROP_E_NOTREGISTERED)
-           CASE_SCODE (DRAGDROP_E_ALREADYREGISTERED)
-           CASE_SCODE (DRAGDROP_E_INVALIDHWND)
-           CASE_SCODE (DRAGDROP_S_DROP)
-           CASE_SCODE (DRAGDROP_S_CANCEL)
-           CASE_SCODE (DRAGDROP_S_USEDEFAULTCURSORS)
- 
-           CASE_SCODE (OLEOBJ_E_NOVERBS)
-           CASE_SCODE (OLEOBJ_E_INVALIDVERB)
-           CASE_SCODE (OLEOBJ_S_INVALIDVERB)
-           CASE_SCODE (OLEOBJ_S_CANNOT_DOVERB_NOW)
-           CASE_SCODE (OLEOBJ_S_INVALIDHWND)
-           CASE_SCODE (INPLACE_E_NOTUNDOABLE)
-           CASE_SCODE (INPLACE_E_NOTOOLSPACE)
-           CASE_SCODE (INPLACE_S_TRUNCATED)
- 
-           // SCODE's defined in COMPOBJ.H
-           CASE_SCODE (CO_E_NOTINITIALIZED)
-           CASE_SCODE (CO_E_ALREADYINITIALIZED)
-           CASE_SCODE (CO_E_CANTDETERMINECLASS)
-           CASE_SCODE (CO_E_CLASSSTRING)
-           CASE_SCODE (CO_E_IIDSTRING)
-           CASE_SCODE (CO_E_APPNOTFOUND)
-           CASE_SCODE (CO_E_APPSINGLEUSE)
-           CASE_SCODE (CO_E_ERRORINAPP)
-           CASE_SCODE (CO_E_DLLNOTFOUND)
-           CASE_SCODE (CO_E_ERRORINDLL)
-           CASE_SCODE (CO_E_WRONGOSFORAPP)
-           CASE_SCODE (CO_E_OBJNOTREG)
-           CASE_SCODE (CO_E_OBJISREG)
-           CASE_SCODE (CO_E_OBJNOTCONNECTED)
-           CASE_SCODE (CO_E_APPDIDNTREG)
-           CASE_SCODE (CLASS_E_NOAGGREGATION)
-           CASE_SCODE (CLASS_E_CLASSNOTAVAILABLE)
-           CASE_SCODE (REGDB_E_READREGDB)
-           CASE_SCODE (REGDB_E_WRITEREGDB)
-           CASE_SCODE (REGDB_E_KEYMISSING)
-           CASE_SCODE (REGDB_E_INVALIDVALUE)
-           CASE_SCODE (REGDB_E_CLASSNOTREG)
-           CASE_SCODE (REGDB_E_IIDNOTREG)
-           CASE_SCODE (RPC_E_CALL_REJECTED)
-           CASE_SCODE (RPC_E_CALL_CANCELED)
-           CASE_SCODE (RPC_E_CANTPOST_INSENDCALL)
-           CASE_SCODE (RPC_E_CANTCALLOUT_INASYNCCALL)
-           CASE_SCODE (RPC_E_CANTCALLOUT_INEXTERNALCALL)
-           CASE_SCODE (RPC_E_CONNECTION_TERMINATED)
-           CASE_SCODE (RPC_E_SERVER_DIED)
-           CASE_SCODE (RPC_E_CLIENT_DIED)
-           CASE_SCODE (RPC_E_INVALID_DATAPACKET)
-           CASE_SCODE (RPC_E_CANTTRANSMIT_CALL)
-           CASE_SCODE (RPC_E_CLIENT_CANTMARSHAL_DATA)
-           CASE_SCODE (RPC_E_CLIENT_CANTUNMARSHAL_DATA)
-           CASE_SCODE (RPC_E_SERVER_CANTMARSHAL_DATA)
-           CASE_SCODE (RPC_E_SERVER_CANTUNMARSHAL_DATA)
-           CASE_SCODE (RPC_E_INVALID_DATA)
-           CASE_SCODE (RPC_E_INVALID_PARAMETER)
-           CASE_SCODE (RPC_E_CANTCALLOUT_AGAIN)
-           CASE_SCODE (RPC_E_UNEXPECTED)
- 
-           // SCODE's defined in DVOBJ.H
-           CASE_SCODE (DATA_S_SAMEFORMATETC)
-           CASE_SCODE (VIEW_E_DRAW)
-           CASE_SCODE (VIEW_S_ALREADY_FROZEN)
-           CASE_SCODE (CACHE_E_NOCACHE_UPDATED)
-           CASE_SCODE (CACHE_S_FORMATETC_NOTSUPPORTED)
-           CASE_SCODE (CACHE_S_SAMECACHE)
-           CASE_SCODE (CACHE_S_SOMECACHES_NOTUPDATED)
- 
-           // SCODE's defined in STORAGE.H
-           CASE_SCODE (STG_E_INVALIDFUNCTION)
-           CASE_SCODE (STG_E_FILENOTFOUND)
-           CASE_SCODE (STG_E_PATHNOTFOUND)
-           CASE_SCODE (STG_E_TOOMANYOPENFILES)
-           CASE_SCODE (STG_E_ACCESSDENIED)
-           CASE_SCODE (STG_E_INVALIDHANDLE)
-           CASE_SCODE (STG_E_INSUFFICIENTMEMORY)
-           CASE_SCODE (STG_E_INVALIDPOINTER)
-           CASE_SCODE (STG_E_NOMOREFILES)
-           CASE_SCODE (STG_E_DISKISWRITEPROTECTED)
-           CASE_SCODE (STG_E_SEEKERROR)
-           CASE_SCODE (STG_E_WRITEFAULT)
-           CASE_SCODE (STG_E_READFAULT)
-           CASE_SCODE (STG_E_SHAREVIOLATION)
-           CASE_SCODE (STG_E_LOCKVIOLATION)
-           CASE_SCODE (STG_E_FILEALREADYEXISTS)
-           CASE_SCODE (STG_E_INVALIDPARAMETER)
-           CASE_SCODE (STG_E_MEDIUMFULL)
-           CASE_SCODE (STG_E_ABNORMALAPIEXIT)
-           CASE_SCODE (STG_E_INVALIDHEADER)
-           CASE_SCODE (STG_E_INVALIDNAME)
-           CASE_SCODE (STG_E_UNKNOWN)
-           CASE_SCODE (STG_E_UNIMPLEMENTEDFUNCTION)
-           CASE_SCODE (STG_E_INVALIDFLAG)
-           CASE_SCODE (STG_E_INUSE)
-           CASE_SCODE (STG_E_NOTCURRENT)
-           CASE_SCODE (STG_E_REVERTED)
-           CASE_SCODE (STG_E_CANTSAVE)
-           CASE_SCODE (STG_E_OLDFORMAT)
-           CASE_SCODE (STG_E_OLDDLL)
-           CASE_SCODE (STG_E_SHAREREQUIRED)
-           CASE_SCODE (STG_E_NOTFILEBASEDSTORAGE)
-           CASE_SCODE (STG_E_EXTANTMARSHALLINGS)
-           CASE_SCODE (STG_S_CONVERTED)
- 
-           // SCODE's defined in STORAGE.H
-           CASE_SCODE (MK_E_CONNECTMANUALLY)
-           CASE_SCODE (MK_E_EXCEEDEDDEADLINE)
-           CASE_SCODE (MK_E_NEEDGENERIC)
-           CASE_SCODE (MK_E_UNAVAILABLE)
-           CASE_SCODE (MK_E_SYNTAX)
-           CASE_SCODE (MK_E_NOOBJECT)
-           CASE_SCODE (MK_E_INVALIDEXTENSION)
-           CASE_SCODE (MK_E_INTERMEDIATEINTERFACENOTSUPPORTED)
-           CASE_SCODE (MK_E_NOTBINDABLE)
-           CASE_SCODE (MK_E_NOTBOUND)
-           CASE_SCODE (MK_E_CANTOPENFILE)
-           CASE_SCODE (MK_E_MUSTBOTHERUSER)
-           CASE_SCODE (MK_E_NOINVERSE)
-           CASE_SCODE (MK_E_NOSTORAGE)
-           CASE_SCODE (MK_E_NOPREFIX)
-           CASE_SCODE (MK_S_REDUCED_TO_SELF)
-           CASE_SCODE (MK_S_ME)
-           CASE_SCODE (MK_S_HIM)
-           CASE_SCODE (MK_S_US)
-           CASE_SCODE (MK_S_MONIKERALREADYREGISTERED)
- 
-           // SCODE's defined in DISPATCH.H
-           CASE_SCODE (DISP_E_UNKNOWNINTERFACE)
-           CASE_SCODE (DISP_E_MEMBERNOTFOUND)
-           CASE_SCODE (DISP_E_PARAMNOTFOUND)
-           CASE_SCODE (DISP_E_TYPEMISMATCH)
-           CASE_SCODE (DISP_E_UNKNOWNNAME)
-           CASE_SCODE (DISP_E_NONAMEDARGS)
-           CASE_SCODE (DISP_E_BADVARTYPE)
-           CASE_SCODE (DISP_E_EXCEPTION)
-           CASE_SCODE (DISP_E_OVERFLOW)
-           CASE_SCODE (DISP_E_BADINDEX)
-           CASE_SCODE (DISP_E_UNKNOWNLCID)
-           CASE_SCODE (DISP_E_ARRAYISLOCKED)
-           CASE_SCODE (DISP_E_BADPARAMCOUNT)
-           CASE_SCODE (DISP_E_PARAMNOTOPTIONAL)
-           CASE_SCODE (DISP_E_BADCALLEE)
-           CASE_SCODE (DISP_E_NOTACOLLECTION)
- 
-           CASE_SCODE (TYPE_E_BUFFERTOOSMALL)
-           CASE_SCODE (TYPE_E_INVDATAREAD)
-           CASE_SCODE (TYPE_E_UNSUPFORMAT)
-           CASE_SCODE (TYPE_E_REGISTRYACCESS)
-           CASE_SCODE (TYPE_E_LIBNOTREGISTERED)
-           CASE_SCODE (TYPE_E_UNDEFINEDTYPE)
-           CASE_SCODE (TYPE_E_QUALIFIEDNAMEDISALLOWED)
-           CASE_SCODE (TYPE_E_INVALIDSTATE)
-           CASE_SCODE (TYPE_E_WRONGTYPEKIND)
-           CASE_SCODE (TYPE_E_ELEMENTNOTFOUND)
-           CASE_SCODE (TYPE_E_AMBIGUOUSNAME)
-           CASE_SCODE (TYPE_E_NAMECONFLICT)
-           CASE_SCODE (TYPE_E_UNKNOWNLCID)
-           CASE_SCODE (TYPE_E_DLLFUNCTIONNOTFOUND)
-           CASE_SCODE (TYPE_E_BADMODULEKIND)
-           CASE_SCODE (TYPE_E_SIZETOOBIG)
-           CASE_SCODE (TYPE_E_DUPLICATEID)
-           CASE_SCODE (TYPE_E_TYPEMISMATCH)
-           CASE_SCODE (TYPE_E_OUTOFBOUNDS)
-           CASE_SCODE (TYPE_E_IOERROR)
-           CASE_SCODE (TYPE_E_CANTCREATETMPFILE)
-           CASE_SCODE (TYPE_E_CANTLOADLIBRARY)
-           CASE_SCODE (TYPE_E_INCONSISTENTPROPFUNCS)
-           CASE_SCODE (TYPE_E_CIRCULARTYPE)
- 
-           default:
-               lstrcpy (ErrName, "UNKNOWN SCODE");
-       }
- 
-       char Buf[256];
-       sprintf (Buf, "An OLE error occurred:\r\nCode = %s\r\nResult = %lx.",
-                (char*) ErrName, m_hResult);
-       MessageBox (NULL, Buf, "OLE Error", MB_OK);
- }
- 
- 
- static bool CountArgsInFormat (LPCTSTR Format, UINT* pArgCount)
- {
-       *pArgCount = 0;
- 
-       if (! Format)
-               return true;
- 
-       while (*Format)
-       {
-               if (*Format == '&')
-                       Format++;
- 
-               switch (*Format)
-               {
-                   case 'b':
-                   case 'i':
-                   case 'I':
-                   case 'r':
-                   case 'R':
-                   case 'c':
-                   case 's':
-                   case 'e':
-                   case 'd':
-                   case 'v':
-                   case 'D':
-                   case 'U':
-                       ++ (*pArgCount);
-                       Format++;
-                       break;
-                   case '\0':
-                   default:
-                       return false;
-               }
-       }
-       return true;
- }
- 
- static LPCTSTR GetNextVarType (LPCTSTR Format, VARTYPE* pVarType)
- {
-       *pVarType = 0;
-       if (*Format == '&')
-       {
-               *pVarType = VT_BYREF;
-               Format++;
-               if (!*Format)
-                       return NULL;
-       }
-       switch (*Format)
-       {
-           case 'b':
-               *pVarType |= VT_BOOL;
-               break;
-           case 'i':
-               *pVarType |= VT_I2;
-               break;
-           case 'I':
-               *pVarType |= VT_I4;
-               break;
-           case 'r':
-               *pVarType |= VT_R4;
-               break;
-           case 'R':
-               *pVarType |= VT_R8;
-               break;
-           case 'c':
-               *pVarType |= VT_CY;
-               break;
-           case 's':
-               *pVarType |= VT_BSTR;
-               break;
-           case 'e':
-               *pVarType |= VT_ERROR;
-               break;
-           case 'd':
-               *pVarType |= VT_DATE;
-               break;
-           case 'v':
-               *pVarType |= VT_VARIANT;
-               break;
-           case 'U':
-               *pVarType |= VT_UNKNOWN;
-               break;
-           case 'D':
-               *pVarType |= VT_DISPATCH;
-               break;
-           case '\0':
-               return NULL;    // End of Format string
-           default:
-               return NULL;
-       }
-       return ++Format;
- }
- 
- #ifndef UNICODE
- char* ConvertToAnsi (OLECHAR* sUnicode)
- {
-       static char BufAscii[MAX_OLE_STR];
-       return ConvertToAnsiBuf (sUnicode, BufAscii);
- }
- 
- char* ConvertToAnsiBuf (OLECHAR* sUnicode, char* BufAscii)
- {
-       WideCharToMultiByte (CP_ACP, 0, sUnicode, -1, BufAscii, MAX_OLE_STR, 
NULL, NULL);
-       return BufAscii;
- }
- 
- OLECHAR* ConvertToUnicode (char* sAscii)
- {
-       static OLECHAR BufUnicode[MAX_OLE_STR];
-       return ConvertToUnicodeBuf (sAscii, BufUnicode);
- }
- 
- OLECHAR* ConvertToUnicodeBuf (char* sAscii, OLECHAR* BufUnicode)
- {
-       MultiByteToWideChar (CP_ACP, 0, sAscii, -1, BufUnicode, MAX_OLE_STR);
-       return BufUnicode;
- }
- #endif
- 
--- 0 ----
*** ../vim-9.0.0697/src/VisVim/OleAut.h 2010-05-15 12:04:08.000000000 +0100
--- src/VisVim/OleAut.h 1970-01-01 00:00:00.000000000 +0000
***************
*** 1,73 ****
- #ifndef __OLEAUT_H__
- #define __OLEAUT_H__
- 
- class COleAutomationControl : public CObject
- {
-     public:
-       COleAutomationControl ();
-       ~COleAutomationControl ();
-       bool CreateObject (char* ProgId);
-       DISPID GetDispatchId (char* Name);
-       bool GetProperty (char* Name);
-       bool GetProperty (DISPID DispatchId);
-       bool PutProperty (char* Name, LPCTSTR Format, ...);
-       bool PutProperty (DISPID DispatchId, LPCTSTR Format, ...);
-       bool Method (char* Name, LPCTSTR Format = NULL, ...);
-       bool Method (DISPID DispatchId, LPCTSTR Format = NULL, ...);
-       void DeleteObject ();
-       void ErrDiag ();
-       bool IsCreated ()
-       {
-               return m_pDispatch ? true : false;
-       }
-       bool IsAlive ();
-       HRESULT GetResult ()
-       {
-               return m_hResult;
-       }
-       UINT GetErrArgNr ()
-       {
-               return m_nErrArg;
-       }
-       EXCEPINFO* GetExceptionInfo ()
-       {
-               return &m_ExceptionInfo;
-       }
-       LPVARIANT GetResultVariant ()
-       {
-               return &m_VariantResult;
-       }
- 
-     protected:
-       bool Invoke (WORD Flags, char* Name, LPCTSTR Format, va_list ArgList);
-       bool Invoke (WORD Flags, DISPID DispatchId, LPCTSTR Format, va_list 
ArgList);
- 
-     protected:
-       IDispatch*      m_pDispatch;
-       HRESULT         m_hResult;
-       UINT            m_nErrArg;
-       EXCEPINFO       m_ExceptionInfo;
-       VARIANTARG      m_VariantResult;
- };
- 
- #ifdef UNICODE
-     #define FROM_OLE_STRING(str)              str
-     #define FROM_OLE_STRING_BUF(str,buf)      str
-     #define TO_OLE_STR(str)                   str
-     #define TO_OLE_STR_BUF(str,buf)           str
-     #define MAX_OLE_STR                               1
- #else
-     #define FROM_OLE_STR(str)                 ConvertToAnsi(str)
-     #define FROM_OLE_STR_BUF(str,buf)         ConvertToAnsiBuf(str,buf)
-     char* ConvertToAnsi (OLECHAR* sUnicode);
-     char* ConvertToAnsiBuf (OLECHAR* sUnicode, char* Buf);
-     #define TO_OLE_STR(str)                   ConvertToUnicode(str)
-     #define TO_OLE_STR_BUF(str,buf)           ConvertToUnicodeBuf(str,buf)
-     OLECHAR* ConvertToUnicode (char* sAscii);
-     OLECHAR* ConvertToUnicodeBuf (char* sAscii, OLECHAR* Buf);
-     // Maximum length of string that can be converted between Ansi & Unicode
-     #define MAX_OLE_STR                               500
- #endif
- 
- 
- #endif                 // __OLEAUT_H__
--- 0 ----
*** ../vim-9.0.0697/src/VisVim/README_VisVim.txt        2021-06-24 
18:52:35.000000000 +0100
--- src/VisVim/README_VisVim.txt        1970-01-01 00:00:00.000000000 +0000
***************
*** 1,326 ****
- ===============================
- Visual Studio - Vim Integration
- ===============================
- 
- Copyright (C) 1997 Heiko Erhardt
- 
- VisVim is a Visual Studio Add-In that allows Vim to be integrated
- as the default text editor. It will be used instead of the Visual
- Studio built-in editor when you double-click on a file or press F4
- after compiling (it will go to the proper line in the Vim buffer).
- The file can be loaded exclusively by Vim or additionally to the
- builtin Visual Studio editor (this option can be set in the VisVim
- configuration dialog inside Visual Studio).
- Vim does not replace the Visual Studio editor, it still runs in its
- own window.
- 
- VisVim is based upon VisEmacs by Christopher Payne
- (Copyright (C) Christopher Payne 1997).
- 
- Author: Heiko Erhardt <[email protected]>
- Based upon: VisEmacs by Christopher Payne <[email protected]>
- Version: 1.0
- Created: 23 Oct 1997
- Date: 23 Oct 1997
- 
- VisVim was originally GNU GPL licensed, as stated below.  On March 21 2012
- Heiko Erhardt declared this work to be relicensed under the Vim license, as
- stated in ../../runtime/doc/uganda.txt (or ":help uganda" in Vim).
- 
- VisVim is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2, or (at your option)
- any later version.
- 
- VisVim is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- GNU General Public License for more details.
- 
- 
- Requirements
- ------------
- 
- VisVim works with the *OLE-enabled* version of Vim version 5.0 and higher
- only!!!  You must download the extra archive containing the OLE-enabled
- executable from your Vim download site.  When building your own Vim
- executable, use the if_ole_vc.mak makefile (Vim 5.1 and higher).
- VisVim needs DevStudio 5.0 or higher. It does not work with DevStudio 4.2.
- 
- 
- Installation
- ------------
- 
- 1) Close running instances of DevStudio.
- 
- 2) Copy VisVim.dll into a convenient directory like \vim,
-    \vim\lib, or \vim\addin
- 
- 3) Register the DLL using regsvr32.exe ...  (Skip this on Windows 95/98)
-    Example:
-    > cd \vim\addin
-    > regsvr32 VisVim.dll
-    On NT, you should do this from an administrator account.
-    Before installing a new version of VisVim you should unregister
-    the old one using
-    > regsvr32 -unregister VisVim.dll
-    The batch files register.bat and unregister.bat can do that for you.
- 
- 3a) If you didn't do this yet: Register the OLE gvim:
-    > gvim -register
- 
- 4) Start Visual Studio and go to:
-       Tools
-        Customize...
-           Add-Ins and Macro Files
- 
- 5) Click on Browse, and point Visual Studio to your VisVim.dll file.
- 
- 6) Click the checkbox to indicate that you want to use the Add-In, and
-    Close the Customize dialog box.
- 
- 7) You should notice the VisVim Toolbar with the Vim Icon.
-    Click the first item of the toolbar to get to the options dialog.
- 
- 
- Compiling VisVim
- ----------------
- 
- Two Options:
- 
- 1) Load the VisVim.mak file as a Workspace in Visual Studio and compile
- 
- 2) Use the MSVC command line compiler:
-       vcvars32
-       nmake -f VisVim.mak
- 
- 
- Using VisVim
- ------------
- 
- The VisVim DLL exposes several functions to the user. These functions are
- accessible using the toolbar or by assigning hotkeys to them (see below).
- The following functions are visible on the toolbar (from left to right):
- 
- 1. VisVim settings dialog
-    The settings you adjust here will be saved in the registry and
-    will be reloaded on program startup.
- 
- 2. Enable Vim
-    Enables Vim as Visual Studio editor. Control will be switched to Vim when:
-    - Clicking a file in the file view
-    - Clicking a compiler error message line
-    - Using the 'File-Open' Dialog
-    - Showing the current source line when encountering a debugger breakpoint.
-    - Using File-New
- 
- 3. Disable Vim
-    The internal Visual Studio editor will be used to edit files.
- 
- 4. Toggle enable state
-    Toggles the enable state of VisVim. Use this function if you want to have
-    one button only to activate/deactivate Vim.
- 
- 5. Load current file in Vim
-    Loads the file shown in the internal editor into Vim. Use this function if
-    you want the internal editor to stay active and just edit one file in Vim.
-    This command works always whether Vim is enabled as default editor or not.
- 
- You cannot use DevStudio's debugger commands from inside Vim, so you should
- disable Vim before running the debugger.
- 
- You can customize the Vim toolbar itself or add the Vim buttons to other
- toolbars.
- To have fast access to the VisVim options dialog I suggest to create keyboard
- shortcuts:
- 
- 1) Choose
-       Tools
-        Customize...
-           Keyboard
- 2) Choose Category:AddIns and Commands:VisVim.
- 3) Choose 'Main' as editor, enter each hotkey and press the Assign button.
-    I suggest:
-        VisVimDialogCmd    Alt+Shift+V
-        VisVimEnableCmd    Alt+Shift+E
-        VisVimDisableCmd   Alt+Shift+D
-        VisVimToggleCmd    Alt+Shift+T
-        VisVimLoadCmd      Alt+Shift+G
- 4) Close the dialog
- 
- Now a typical debugging example:
- 
- Using "Alt+Shift+d" you turn off Vim before starting the debugger.
- After hitting the breakpoint you single step through your application
- using the internal source code editor and examine variables.
- When you stumble across the line with the null pointer
- assignment, just press "Alt+Shift+g", and correct the error in Vim.
- Save the file, press Alt+Tab to return to DevStudio and press F7 to compile.
- That's it.
- 
- 
- Troubleshooting
- ---------------
- 
- 1. When opening a file in DevStudio the file is opened in the DevStudio
-    editor and immediately vanishes. No Vim shows up.
-    Cause:       Probably you don't have the OLE-enabled Vim or you didn't
-               register it.
-    Explanation: VisVim is notified by DevStudio if an 'open document' event
-               occurs. It then closes the document in the internal editor
-               and tries to start Vim. If Vim isn't properly OLE-registered,
-               this won't work.
-    Workaround:  Download and install the OLE-enable version of Vim and
-               execute "gvim -register".
- 
- 2. Sometimes when clicking on a file, the file won't be opened by Vim but
-    instead the Visual Studio editor comes up.
-    Cause:       The file was already loaded by the DevStudio editor.
-    Explanation: VisVim works by hooks exposed by Visual Studio.
-               Most of the functionality works from the OpenDocument hook.
-               If a document is already loaded in the Visual Studio editor,
-               no 'open document' event will be generated when clicking the
-               file in the file list.
-    Workaround:  Close the document in Visual Studio first.
- 
- 3. I can't get VisVim to work. Either the Vim toolbar does not appear at all
-    or weird crashes happen.
-    Cause:       The Visual Studio installation is messed up.
-    Explanation: I can't give you one. Ask M$.
-    Workaround:  Reinstall DevStudio (I know this is brute, but in some cases
-               it helped). There was one case where the service pack 1 had
-               to be installed, too.
- 
- 4. If an instance of Vim is already running, VisVim will use that instance
-    and not start a new one.
-    Cause:      This is proper OLE behaviour
-    Explanation:  Some call it a bug, some a feature. That's just the way OLE
-                works.
- 
- 5. When being in insert mode in Vim and selecting a file in Visual Studio,
-    the Vim command :e ... is inserted as text instead of being executed.
-    Cause:      You probably know...
-    Explanation:  The Vim OLE automation interface interprets the VisVim
-                commands as if they were typed in by the user.
-                So if you're in insert mode Vim considers it to be text.
-                I decided against sending an ESC before the command because
-                it may cause a beep or at least a screen flash when noeb is
-                set.
-    Workaround:         Get used to press ESC before switching to DevStudio.
- 
- 6. I'm tired of VisVim but I can't get rid of it. I can't delete it in
-    Tools-Customize-Add-Ins.
-    Cause:      You can't delete an item you once added to the add-ins
-                list box.
-    Explanation:  M$ just didn't put a 'delete' button in the dialog box.
-                Unfortunately there is no DEL key accelerator as well...
-    Workaround:         You can't kill it, but you can knock it out:
-                1. Uncheck the check box in front of 'Vim Developer Studio
-                   Add-in'.
-                2. Close Visual Studio.
-                3. Delete VisVim.dll or move it somewhere it can't be found.
-                4. Run Visual Studio.
-                5. Tools -> Customize ->Add-ins and Macro-Files.
-                6. A message appears:
-                   ".../VisVim.dll" "This add-in no longer exists.  It will
-                   no longer be displayed."
-                That's it!
- 
- 
- Change history
- --------------
- 
- 1.0a to 1.0
- -----------
- 
- - All settings in the VisVim dialog are remembered between DevStudio sessions
-   by keeping them in the registry (HKEY_CURRENT_USER\Software\Vim\VisVim).
- - Added an option to do a :cd before opening the file (having a file opened
-   by clicking it but finding out to be still in C:\Windows\system when trying 
to
-   open another file by ":e" can be annoying). Change directory can be
-   done to the source file's directory or its parent directory.
- - Added some explanations to the error message for the CO_E_CLASSSTRING error
-   ("Use OLE Vim and make sure to register...").
- 
- 1.0 to 1.1a
- -----------
- 
- - The VisVim toolbar button now shows the new Vim icon instead of the old one.
- - Made some changes to the documentation, added the troubleshooting chapter
-   and ToDo list.
- - File-New-* now invokes Vim instead of the builtin editor if enabled.
- 
- 1.1 to 1.1b
- -----------
- 
- - Extended the VisVim toolbar to have multiple buttons instead of one.
- - Moved the enable/disable commands from the settings dialog to the toolbar.
- - Added the toggle enable/disable command
- - Added the 'load current file' command.
- 
- 1.1b to 1.2
- -----------
- 
- No new features, just some fine tuning:
- 
- - Changed the GUID of the VisVim OLE interface to avoid conflicts with a
-   version of VisEmacs or VisVile on the same computer (Guy Gascoigne)
- - Fixed a bug caused by a bug in the Developer Studio add-in code generator
-   (Clark Morgan)
- - Fixed a memory leak (Clark Morgan)
- - Added an option in the VisVim dialog to prepend ESC before the first command
-   that is sent to Vim. This will avoid inserting the command as text when Vim
-   is still in insert mode.
- - An :update command is sent to Vim before any other command to update the
-   current file if it is modified, or else the following :cd or :e command 
will fail.
- 
- 1.2 to 1.3a
- -----------
- 
- - Fixed a bug caused by a missing EnableModeless() function call in VimLoad().
-   This seems to reduce VisVim crashing DevStudio on some systems (it
-   occasionally still seems to happen, but it's more stable now).
-   (Vince Negri)
- - Added support for the new CTRL-\ CTRL-N command of Vim 5.4a.
-   This prevents Vim from beeping when a VisVim command is executed and Vim is
-   not in insert mode.
- 
- 
- ToDo List
- ---------
- 
- P1 is highest priority, P10 lowest
- 
- P9  Switching to DevStudio using ALT-TAB may get annoying. Would be nice to
-     have the option to map ActivateApplication("Visual Studio") in Vim.
-     Vim DLLs would solve that problem.
- 
- P8  Execute :tag command in Vim for word under cursor in DevStudio
- 
- P7  Controlling the Visual Studio Debugger from inside Vim
-     See message above. Also a 'Debug' highlight group and a
-     command to highlight a certain line would be necessary.
- 
- P6  Provide an option to open the current file in VisVim in
-     Visual Studio editor
-     Same as above message. A kind of two way OLE automation would have to be
-     established between VisVim and Vim. Also a 'Debug' highlight group and a
-     command to highlight a certain line would be necessary.
- 
- 
- Known Problems
- --------------
- 
- - Occasional memory corruptions in DevStudio may appear on some systems.
-   Reinstalling DevStudio helped in some cases.
-   The cause of these crashes is unclear; there is no way to debug this.
-   Recompiling VisVim with DevStudio SP3 didn't help.
-   I assume it's a problem deep inside the DevStudio add-in OLE interfaces.
-   This will hopefully be fixed with DevStudio 6.
- 
- 
- Have fun!
- 
- Heiko Erhardt
- [email protected]
- 
--- 0 ----
*** ../vim-9.0.0697/src/VisVim/Reg.cpp  2010-05-15 12:04:08.000000000 +0100
--- src/VisVim/Reg.cpp  1970-01-01 00:00:00.000000000 +0000
***************
*** 1,56 ****
- #include "stdafx.h"
- 
- // Returns key for HKEY_CURRENT_USER\"Software"\Company\AppName
- // creating it if it doesn't exist
- // responsibility of the caller to call RegCloseKey() on the returned HKEY
- //
- HKEY GetAppKey (char* AppName)
- {
-       HKEY hAppKey = NULL;
-       HKEY hSoftKey = NULL;
-       if (RegOpenKeyEx (HKEY_CURRENT_USER, "Software", 0, KEY_WRITE | 
KEY_READ,
-               &hSoftKey) == ERROR_SUCCESS)
-       {
-               DWORD Dummy;
-               RegCreateKeyEx (hSoftKey, AppName, 0, REG_NONE,
-                       REG_OPTION_NON_VOLATILE, KEY_WRITE | KEY_READ, NULL,
-                       &hAppKey, &Dummy);
-       }
-       if (hSoftKey)
-               RegCloseKey (hSoftKey);
- 
-       return hAppKey;
- }
- 
- // Returns key for
- // HKEY_CURRENT_USER\"Software"\RegistryKey\AppName\Section
- // creating it if it doesn't exist.
- // responsibility of the caller to call RegCloseKey () on the returned HKEY
- //
- HKEY GetSectionKey (HKEY hAppKey, LPCTSTR Section)
- {
-       HKEY hSectionKey = NULL;
-       DWORD Dummy;
-       RegCreateKeyEx (hAppKey, Section, 0, REG_NONE,
-               REG_OPTION_NON_VOLATILE, KEY_WRITE|KEY_READ, NULL,
-               &hSectionKey, &Dummy);
-       return hSectionKey;
- }
- 
- int GetRegistryInt (HKEY hSectionKey, LPCTSTR Entry, int Default)
- {
-       DWORD Value;
-       DWORD Type;
-       DWORD Count = sizeof (DWORD);
-       if (RegQueryValueEx (hSectionKey, (LPTSTR) Entry, NULL, &Type,
-                            (LPBYTE) &Value, &Count) == ERROR_SUCCESS)
-               return Value;
-       return Default;
- }
- 
- bool WriteRegistryInt (HKEY hSectionKey, char* Entry, int nValue)
- {
-       return RegSetValueEx (hSectionKey, Entry, NULL, REG_DWORD,
-               (LPBYTE) &nValue, sizeof (nValue)) == ERROR_SUCCESS;
- }
- 
--- 0 ----
*** ../vim-9.0.0697/src/VisVim/Register.bat     2010-05-15 12:04:08.000000000 
+0100
--- src/VisVim/Register.bat     1970-01-01 00:00:00.000000000 +0000
***************
*** 1 ****
- regsvr32.exe visvim.dll
--- 0 ----
*** ../vim-9.0.0697/src/VisVim/Res/ToolbarL.bmp 2010-05-15 12:04:08.000000000 
+0100
--- src/VisVim/Res/ToolbarL.bmp 1970-01-01 00:00:00.000000000 +0000
***************
*** 1,28 ****
- BMv
- S", hr, (BSTR) bstr); \
-                       } \
-                       else \
-                               _RPTF1(_CRT_ASSERT, "Object call returned %lx", 
hr); \
-               } \
-       }
- 
- #else //_DEBUG
- 
- #define VERIFY_OK(f) (f);
- 
- #endif //_DEBUG
- 
- //{{AFX_INSERT_LOCATION}}
- // Microsoft Developer Studio will insert additional declarations immediately 
before the previous line.
- 
- #endif // 
!defined(AFX_STDAFX_H__AC72670E_2977_11D1_B2F3_006008040780__INCLUDED)
--- 0 ----
*** ../vim-9.0.0697/src/VisVim/UnRegist.bat     2010-05-15 12:04:08.000000000 
+0100
--- src/VisVim/UnRegist.bat     1970-01-01 00:00:00.000000000 +0000
***************
*** 1 ****
- regsvr32.exe -unregister visvim.dll
--- 0 ----
*** ../vim-9.0.0697/src/VisVim/VisVim.cpp       2010-05-15 12:04:08.000000000 
+0100
--- src/VisVim/VisVim.cpp       1970-01-01 00:00:00.000000000 +0000
***************
*** 1,152 ****
- // VisVim.cpp : Defines the initialization routines for the DLL.
- //
- 
- #include "stdafx.h"
- #include <initguid.h>
- #include "VisVim.h"
- #include "DSAddIn.h"
- #include "Commands.h"
- 
- #ifdef _DEBUG
- #define new DEBUG_NEW
- #undef THIS_FILE
- static char THIS_FILE[] = __FILE__;
- 
- #endif
- 
- CComModule _Module;
- 
- BEGIN_OBJECT_MAP (ObjectMap)
- OBJECT_ENTRY (CLSID_DSAddIn, CDSAddIn)
- END_OBJECT_MAP ()
- 
- class CVisVimApp : public CWinApp
- {
-     public:
-       CVisVimApp ();
- 
-       //{{AFX_VIRTUAL(CVisVimApp)
-     public:
-       virtual BOOL InitInstance ();
-       virtual int ExitInstance ();
-       //}}AFX_VIRTUAL
- 
-       //{{AFX_MSG(CVisVimApp)
-       //}}AFX_MSG
-       DECLARE_MESSAGE_MAP ()
- };
- 
- BEGIN_MESSAGE_MAP (CVisVimApp, CWinApp)
- //{{AFX_MSG_MAP(CVisVimApp)
- //}}AFX_MSG_MAP
- END_MESSAGE_MAP ()
- 
- // The one and only CVisVimApp object
- CVisVimApp theApp;
- 
- CVisVimApp::CVisVimApp ()
- {
- }
- 
- BOOL CVisVimApp::InitInstance ()
- {
-       _Module.Init (ObjectMap, m_hInstance);
-       return CWinApp::InitInstance ();
- }
- 
- int CVisVimApp::ExitInstance ()
- {
-       _Module.Term ();
-       return CWinApp::ExitInstance ();
- }
- 
- // Special entry points required for inproc servers
- //
- 
- STDAPI DllGetClassObject (REFCLSID rclsid, REFIID riid, LPVOID * ppv)
- {
-       AFX_MANAGE_STATE (AfxGetStaticModuleState ());
-       return _Module.GetClassObject (rclsid, riid, ppv);
- }
- 
- STDAPI DllCanUnloadNow (void)
- {
-       AFX_MANAGE_STATE (AfxGetStaticModuleState ());
-       return (AfxDllCanUnloadNow () == S_OK && _Module.GetLockCount () == 0)
-               ? S_OK : S_FALSE;
- }
- 
- // By exporting DllRegisterServer, you can use regsvr32.exe
- //
- STDAPI DllRegisterServer (void)
- {
-       AFX_MANAGE_STATE (AfxGetStaticModuleState ());
-       HRESULT hRes;
- 
-       // Registers object, typelib and all interfaces in typelib
-       hRes = _Module.RegisterServer (TRUE);
-       if (FAILED (hRes))
-               // Hack: When this fails we might be a normal user, while the
-               // admin already registered the module.  Returning S_OK then
-               // makes it work.  When the module was never registered it
-               // will soon fail in another way.
-               // old code: return hRes;
-               return S_OK;
- 
-       _ATL_OBJMAP_ENTRY *pEntry = _Module.m_pObjMap;
-       CRegKey key;
-       LONG lRes = key.Open (HKEY_CLASSES_ROOT, _T ("CLSID"));
- 
-       if (lRes == ERROR_SUCCESS)
-       {
-               USES_CONVERSION;
-               LPOLESTR lpOleStr;
- 
-               StringFromCLSID (*pEntry->pclsid, &lpOleStr);
-               LPTSTR lpsz = OLE2T (lpOleStr);
- 
-               lRes = key.Open (key, lpsz);
-               if (lRes == ERROR_SUCCESS)
-               {
-                       CString strDescription;
- 
-                       strDescription.LoadString (IDS_VISVIM_DESCRIPTION);
-                       key.SetKeyValue (_T ("Description"), strDescription);
-               }
-               CoTaskMemFree (lpOleStr);
-       }
- 
-       if (lRes != ERROR_SUCCESS)
-               hRes = HRESULT_FROM_WIN32 (lRes);
- 
-       return hRes;
- 
- }
- 
- // DllUnregisterServer - Removes entries from the system registry
- //
- STDAPI DllUnregisterServer (void)
- {
-       AFX_MANAGE_STATE (AfxGetStaticModuleState ());
- 
-       HRESULT hRes = S_OK;
-       _Module.UnregisterServer ();
-       return hRes;
- }
- 
- 
- // Debugging support
- 
- // GetLastErrorDescription is used in the implementation of the VERIFY_OK
- //  macro, defined in stdafx.h.
- 
- #ifdef _DEBUG
- 
- void GetLastErrorDescription (CComBSTR & bstr)
- {
-       CComPtr < IErrorInfo > pErrorInfo;
-       if (GetErrorInfo (0, &pErrorInfo) == S_OK)
-               pErrorInfo->GetDescription (&bstr);
- }
- 
- #endif //_DEBUG
--- 0 ----
*** ../vim-9.0.0697/src/VisVim/VisVim.def       2010-05-15 12:04:08.000000000 
+0100
--- src/VisVim/VisVim.def       1970-01-01 00:00:00.000000000 +0000
***************
*** 1,11 ****
- ; VisVim.def : Declares the module parameters for the DLL.
- 
- LIBRARY      "VISVIM"
- DESCRIPTION  'VISVIM Windows Dynamic Link Library'
- 
- EXPORTS
-     ; Explicit exports can go here
-       DllCanUnloadNow PRIVATE
-       DllGetClassObject PRIVATE
-       DllRegisterServer PRIVATE
-       DllUnregisterServer PRIVATE
--- 0 ----
*** ../vim-9.0.0697/src/VisVim/VisVim.dll       2010-05-15 12:04:08.000000000 
+0100
--- src/VisVim/VisVim.dll       1970-01-01 00:00:00.000000000 +0000
***************
*** 1,130 ****
- MZ t%‹Ëè*b1 ™D
º^OLE_E_ADVISENOTSUPPORTEDdH=d=l=x=”=œ=¨=Ä=Ð=ì=ø= > >$>,>4>@>H>d>l> 
>¤>°>Ì>Ø>ô>ut.obj" : $(SOURCE) "$(INTDIR)"
- 
- # End Source File
- # Begin Source File
- 
- SOURCE=.\Commands.cpp
- 
- "$(INTDIR)\Commands.obj" : $(SOURCE) "$(INTDIR)"
- 
- # End Source File
- # End Target
- # End Project
--- 0 ----
*** ../vim-9.0.0697/src/VisVim/VisVim.odl       2010-05-15 12:04:08.000000000 
+0100
--- src/VisVim/VisVim.odl       1970-01-01 00:00:00.000000000 +0000
***************
*** 1,61 ****
- // VisVim.odl : type library source for VisVim.dll
- 
- // This file will be processed by the Make Type Library (mktyplib) tool to
- // produce the type library (VisVim.tlb).
- 
- [     uuid(AC726707-2977-11D1-B2F3-006008040780), version(1.0),
-       helpstring ("VisVim Developer Studio Add-in") ]
- library VisVim
- {
-       importlib("stdole32.tlb");
-       importlib("devshl.dll");
-       importlib("ide\devdbg.pkg");
- 
- 
-       //  Dual interface for CCommands
-       //
-       //  All commands that your add-in adds to DevStudio
-       //   must appear in this interface.  You may use the
-       //   ClassView to add methods to this interface, which
-       //   will cause stub implementations of those methods to
-       //   appear in your CCommands class.
- 
-       [       uuid(AC726703-2977-11D1-B2F3-006008040780),
-               oleautomation,
-               dual
-       ]
- 
-       interface ICommands : IDispatch
-       {
-               // methods
-               [id(1)]
-               HRESULT VisVimDialog();
-               HRESULT VisVimEnable();
-               HRESULT VisVimDisable();
-               HRESULT VisVimToggle();
-               HRESULT VisVimLoad();
-       };
- 
-       //  Class information for CCommands
- 
-       [ uuid(AC726704-2977-11D1-B2F3-006008040780) ]
-       coclass Commands
-       {
-               [default] interface ICommands;
-       };
- 
-       [ hidden, uuid(AC726705-2977-11D1-B2F3-006008040780) ]
-       coclass ApplicationEvents
-       {
-               [default] interface IApplicationEvents;
-       }
- 
-       [ hidden, uuid(AC726706-2977-11D1-B2F3-006008040780) ]
-       coclass DebuggerEvents
-       {
-               [default] interface IDebuggerEvents;
-       }
- 
-       //{{AFX_APPEND_ODL}}
-       //}}AFX_APPEND_ODL}}
- };
--- 0 ----
*** ../vim-9.0.0697/src/VisVim/VisVim.rc        2010-05-15 12:04:08.000000000 
+0100
--- src/VisVim/VisVim.rc        1970-01-01 00:00:00.000000000 +0000
***************
*** 1,202 ****
- //Microsoft Developer Studio generated resource script.
- //
- #include "resource.h"
- 
- #define APSTUDIO_READONLY_SYMBOLS
- /////////////////////////////////////////////////////////////////////////////
- //
- // Generated from the TEXTINCLUDE 2 resource.
- //
- #include "afxres.h"
- 
- /////////////////////////////////////////////////////////////////////////////
- #undef APSTUDIO_READONLY_SYMBOLS
- 
- /////////////////////////////////////////////////////////////////////////////
- // Englisch (USA) resources
- 
- #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
- #ifdef _WIN32
- LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
- #pragma code_page(1252)
- #endif //_WIN32
- 
- #ifdef APSTUDIO_INVOKED
- /////////////////////////////////////////////////////////////////////////////
- //
- // TEXTINCLUDE
- //
- 
- 1 TEXTINCLUDE DISCARDABLE 
- BEGIN
-     "resource.h\0"
- END
- 
- 2 TEXTINCLUDE DISCARDABLE 
- BEGIN
-     "#include ""afxres.h""\r\n"
-     "\0"
- END
- 
- 3 TEXTINCLUDE DISCARDABLE 
- BEGIN
-     "#define _AFX_NO_SPLITTER_RESOURCES\r\n"
-     "#define _AFX_NO_OLE_RESOURCES\r\n"
-     "#define _AFX_NO_TRACKER_RESOURCES\r\n"
-     "#define _AFX_NO_PROPERTY_RESOURCES\r\n"
-     "\r\n"
-     "#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)\r\n"
-     "#ifdef _WIN32\r\n"
-     "LANGUAGE 9, 1\r\n"
-     "#pragma code_page(1252)\r\n"
-     "#endif\r\n"
-     "#include ""afxres.rc""         // Standard components\r\n"
-     "#endif\r\n"
-     "1 TYPELIB ""VisVim.tlb""\r\n"
-     "\0"
- END
- 
- #endif    // APSTUDIO_INVOKED
- 
- 
- /////////////////////////////////////////////////////////////////////////////
- //
- // Bitmap
- //
- 
- IDR_TOOLBAR_MEDIUM      BITMAP  MOVEABLE PURE   "res\\ToolbarM.bmp"
- IDR_TOOLBAR_LARGE       BITMAP  MOVEABLE PURE   "res\\ToolbarL.bmp"
- 
- #ifndef _MAC
- /////////////////////////////////////////////////////////////////////////////
- //
- // Version
- //
- 
- VS_VERSION_INFO VERSIONINFO
-  FILEVERSION 1,1,0,1
-  PRODUCTVERSION 1,1,0,1
-  FILEFLAGSMASK 0x3fL
- #ifdef _DEBUG
-  FILEFLAGS 0x1L
- #else
-  FILEFLAGS 0x0L
- #endif
-  FILEOS 0x4L
-  FILETYPE 0x2L
-  FILESUBTYPE 0x0L
- BEGIN
-     BLOCK "StringFileInfo"
-     BEGIN
-         BLOCK "040904b0"
-         BEGIN
-             VALUE "CompanyName", "\0"
-             VALUE "FileDescription", "VisVim DLL\0"
-             VALUE "FileVersion", "1, 1, 0, 1\0"
-             VALUE "InternalName", "VisVim\0"
-             VALUE "LegalCopyright", "Copyright (C) 1998\0"
-             VALUE "OriginalFilename", "VisVim.DLL\0"
-             VALUE "ProductName", "VisVim Dynamic Link Library\0"
-             VALUE "ProductVersion", "1, 1, 0, 1\0"
-         END
-     END
-     BLOCK "VarFileInfo"
-     BEGIN
-         VALUE "Translation", 0x409, 1200
-     END
- END
- 
- #endif    // !_MAC
- 
- 
- /////////////////////////////////////////////////////////////////////////////
- //
- // Dialog
- //
- 
- IDD_ADDINMAIN DIALOG DISCARDABLE  0, 0, 178, 124
- STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
- CAPTION "Vim Add-In 1.4"
- FONT 8, "MS Sans Serif"
- BEGIN
-     CONTROL         "&Open file in DevStudio editor simultaneously",
-                     IDC_DEVSTUDIO_EDITOR,"Button",BS_AUTOCHECKBOX | WS_GROUP 
| 
-                     WS_TABSTOP,7,7,153,10
-     CONTROL         "Open files in new tabs",
-                     IDC_NEW_TABS,"Button",BS_AUTOCHECKBOX | WS_GROUP | 
-                     WS_TABSTOP,7,21,153,10
-     GROUPBOX        "Current directory",IDC_STATIC,7,35,164,58,WS_GROUP
-     CONTROL         "Set to &source file path",IDC_CD_SOURCE_PATH,"Button",
-                     BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,17,49,85,10
-     CONTROL         "Set to &parent directory of source file path",
-                     IDC_CD_SOURCE_PARENT,"Button",BS_AUTORADIOBUTTON,17,63,
-                     143,10
-     CONTROL         "Do &not change",IDC_CD_NONE,"Button",BS_AUTORADIOBUTTON,
-                     17,78,63,10
-     DEFPUSHBUTTON   "&Ok",IDOK,7,102,74,14,WS_GROUP
-     PUSHBUTTON      "&Cancel",IDCANCEL,97,102,74,14,WS_GROUP
- END
- 
- 
- /////////////////////////////////////////////////////////////////////////////
- //
- // DESIGNINFO
- //
- 
- #ifdef APSTUDIO_INVOKED
- GUIDELINES DESIGNINFO DISCARDABLE 
- BEGIN
-     IDD_ADDINMAIN, DIALOG
-     BEGIN
-         LEFTMARGIN, 7
-         RIGHTMARGIN, 171
-         TOPMARGIN, 7
-         BOTTOMMARGIN, 117
-     END
- END
- #endif    // APSTUDIO_INVOKED
- 
- 
- /////////////////////////////////////////////////////////////////////////////
- //
- // String Table
- //
- 
- STRINGTABLE DISCARDABLE 
- BEGIN
-     IDS_VISVIM_LONGNAME     "Vim Developer Studio Add-In"
-     IDS_VISVIM_DESCRIPTION  "Allows integration of Vim as the text editor in 
Developer Studio."
-     IDS_CMD_DIALOG          "\nVim Add-In Dialog\nDisplays the options dialog 
box of the Vim Add-In\nVim Add-In Dialog"
-     IDS_CMD_ENABLE          "\nEnable Vim Add-In\nEnables Vim as Visual 
Studio editor\nEnable Vim Add-In"
-     IDS_CMD_DISABLE         "\nDisable Vim Add-In\nDisables Vim as Visual 
Studio editor\nDisable Vim Add-In"
-     IDS_CMD_TOGGLE          "\nToggle Vim Add-In State\nToggles the enable 
state of the Vim Add-In\nToggle Vim Add-In State"
-     IDS_CMD_LOAD            "\nVim Add-In Load Document\nLoads the current 
document in Vim\nVim Add-In Load Document"
- END
- 
- #endif    // Englisch (USA) resources
- /////////////////////////////////////////////////////////////////////////////
- 
- 
- 
- #ifndef APSTUDIO_INVOKED
- /////////////////////////////////////////////////////////////////////////////
- //
- // Generated from the TEXTINCLUDE 3 resource.
- //
- #define _AFX_NO_SPLITTER_RESOURCES
- #define _AFX_NO_OLE_RESOURCES
- #define _AFX_NO_TRACKER_RESOURCES
- #define _AFX_NO_PROPERTY_RESOURCES
- 
- #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
- #ifdef _WIN32
- LANGUAGE 9, 1
- #pragma code_page(1252)
- #endif
- #include "afxres.rc"         // Standard components
- #endif
- 1 TYPELIB "VisVim.tlb"
- 
- /////////////////////////////////////////////////////////////////////////////
- #endif    // not APSTUDIO_INVOKED
- 
--- 0 ----
*** ../vim-9.0.0697/src/VisVim/VsReadMe.txt     2010-05-15 12:04:08.000000000 
+0100
--- src/VisVim/VsReadMe.txt     1970-01-01 00:00:00.000000000 +0000
***************
*** 1,91 ****
- ========================================================================
-        DEVELOPER STUDIO ADD-IN : VisVim
- ========================================================================
- 
- 
- The Add-in Wizard has created this VisVim DLL for you.  This DLL not only
- demonstrates the basics of creating a Developer Studio add-in, but it is also
- a starting point for writing your own add-in.
- 
- An add-in mainly does two things.
-       (1) It adds commands to Developer Studio, which can then be tied
-           to keystrokes or toolbar buttons by the user or programmatically
-               by the add-in.
-       (2) It responds to events fired by Developer Studio.
- In both cases, the add-in code has access to the full Developer Studio
- Automation Object Model, and may manipulate those objects to affect the
- behavior of Developer Studio.
- 
- This file contains a summary of what you will find in each of the files that
- make up your VisVim DLL.
- 
- 
- VisVim.h
-     This is the main header file for the DLL.  It declares the
-     CVisVimApp class.
- 
- VisVim.cpp
-     This is the main DLL source file.  It contains the class CVisVimApp.
-     It also contains the OLE entry points required of inproc servers.
- 
- VisVim.odl
-     This file contains the Object Description Language source code for the
-     type library of your DLL.
- 
- VisVim.rc
-     This is a listing of all of the Microsoft Windows resources that the
-     program uses.  It includes the sample toolbar bitmap that is stored
-     in the RES subdirectory.  This file can be directly edited in Microsoft
-     Developer Studio.
- 
- res\VisVim.rc2
-     This file contains resources that are not edited by Microsoft
-     Developer Studio.  You should place all resources not
-     editable by the resource editor in this file.
- 
- VisVim.def
-     This file contains information about the DLL that must be
-     provided to run with Microsoft Windows.  It defines parameters
-     such as the name and description of the DLL.  It also exports
-       functions from the DLL.
- 
- VisVim.clw
-     This file contains information used by ClassWizard to edit existing
-     classes or add new classes.  ClassWizard also uses this file to store
-     information needed to create and edit message maps and dialog data
-     maps and to create prototype member functions.
- 
- /////////////////////////////////////////////////////////////////////////////
- Add-in-specific files:
- 
- DSAddIn.cpp, DSAddIn.h
-     These files contain the CDSAddIn class, which implements the
-     IDSAddIn interface.  This interface contains handlers
-     for connecting and disconnecting the add-in.
- 
- Commands.cpp, Commands.h
-     These files contain the CCommands class, which implements your
-     command dispatch interface.  This interface contains one method
-     for each command you add to Developer Studio.
-     These files also contain stub implementations of handlers for all events
-     fired by the Developer Studio Application object.
- 
- OleAut.cpp
-     These files contain a general OLE automation class used to communicate
-     with vim.
- 
- Reg.cpp
-     These files contain functions to access the registry.
- 
- 
- /////////////////////////////////////////////////////////////////////////////
- Other standard files:
- 
- StdAfx.h, StdAfx.cpp
-     These files are used to build a precompiled header (PCH) file
-     named VisVim.pch and a precompiled types file named StdAfx.obj.
- 
- Resource.h
-     This is the standard header file, which defines new resource IDs.
-     Microsoft Developer Studio reads and updates this file.
- 
--- 0 ----
*** ../vim-9.0.0697/uninstall.txt       2019-09-27 11:57:17.000000000 +0100
--- uninstall.txt       2022-10-08 17:02:06.693722341 +0100
***************
*** 5,11 ****
  1. With the GUI uninstaller.
     This is only available when Vim was installed with the self-installing
     executable.  This has a minimal number of questions.  It can delete
!    everything that was installed.  This also unregisters the VisVim.dll.
  
  2. With uninstall.exe.
     This removes most installed items, but does not delete the files you
--- 5,11 ----
  1. With the GUI uninstaller.
     This is only available when Vim was installed with the self-installing
     executable.  This has a minimal number of questions.  It can delete
!    everything that was installed.
  
  2. With uninstall.exe.
     This removes most installed items, but does not delete the files you
*** ../vim-9.0.0697/src/version.c       2022-10-08 16:41:09.379815330 +0100
--- src/version.c       2022-10-08 17:08:00.928950076 +0100
***************
*** 701,702 ****
--- 701,704 ----
  {   /* Add new patch number below this line */
+ /**/
+     698,
  /**/

-- 
Apologies for taking up the bandwidth with the apology.  Anything else I
can apologise for ...... er no can't think of anything, sorry about that.
                Andy Hunt (Member of British Olympic Apology Squad)

 /// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net   \\\
///                                                                      \\\
\\\        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/vim_dev/20221008161600.A40731C0CD2%40moolenaar.net.

Raspunde prin e-mail lui