From bb1969b6ab28120c93b77817e7b6075e1aecf663 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Thu, 17 Jan 2019 15:45:25 +0100 Subject: patch 8.1.0763: nobody is using the Sun Workshop support Problem: Nobody is using the Sun Workshop support. Solution: Remove the Workshop support. --- src/Makefile | 42 +- src/auto/configure | 27 - src/beval.c | 4 - src/buffer.c | 5 - src/config.h.in | 3 - src/config.mk.in | 3 - src/configure.ac | 16 - src/evalfunc.c | 3 - src/ex_cmdidxs.h | 10 +- src/ex_cmds.c | 14 +- src/ex_cmds.h | 3 - src/ex_docmd.c | 3 - src/feature.h | 32 +- src/fileio.c | 5 - src/globals.h | 11 +- src/gui.c | 21 +- src/gui_beval.c | 5 +- src/gui_motif.c | 3 +- src/gui_x11.c | 51 +- src/integration.c | 1112 ----------------------------- src/integration.h | 452 ------------ src/main.c | 8 +- src/misc2.c | 2 +- src/nbdebug.c | 2 +- src/netbeans.c | 2 - src/proto.h | 3 - src/proto/workshop.pro | 49 -- src/ui.c | 5 +- src/version.c | 6 +- src/vim.h | 12 - src/workshop.c | 1830 ------------------------------------------------ src/workshop.h | 28 - src/wsdebug.c | 184 ----- src/wsdebug.h | 81 --- 34 files changed, 37 insertions(+), 4000 deletions(-) delete mode 100644 src/integration.c delete mode 100644 src/integration.h delete mode 100644 src/proto/workshop.pro delete mode 100644 src/workshop.c delete mode 100644 src/workshop.h delete mode 100644 src/wsdebug.c delete mode 100644 src/wsdebug.h (limited to 'src') diff --git a/src/Makefile b/src/Makefile index cf409bd49a..23f01c38bc 100644 --- a/src/Makefile +++ b/src/Makefile @@ -317,7 +317,7 @@ CClink = $(CC) # You can give a lot of options to configure. # Change this to your desire and do 'make config' afterwards -# examples: +# examples you can uncomment: #CONF_ARGS1 = --exec-prefix=/usr #CONF_ARGS2 = --with-vim-name=vim8 --with-ex-name=ex8 --with-view-name=view8 #CONF_ARGS3 = --with-global-runtime=/etc/vim,/usr/share/vim @@ -781,7 +781,7 @@ SANITIZER_LIBS = $(SANITIZER_CFLAGS) #CC = /usr/ucb/cc #EXTRA_LIBS = -R/usr/ucblib -### Solaris with Forte Developer and FEAT_SUN_WORKSHOP +### Solaris with Forte Developer and NetBeans. # The Xpm library is available from http://koala.ilog.fr/ftp/pub/xpm. #CC = cc #XPM_DIR = /usr/local/xpm/xpm-3.4k-solaris @@ -791,10 +791,6 @@ SANITIZER_LIBS = $(SANITIZER_CFLAGS) #EXTRA_IPATHS = $(XPM_IPATH) #EXTRA_DEFS = -xCC -DHAVE_X11_XPM_H -### Solaris with workshop compilers: Vim is unstable when compiled with -# "-fast". Use this instead. (Shea Martin) -#CFLAGS = -x02 -xtarget=ultra - ### (R) for Solaris 2.5 (or 2.5.1) with gcc > 2.5.6 you might need this: #LDFLAGS = -lw -ldl -lXmu #GUI_LIB_LOC = -L/usr/local/lib @@ -1651,14 +1647,11 @@ SRC = $(BASIC_SRC) \ $(PERL_SRC) \ $(PYTHON_SRC) $(PYTHON3_SRC) \ $(TCL_SRC) \ - $(RUBY_SRC) \ - $(WORKSHOP_SRC) \ - $(WSDEBUG_SRC) + $(RUBY_SRC) EXTRA_SRC = hangulin.c if_lua.c if_mzsch.c auto/if_perl.c if_perlsfio.c \ if_python.c if_python3.c if_tcl.c if_ruby.c \ - gui_beval.c workshop.c wsdebug.c integration.c \ - netbeans.c channel.c \ + gui_beval.c netbeans.c channel.c \ $(GRESOURCE_SRC) # Unittest files @@ -1684,7 +1677,6 @@ ALL_SRC = $(BASIC_SRC) $(ALL_GUI_SRC) $(UNITTEST_SRC) \ # The perl sources also don't work well with lint. LINT_SRC = $(BASIC_SRC) $(GUI_SRC) $(HANGULIN_SRC) \ $(PYTHON_SRC) $(PYTHON3_SRC) $(TCL_SRC) \ - $(WORKSHOP_SRC) $(WSDEBUG_SRC) \ $(NETBEANS_SRC) $(CHANNEL_SRC) $(TERM_SRC) #LINT_SRC = $(SRC) #LINT_SRC = $(ALL_SRC) @@ -1761,11 +1753,9 @@ OBJ_COMMON = \ $(TCL_OBJ) \ $(RUBY_OBJ) \ $(OS_EXTRA_OBJ) \ - $(WORKSHOP_OBJ) \ $(NETBEANS_OBJ) \ $(CHANNEL_OBJ) \ - $(XDIFF_OBJS) \ - $(WSDEBUG_OBJ) + $(XDIFF_OBJS) # The files included by tests are not in OBJ_COMMON. OBJ_MAIN = \ @@ -1889,7 +1879,6 @@ PRO_AUTO = \ window.pro \ beval.pro \ gui_beval.pro \ - workshop.pro \ netbeans.pro \ channel.pro \ $(ALL_GUI_PRO) \ @@ -1932,7 +1921,7 @@ config auto/config.mk: auto/configure config.mk.in config.h.in $(CONF_OPT_PERL) $(CONF_OPT_PYTHON) $(CONF_OPT_PYTHON3) \ $(CONF_OPT_TCL) $(CONF_OPT_RUBY) $(CONF_OPT_NLS) \ $(CONF_OPT_CSCOPE) $(CONF_OPT_MULTIBYTE) $(CONF_OPT_INPUT) \ - $(CONF_OPT_OUTPUT) $(CONF_OPT_GPM) $(CONF_OPT_WORKSHOP) \ + $(CONF_OPT_OUTPUT) $(CONF_OPT_GPM) \ $(CONF_OPT_FEAT) $(CONF_TERM_LIB) \ $(CONF_OPT_COMPBY) $(CONF_OPT_ACL) $(CONF_OPT_NETBEANS) \ $(CONF_OPT_CHANNEL) $(CONF_OPT_TERMINAL) \ @@ -3098,9 +3087,6 @@ objects/if_ruby.o: if_ruby.c objects/if_tcl.o: if_tcl.c $(CCC_NF) $(TCL_CFLAGS) $(ALL_CFLAGS) -o $@ if_tcl.c -objects/integration.o: integration.c - $(CCC) -o $@ integration.c - objects/json.o: json.c $(CCC) -o $@ json.c @@ -3239,12 +3225,6 @@ objects/userfunc.o: userfunc.c objects/window.o: window.c $(CCC) -o $@ window.c -objects/workshop.o: workshop.c - $(CCC) -o $@ workshop.c - -objects/wsdebug.o: wsdebug.c - $(CCC) -o $@ wsdebug.c - objects/netbeans.o: netbeans.c $(CCC) -o $@ netbeans.c @@ -3784,16 +3764,6 @@ objects/gui_beval.o: gui_beval.c vim.h protodef.h auto/config.h feature.h \ os_unix.h auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \ proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \ proto.h globals.h farsi.h arabic.h -objects/workshop.o: workshop.c protodef.h auto/config.h integration.h vim.h \ - feature.h os_unix.h auto/osdef.h ascii.h keymap.h term.h macros.h \ - option.h beval.h proto/gui_beval.pro structs.h regexp.h gui.h alloc.h \ - ex_cmds.h spell.h proto.h globals.h farsi.h arabic.h version.h \ - workshop.h -objects/wsdebug.o: wsdebug.c -objects/integration.o: integration.c vim.h protodef.h auto/config.h feature.h \ - os_unix.h auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \ - proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \ - proto.h globals.h farsi.h arabic.h integration.h objects/netbeans.o: netbeans.c vim.h protodef.h auto/config.h feature.h os_unix.h \ auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \ proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \ diff --git a/src/auto/configure b/src/auto/configure index 4629b12485..0431addf0f 100755 --- a/src/auto/configure +++ b/src/auto/configure @@ -661,8 +661,6 @@ CHANNEL_OBJ CHANNEL_SRC NETBEANS_OBJ NETBEANS_SRC -WORKSHOP_OBJ -WORKSHOP_SRC RUBY_LIBS RUBY_CFLAGS RUBY_PRO @@ -812,7 +810,6 @@ with_tclsh enable_rubyinterp with_ruby_command enable_cscope -enable_workshop enable_netbeans enable_channel enable_terminal @@ -1494,7 +1491,6 @@ Optional Features: --enable-tclinterp=OPTS Include Tcl interpreter. default=no OPTS=no/yes/dynamic --enable-rubyinterp=OPTS Include Ruby interpreter. default=no OPTS=no/yes/dynamic --enable-cscope Include cscope interface. - --enable-workshop Include Sun Visual Workshop support. --disable-netbeans Disable NetBeans integration support. --disable-channel Disable process communication support. --enable-terminal Enable terminal emulation support. @@ -7665,29 +7661,6 @@ if test "$enable_cscope" = "yes"; then fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking --enable-workshop argument" >&5 -$as_echo_n "checking --enable-workshop argument... " >&6; } -# Check whether --enable-workshop was given. -if test "${enable_workshop+set}" = set; then : - enableval=$enable_workshop; -else - enable_workshop="no" -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_workshop" >&5 -$as_echo "$enable_workshop" >&6; } -if test "$enable_workshop" = "yes"; then - $as_echo "#define FEAT_SUN_WORKSHOP 1" >>confdefs.h - - WORKSHOP_SRC="workshop.c integration.c" - - WORKSHOP_OBJ="objects/workshop.o objects/integration.o" - - if test "${enable_gui-xxx}" = xxx; then - enable_gui=motif - fi -fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking --disable-netbeans argument" >&5 $as_echo_n "checking --disable-netbeans argument... " >&6; } # Check whether --enable-netbeans was given. diff --git a/src/beval.c b/src/beval.c index 3025b2cc97..c5fa22014f 100644 --- a/src/beval.c +++ b/src/beval.c @@ -273,10 +273,6 @@ general_beval_cb(BalloonEval *beval, int state UNUSED) if (bevalServers & BEVAL_NETBEANS) netbeans_beval_cb(beval, state); #endif -#ifdef FEAT_SUN_WORKSHOP - if (bevalServers & BEVAL_WORKSHOP) - workshop_beval_cb(beval, state); -#endif recursive = FALSE; } diff --git a/src/buffer.c b/src/buffer.c index 6bacb16384..c22773f7a4 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -658,11 +658,6 @@ aucmd_abort: */ if (wipe_buf) { -#ifdef FEAT_SUN_WORKSHOP - if (usingSunWorkShop) - workshop_file_closed_lineno((char *)buf->b_ffname, - (int)buf->b_last_cursor.lnum); -#endif if (buf->b_sfname != buf->b_ffname) VIM_CLEAR(buf->b_sfname); else diff --git a/src/config.h.in b/src/config.h.in index 4a5cb099e4..9a7ba51efc 100644 --- a/src/config.h.in +++ b/src/config.h.in @@ -441,9 +441,6 @@ /* Define if we have shl_load() */ #undef HAVE_SHL_LOAD -/* Define if you want to include Sun Visual Workshop support. */ -#undef FEAT_SUN_WORKSHOP - /* Define if you want to include NetBeans integration. */ #undef FEAT_NETBEANS_INTG diff --git a/src/config.mk.in b/src/config.mk.in index 84c1590928..b5d1ebd9b7 100644 --- a/src/config.mk.in +++ b/src/config.mk.in @@ -81,9 +81,6 @@ TCL_LIBS = @TCL_LIBS@ HANGULIN_SRC = @HANGULIN_SRC@ HANGULIN_OBJ = @HANGULIN_OBJ@ -WORKSHOP_SRC = @WORKSHOP_SRC@ -WORKSHOP_OBJ = @WORKSHOP_OBJ@ - NETBEANS_SRC = @NETBEANS_SRC@ NETBEANS_OBJ = @NETBEANS_OBJ@ CHANNEL_SRC = @CHANNEL_SRC@ diff --git a/src/configure.ac b/src/configure.ac index 39237b9081..2dcfe46cb3 100644 --- a/src/configure.ac +++ b/src/configure.ac @@ -1996,22 +1996,6 @@ if test "$enable_cscope" = "yes"; then AC_DEFINE(FEAT_CSCOPE) fi -AC_MSG_CHECKING(--enable-workshop argument) -AC_ARG_ENABLE(workshop, - [ --enable-workshop Include Sun Visual Workshop support.], , - [enable_workshop="no"]) -AC_MSG_RESULT($enable_workshop) -if test "$enable_workshop" = "yes"; then - AC_DEFINE(FEAT_SUN_WORKSHOP) - WORKSHOP_SRC="workshop.c integration.c" - AC_SUBST(WORKSHOP_SRC) - WORKSHOP_OBJ="objects/workshop.o objects/integration.o" - AC_SUBST(WORKSHOP_OBJ) - if test "${enable_gui-xxx}" = xxx; then - enable_gui=motif - fi -fi - AC_MSG_CHECKING(--disable-netbeans argument) AC_ARG_ENABLE(netbeans, [ --disable-netbeans Disable NetBeans integration support.], diff --git a/src/evalfunc.c b/src/evalfunc.c index 830700eaa4..1bdb722635 100644 --- a/src/evalfunc.c +++ b/src/evalfunc.c @@ -6512,9 +6512,6 @@ f_has(typval_T *argvars, typval_T *rettv) #ifdef FEAT_STL_OPT "statusline", #endif -#ifdef FEAT_SUN_WORKSHOP - "sun_workshop", -#endif #ifdef FEAT_NETBEANS_INTG "netbeans_intg", #endif diff --git a/src/ex_cmdidxs.h b/src/ex_cmdidxs.h index 8b7c85c0ce..867047f67a 100644 --- a/src/ex_cmdidxs.h +++ b/src/ex_cmdidxs.h @@ -28,9 +28,9 @@ static const unsigned short cmdidxs1[26] = /* u */ 481, /* v */ 492, /* w */ 510, - /* x */ 525, - /* y */ 534, - /* z */ 535 + /* x */ 524, + /* y */ 533, + /* z */ 534 }; /* @@ -63,10 +63,10 @@ static const unsigned char cmdidxs2[26][26] = /* t */ { 2, 0, 19, 0, 22, 24, 0, 25, 0, 26, 0, 27, 31, 34, 36, 37, 0, 38, 40, 0, 41, 0, 0, 0, 0, 0 }, /* u */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, /* v */ { 0, 0, 0, 0, 1, 0, 0, 0, 4, 0, 0, 0, 9, 12, 0, 0, 0, 0, 15, 0, 16, 0, 0, 0, 0, 0 }, - /* w */ { 2, 0, 0, 0, 0, 0, 0, 3, 4, 0, 0, 0, 0, 8, 0, 9, 10, 0, 12, 0, 13, 14, 0, 0, 0, 0 }, + /* w */ { 2, 0, 0, 0, 0, 0, 0, 3, 4, 0, 0, 0, 0, 8, 0, 9, 10, 0, 0, 0, 12, 13, 0, 0, 0, 0 }, /* x */ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 5, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0 }, /* y */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, /* z */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }; -static const int command_count = 548; +static const int command_count = 547; diff --git a/src/ex_cmds.c b/src/ex_cmds.c index ddcd6107cd..25322c2bd8 100644 --- a/src/ex_cmds.c +++ b/src/ex_cmds.c @@ -3805,9 +3805,6 @@ do_ecmd( int newcol = -1; int solcol = -1; pos_T *pos; -#ifdef FEAT_SUN_WORKSHOP - char_u *cp; -#endif char_u *command = NULL; #ifdef FEAT_SPELL int did_get_winopts = FALSE; @@ -3881,11 +3878,6 @@ do_ecmd( if (free_fname != NULL) ffname = free_fname; other_file = otherfile(ffname); -#ifdef FEAT_SUN_WORKSHOP - if (usingSunWorkShop && p_acd - && (cp = vim_strrchr(sfname, '/')) != NULL) - sfname = ++cp; -#endif } } @@ -4457,13 +4449,9 @@ do_ecmd( } #endif -#if defined(FEAT_SUN_WORKSHOP) || defined(FEAT_NETBEANS_INTG) +#if defined(FEAT_NETBEANS_INTG) if (curbuf->b_ffname != NULL) { -# ifdef FEAT_SUN_WORKSHOP - if (gui.in_use && usingSunWorkShop) - workshop_file_opened((char *)curbuf->b_ffname, curbuf->b_p_ro); -# endif # ifdef FEAT_NETBEANS_INTG if ((flags & ECMD_SET_HELP) != ECMD_SET_HELP) netbeans_file_opened(curbuf); diff --git a/src/ex_cmds.h b/src/ex_cmds.h index a419a0508b..078af19af5 100644 --- a/src/ex_cmds.h +++ b/src/ex_cmds.h @@ -1670,9 +1670,6 @@ EX(CMD_wq, "wq", ex_exit, EX(CMD_wqall, "wqall", do_wqall, BANG|FILE1|ARGOPT|DFLALL|TRLBAR, ADDR_LINES), -EX(CMD_wsverb, "wsverb", ex_wsverb, - EXTRA|NOTADR|NEEDARG, - ADDR_LINES), EX(CMD_wundo, "wundo", ex_wundo, BANG|NEEDARG|FILE1, ADDR_LINES), diff --git a/src/ex_docmd.c b/src/ex_docmd.c index 7dc805ec1e..97976442eb 100644 --- a/src/ex_docmd.c +++ b/src/ex_docmd.c @@ -411,9 +411,6 @@ static void ex_folddo(exarg_T *eap); #ifndef FEAT_SIGNS # define ex_sign ex_ni #endif -#ifndef FEAT_SUN_WORKSHOP -# define ex_wsverb ex_ni -#endif #ifndef FEAT_NETBEANS_INTG # define ex_nbclose ex_ni # define ex_nbkey ex_ni diff --git a/src/feature.h b/src/feature.h index c2e1dd47e4..d5a6853388 100644 --- a/src/feature.h +++ b/src/feature.h @@ -1232,7 +1232,6 @@ * +perl Perl interface: "--enable-perlinterp" * +python Python interface: "--enable-pythoninterp" * +tcl TCL interface: "--enable-tclinterp" - * +sun_workshop Sun Workshop integration * +netbeans_intg Netbeans integration * +channel Inter process communication */ @@ -1243,13 +1242,6 @@ * +tgetent */ -/* - * The Sun Workshop features currently only work with Motif. - */ -#if !defined(FEAT_GUI_MOTIF) && defined(FEAT_SUN_WORKSHOP) -# undef FEAT_SUN_WORKSHOP -#endif - /* * The Netbeans feature requires +eval. */ @@ -1279,8 +1271,7 @@ * +signs Allow signs to be displayed to the left of text lines. * Adds the ":sign" command. */ -#if defined(FEAT_BIG) || defined(FEAT_SUN_WORKSHOP) \ - || defined(FEAT_NETBEANS_INTG) +#if defined(FEAT_BIG) || defined(FEAT_NETBEANS_INTG) # define FEAT_SIGNS # if ((defined(FEAT_GUI_MOTIF) || defined(FEAT_GUI_ATHENA)) \ && defined(HAVE_X11_XPM_H)) \ @@ -1299,7 +1290,6 @@ || defined(FEAT_GUI_GTK) || defined(FEAT_GUI_W32)) \ && ( ((defined(FEAT_TOOLBAR) || defined(FEAT_GUI_TABLINE)) \ && !defined(FEAT_GUI_GTK) && !defined(FEAT_GUI_W32)) \ - || defined(FEAT_SUN_WORKSHOP) \ || defined(FEAT_NETBEANS_INTG) || defined(FEAT_EVAL)) # define FEAT_BEVAL_GUI # if !defined(FEAT_XFONTSET) && !defined(FEAT_GUI_GTK) \ @@ -1329,37 +1319,25 @@ # define FEAT_GUI_X11 #endif -#if defined(FEAT_SUN_WORKSHOP) || defined(FEAT_NETBEANS_INTG) -/* - * The following features are (currently) only used by Sun Visual WorkShop 6 - * and NetBeans. These features could be used with other integrations with - * debuggers so I've used separate feature defines. - */ +#if defined(FEAT_NETBEANS_INTG) +// NetBeans uses menus. # if !defined(FEAT_MENU) # define FEAT_MENU # endif #endif -#if defined(FEAT_SUN_WORKSHOP) -/* - * Use an alternative method of X input for a secondary - * command input. - */ -# define ALT_X_INPUT - +#if 0 /* * +footer Motif only: Add a message area at the bottom of the * main window area. */ # define FEAT_FOOTER - #endif /* * +autochdir 'autochdir' option. */ -#if defined(FEAT_SUN_WORKSHOP) || defined(FEAT_NETBEANS_INTG) \ - || defined(FEAT_BIG) +#if defined(FEAT_NETBEANS_INTG) || defined(FEAT_BIG) # define FEAT_AUTOCHDIR #endif diff --git a/src/fileio.c b/src/fileio.c index ae70caf978..0608625a4f 100644 --- a/src/fileio.c +++ b/src/fileio.c @@ -5094,11 +5094,6 @@ restore_backup: if (!p_bk && backup != NULL && mch_remove(backup) != 0) emsg(_("E207: Can't delete backup file")); -#ifdef FEAT_SUN_WORKSHOP - if (usingSunWorkShop) - workshop_file_saved((char *) ffname); -#endif - goto nofail; /* diff --git a/src/globals.h b/src/globals.h index 4a0c52ce4c..645c93608c 100644 --- a/src/globals.h +++ b/src/globals.h @@ -1218,10 +1218,9 @@ EXTERN int no_hlsearch INIT(= FALSE); #if defined(FEAT_BEVAL) && !defined(NO_X11_INCLUDES) EXTERN BalloonEval *balloonEval INIT(= NULL); EXTERN int balloonEvalForTerm INIT(= FALSE); -# if defined(FEAT_NETBEANS_INTG) || defined(FEAT_SUN_WORKSHOP) +# if defined(FEAT_NETBEANS_INTG) EXTERN int bevalServers INIT(= 0); # define BEVAL_NETBEANS 0x01 -# define BEVAL_WORKSHOP 0x02 # endif #endif @@ -1363,14 +1362,6 @@ EXTERN linenr_T spell_redraw_lnum INIT(= 0); EXTERN int need_cursor_line_redraw INIT(= FALSE); #endif -#ifdef ALT_X_INPUT -/* we need to be able to go into the dispatch loop while processing a command - * received via alternate input. However, we don't want to process another - * command until the first is completed. - */ -EXTERN int suppress_alternate_input INIT(= FALSE); -#endif - #ifdef USE_MCH_ERRMSG /* Grow array to collect error messages in until they can be displayed. */ EXTERN garray_T error_ga diff --git a/src/gui.c b/src/gui.c index ed89985f0e..cf1cee67ff 100644 --- a/src/gui.c +++ b/src/gui.c @@ -672,10 +672,6 @@ gui_init(void) #ifdef FEAT_MENU gui_create_initial_menus(root_menu); #endif -#ifdef FEAT_SUN_WORKSHOP - if (usingSunWorkShop) - workshop_init(); -#endif #ifdef FEAT_SIGN_ICONS sign_gui_started(); #endif @@ -1604,19 +1600,8 @@ gui_set_shellsize( /* Remember the original window position. */ (void)gui_mch_get_winpos(&x, &y); -#ifdef USE_SUN_WORKSHOP - if (!mustset && usingSunWorkShop - && workshop_get_width_height(&width, &height)) - { - Columns = (width - base_width + gui.char_width - 1) / gui.char_width; - Rows = (height - base_height + gui.char_height - 1) / gui.char_height; - } - else -#endif - { - width = Columns * gui.char_width + base_width; - height = Rows * gui.char_height + base_height; - } + width = Columns * gui.char_width + base_width; + height = Rows * gui.char_height + base_height; if (fit_to_display) { @@ -5128,7 +5113,7 @@ no_console_input(void) } #endif -#if defined(FIND_REPLACE_DIALOG) || defined(FEAT_SUN_WORKSHOP) \ +#if defined(FIND_REPLACE_DIALOG) \ || defined(NEED_GUI_UPDATE_SCREEN) \ || defined(PROTO) /* diff --git a/src/gui_beval.c b/src/gui_beval.c index 9af17a9287..3a282181ac 100644 --- a/src/gui_beval.c +++ b/src/gui_beval.c @@ -199,8 +199,7 @@ gui_mch_currently_showing_beval(void) #endif #endif /* !FEAT_GUI_W32 */ -#if defined(FEAT_SUN_WORKSHOP) || defined(FEAT_NETBEANS_INTG) \ - || defined(FEAT_EVAL) || defined(PROTO) +#if defined(FEAT_NETBEANS_INTG) || defined(FEAT_EVAL) || defined(PROTO) # if !defined(FEAT_GUI_W32) || defined(PROTO) /* @@ -216,7 +215,7 @@ gui_mch_post_balloon(BalloonEval *beval, char_u *mesg) undrawBalloon(beval); } # endif /* !FEAT_GUI_W32 */ -#endif /* FEAT_SUN_WORKSHOP || FEAT_NETBEANS_INTG || PROTO */ +#endif /* FEAT_NETBEANS_INTG || PROTO */ #if !defined(FEAT_GUI_W32) || defined(PROTO) #if defined(FEAT_BEVAL_TIP) || defined(PROTO) diff --git a/src/gui_motif.c b/src/gui_motif.c index b6c140be38..3f354096c1 100644 --- a/src/gui_motif.c +++ b/src/gui_motif.c @@ -698,8 +698,7 @@ manage_centered(Widget dialog_child) XtVaSetValues(shell, XmNmappedWhenManaged, mappedWhenManaged, NULL); } -#if defined(FEAT_MENU) || defined(FEAT_SUN_WORKSHOP) \ - || defined(FEAT_GUI_DIALOG) || defined(PROTO) +#if defined(FEAT_MENU) || defined(FEAT_GUI_DIALOG) || defined(PROTO) /* * Encapsulate the way an XmFontList is created. diff --git a/src/gui_x11.c b/src/gui_x11.c index 652bbec28a..9d8ea7e4a6 100644 --- a/src/gui_x11.c +++ b/src/gui_x11.c @@ -22,11 +22,11 @@ #include /* - * For Workshop XpmP.h is preferred, because it makes the signs drawn with a - * transparent background instead of black. + * XpmP.h is preferred, because it makes the signs drawn with a transparent + * background instead of black. */ #if defined(HAVE_XM_XPMP_H) && defined(FEAT_GUI_MOTIF) \ - && (!defined(HAVE_X11_XPM_H) || defined(FEAT_SUN_WORKSHOP)) + && !defined(HAVE_X11_XPM_H) # include #else # ifdef HAVE_X11_XPM_H @@ -469,7 +469,7 @@ static XtResource vim_resources[] = XtRString, DFLT_TOOLTIP_FONT }, - /* This one isn't really needed, keep for Sun Workshop? */ + /* This one may not be really needed? */ { "balloonEvalFontSet", XtCFontSet, @@ -636,8 +636,7 @@ gui_x11_expose_cb( gui_mch_update(); } -#if ((defined(FEAT_NETBEANS_INTG) || defined(FEAT_SUN_WORKSHOP)) \ - && defined(FEAT_GUI_MOTIF)) || defined(PROTO) +#if (defined(FEAT_NETBEANS_INTG) && defined(FEAT_GUI_MOTIF)) || defined(PROTO) /* * This function fills in the XRectangle object with the current x,y * coordinates and height, width so that an XtVaSetValues to the same shell of @@ -701,15 +700,6 @@ gui_x11_resize_window_cb( #endif ); } -#ifdef FEAT_SUN_WORKSHOP - if (usingSunWorkShop) - { - XRectangle rec; - - shellRectangle(w, &rec); - workshop_frame_moved(rec.x, rec.y, rec.width, rec.height); - } -#endif #if defined(FEAT_NETBEANS_INTG) && defined(FEAT_GUI_MOTIF) if (netbeans_active()) { @@ -1224,22 +1214,6 @@ gui_mch_prepare(int *argc, char **argv) argv[*argc] = NULL; } else -#ifdef FEAT_SUN_WORKSHOP - if (strcmp("-ws", argv[arg]) == 0) - { - usingSunWorkShop++; - p_acd = TRUE; - gui.dofork = FALSE; /* don't fork() when starting GUI */ - mch_memmove(&argv[arg], &argv[arg + 1], - (--*argc - arg) * sizeof(char *)); - argv[*argc] = NULL; -# ifdef WSDEBUG - wsdebug_wait(WT_ENV | WT_WAIT | WT_STOP, "SPRO_GVIM_WAIT", 20); - wsdebug_log_init("SPRO_GVIM_DEBUG", "SPRO_GVIM_DLEVEL"); -# endif - } - else -#endif #ifdef FEAT_NETBEANS_INTG if (strncmp("-nb", argv[arg], 3) == 0) { @@ -1543,11 +1517,6 @@ gui_mch_init(void) if (gui.color_approx) emsg(_("Vim E458: Cannot allocate colormap entry, some colors may be incorrect")); -#ifdef FEAT_SUN_WORKSHOP - if (usingSunWorkShop) - workshop_connect(app_context); -#endif - #ifdef FEAT_BEVAL_GUI gui_init_tooltip_font(); #endif @@ -1681,9 +1650,6 @@ gui_mch_open(void) #ifdef FEAT_XIM xim_init(); #endif -#ifdef FEAT_SUN_WORKSHOP - workshop_postinit(); -#endif return OK; } @@ -2748,12 +2714,7 @@ gui_mch_wait_for_chars(long wtime) #endif focus = gui.in_focus; -#ifdef ALT_X_INPUT - if (suppress_alternate_input) - desired = (XtIMXEvent | XtIMTimer); - else -#endif - desired = (XtIMAll); + desired = (XtIMAll); while (!timed_out) { /* Stop or start blinking when focus changes */ diff --git a/src/integration.c b/src/integration.c deleted file mode 100644 index eb6ccda0a9..0000000000 --- a/src/integration.c +++ /dev/null @@ -1,1112 +0,0 @@ -/* vi:set ts=8 sw=8 noet: - * - * VIM - Vi IMproved by Bram Moolenaar - * Visual Workshop integration by Gordon Prieur - * - * Do ":help uganda" in Vim to read copying and usage conditions. - * Do ":help credits" in Vim to see a list of people who contributed. - * See README.txt for an overview of the Vim source code. - */ - -/* - * Integration with Sun Workshop. - * - * This file should not change much, it's also used by other editors that - * connect to Workshop. Consider changing workshop.c instead. - */ -/* --> consider using MakeSelectionVisible instead of gotoLine hacks - to show the line properly - -> consider using glue instead of our own message wrapping functions - (but can only use glue if we don't have to distribute source) -*/ - -#include "vim.h" - -#include -#include - -#ifdef INET_SOCKETS -#include -#include -#else -#include -#endif - -#include -#include -#include -#ifdef HAVE_LIBGEN_H -# include -#endif -#include -#include - -#include -#include -#include -#include - -#ifdef HAVE_X11_XPM_H -# include -#else -# ifdef HAVE_XM_XPMP_H -# include -# endif -#endif - -#ifdef HAVE_UTIL_DEBUG_H -# include -#endif -#ifdef HAVE_UTIL_MSGI18N_H -# include -#endif - -#include "integration.h" /* */ -#ifdef HAVE_FRAME_H -# include -#endif - -#ifndef MAX -# define MAX(a, b) (a) > (b) ? (a) : (b) -#endif - -#ifndef NOCATGETS -# define NOCATGETS(x) x -#endif - -/* Functions private to this file */ -static void workshop_disconnect(void); -static void workshop_sensitivity(int num, char *table); -static void adjust_sign_name(char *filename); -static void process_menuItem(char *); -static void process_toolbarButton(char *); -static void workshop_set_option_first(char *name, char *value); - -static size_t dummy; /* to ignore return value of write() */ - -#define CMDBUFSIZ 2048 - -#ifdef DEBUG -static FILE *dfd; -static void pldebug(char *, ...); -static void unrecognised_message(char *); - -#define HANDLE_ERRORS(cmd) else unrecognised_message(cmd); -#else -#define HANDLE_ERRORS(cmd) -#endif - -/* - * Version number of the protocol between an editor and eserve. - * This number should be incremented when the protocol - * is changed. - */ -#define PROTOCOL_VERSION "4.0.0" - -static int sd = -1; -static XtInputId inputHandler; /* Cookie for input */ - -Boolean save_files = True; /* When true, save all files before build actions */ - - static void -workshop_connection_closed(void) -{ - /* - * socket closed on other end - */ - XtRemoveInput(inputHandler); - inputHandler = 0; - sd = -1; -} - - static char * -getCommand(void) -{ - int len; /* length of this command */ - char lenbuf[7]; /* get the length string here */ - char *newcb; /* used to realloc cmdbuf */ - static char *cmdbuf;/* get the command string here */ - static int cbsize;/* size of cmdbuf */ - - if ((len = read(sd, &lenbuf, 6)) == 6) { - lenbuf[6] = 0; /* Terminate buffer such that atoi() works right */ - len = atoi(lenbuf); - if (cbsize < (len + 1)) { - newcb = (char *) realloc(cmdbuf, - MAX((len + 256), CMDBUFSIZ)); - if (newcb != NULL) { - cmdbuf = newcb; - cbsize = MAX((len + 256), CMDBUFSIZ); - } - } - if (cbsize >= len && (len = read(sd, cmdbuf, len)) > 0) { - cmdbuf[len] = 0; - return cmdbuf; - } else { - return NULL; - } - } else { - if (len == 0) { /* EOF */ - workshop_connection_closed(); - } - return NULL; - } - -} - - static void -messageFromEserve(XtPointer clientData UNUSED, - int *dum1 UNUSED, - XtInputId *dum2 UNUSED) -{ - char *cmd; /* the 1st word of the command */ - - cmd = getCommand(); - if (cmd == NULL) { - /* We're being shut down by eserve and the "quit" message - * didn't arrive before the socket connection got closed */ - return; - } -#ifdef DEBUG - pldebug("%s\n", cmd); -#endif - switch (*cmd) { - case 'a': - if (cmd[1] == 'c' && - strncmp(cmd, NOCATGETS("ack "), 4) == 0) { - int ackNum; - char buf[20]; - - ackNum = atoi(&cmd[4]); - vim_snprintf(buf, sizeof(buf), - NOCATGETS("ack %d\n"), ackNum); - dummy = write(sd, buf, strlen(buf)); - } else if (strncmp(cmd, - NOCATGETS("addMarkType "), 12) == 0) { - int idx; - char *color; - char *sign; - - idx = atoi(strtok(&cmd[12], " ")); - color = strtok(NULL, NOCATGETS("\001")); - sign = strtok(NULL, NOCATGETS("\001")); - /* Skip space that separates names */ - if (color) { - color++; - } - if (sign) { - sign++; - } - /* Change sign name to accommodate a different size? */ - adjust_sign_name(sign); - workshop_add_mark_type(idx, color, sign); - } - HANDLE_ERRORS(cmd); - break; - - case 'b': - if (strncmp(cmd, - NOCATGETS("balloon "), 8) == 0) { - char *tip; - - tip = strtok(&cmd[8], NOCATGETS("\001")); - workshop_show_balloon_tip(tip); - } - HANDLE_ERRORS(cmd); - break; - - case 'c': - if (strncmp(cmd, - NOCATGETS("changeMarkType "), 15) == 0) { - char *file; - int markId; - int type; - - file = strtok(&cmd[15], " "); - markId = atoi(strtok(NULL, " ")); - type = atoi(strtok(NULL, " ")); - workshop_change_mark_type(file, markId, type); - } - HANDLE_ERRORS(cmd); - break; - - case 'd': - if (strncmp(cmd, NOCATGETS("deleteMark "), 11) == 0) { - char *file; - int markId; - - file = strtok(&cmd[11], " "); - markId = atoi(strtok(NULL, " ")); - workshop_delete_mark(file, markId); - } - HANDLE_ERRORS(cmd); - break; - - case 'f': - if (cmd[1] == 'o' && - strncmp(cmd, NOCATGETS("footerMsg "), 10) == 0) { - int severity; - char *message; - - severity = - atoi(strtok(&cmd[10], " ")); - message = strtok(NULL, NOCATGETS("\001")); - - workshop_footer_message(message, severity); - } else if (strncmp(cmd, - NOCATGETS("frontFile "), 10) == 0) { - char *file; - - file = strtok(&cmd[10], " "); - workshop_front_file(file); - } - HANDLE_ERRORS(cmd); - break; - - case 'g': - if (cmd[1] == 'e' && - strncmp(cmd, NOCATGETS("getMarkLine "), 12) == 0) { - char *file; - int markid; - int line; - char buf[100]; - - file = strtok(&cmd[12], " "); - markid = atoi(strtok(NULL, " ")); - line = workshop_get_mark_lineno(file, markid); - vim_snprintf(buf, sizeof(buf), - NOCATGETS("markLine %s %d %d\n"), - file, markid, line); - dummy = write(sd, buf, strlen(buf)); - } else if (cmd[1] == 'o' && cmd[4] == 'L' && - strncmp(cmd, NOCATGETS("gotoLine "), 9) == 0) { - char *file; - int lineno; - - file = strtok(&cmd[9], " "); - lineno = atoi(strtok(NULL, " ")); - workshop_goto_line(file, lineno); - } else if (strncmp(cmd, - NOCATGETS("gotoMark "), 9) == 0) { - char *file; - int markId; - char *message; - - file = strtok(&cmd[9], " "); - markId = atoi(strtok(NULL, " ")); - message = strtok(NULL, NOCATGETS("\001")); - workshop_goto_mark(file, markId, message); -#ifdef NOHANDS_SUPPORT_FUNCTIONS - } else if (strcmp(cmd, NOCATGETS("getCurrentFile")) == 0) { - char *f = workshop_test_getcurrentfile(); - char buffer[2*MAXPATHLEN]; - vim_snprintf(buffer, sizeof(buffer), - NOCATGETS("currentFile %d %s"), - f ? (int)strlen(f) : 0, f ? f : ""); - workshop_send_message(buffer); - } else if (strcmp(cmd, NOCATGETS("getCursorRow")) == 0) { - int row = workshop_test_getcursorrow(); - char buffer[2*MAXPATHLEN]; - vim_snprintf(buffer, sizeof(buffer), - NOCATGETS("cursorRow %d"), row); - workshop_send_message(buffer); - } else if (strcmp(cmd, NOCATGETS("getCursorCol")) == 0) { - int col = workshop_test_getcursorcol(); - char buffer[2*MAXPATHLEN]; - vim_snprintf(buffer, sizeof(buffer), - NOCATGETS("cursorCol %d"), col); - workshop_send_message(buffer); - } else if (strcmp(cmd, NOCATGETS("getCursorRowText")) == 0) { - char *t = workshop_test_getcursorrowtext(); - char buffer[2*MAXPATHLEN]; - vim_snprintf(buffer, sizeof(buffer), - NOCATGETS("cursorRowText %d %s"), - t ? (int)strlen(t) : 0, t ? t : ""); - workshop_send_message(buffer); - } else if (strcmp(cmd, NOCATGETS("getSelectedText")) == 0) { - char *t = workshop_test_getselectedtext(); - char buffer[2*MAXPATHLEN]; - vim_snprintf(buffer, sizeof(buffer), - NOCATGETS("selectedText %d %s"), - t ? (int)strlen(t) : 0, t ? t : ""); - workshop_send_message(buffer); -#endif - } - HANDLE_ERRORS(cmd); - break; - - case 'l': - if (strncmp(cmd, NOCATGETS("loadFile "), 9) == 0) { - char *file; - int line; - char *frameid; - - file = strtok(&cmd[9], " "); - line = atoi(strtok(NULL, " ")); - frameid = strtok(NULL, " "); - workshop_load_file(file, line, frameid); - } - HANDLE_ERRORS(cmd); - break; - - case 'm': /* Menu, minimize, maximize */ - if (cmd[1] == 'e' && cmd[4] == 'B' && - strncmp(cmd, NOCATGETS("menuBegin "), 10) == 0) { - workshop_menu_begin(&cmd[10]); - } else if (cmd[1] == 'e' && cmd[4] == 'I' && - strncmp(cmd, NOCATGETS("menuItem "), 9) == 0) { - process_menuItem(cmd); - } else if (cmd[1] == 'e' && cmd[4] == 'E' && - strcmp(cmd, NOCATGETS("menuEnd")) == 0) { - workshop_menu_end(); - } else if (cmd[1] == 'a' && - strcmp(cmd, NOCATGETS("maximize")) == 0) { - workshop_maximize(); - } else if (strcmp(cmd, NOCATGETS("minimize")) == 0) { - workshop_minimize(); - } - HANDLE_ERRORS(cmd); - break; - - case 'o': - if (cmd[1] == 'p' && - strcmp(cmd, NOCATGETS("option"))) { - char *name; - char *value; - - name = strtok(&cmd[7], " "); - value = strtok(NULL, " "); - workshop_set_option_first(name, value); - } - HANDLE_ERRORS(cmd); - break; - - case 'p': - if (strcmp(cmd, NOCATGETS("ping")) == 0) { -#if 0 - int pingNum; - - pingNum = atoi(&cmd[5]); - workshop_send_ack(ackNum); - /* WHAT DO I DO HERE? */ -#endif - } - HANDLE_ERRORS(cmd); - break; - - case 'q': - if (strncmp(cmd, NOCATGETS("quit"), 4) == 0) { - - /* Close the connection. It's important to do - * that now, since workshop_quit might be - * looking at open files. For example, if you - * have modified one of the files without - * saving, NEdit will ask you what you want to - * do, and spin loop by calling - * XtAppProcessEvent while waiting for your - * reply. In this case, if we still have an - * input handler and the socket has been - * closed on the other side when eserve - * expired, we will hang in IoWait. - */ - workshop_disconnect(); - - workshop_quit(); - } - HANDLE_ERRORS(cmd); - break; - - case 'r': - if (cmd[1] == 'e' && - strncmp(cmd, NOCATGETS("reloadFile "), 11) == 0) { - char *file; - int line; - - file = strtok(&cmd[11], " "); - line = atoi(strtok(NULL, " ")); - workshop_reload_file(file, line); - } - HANDLE_ERRORS(cmd); - break; - - case 's': - if (cmd[1] == 'e' && cmd[2] == 't' && - strncmp(cmd, NOCATGETS("setMark "), 8) == 0) { - char *file; - int line; - int markId; - int type; - - file = strtok(&cmd[8], " "); - line = atoi(strtok(NULL, " ")); - markId = atoi(strtok(NULL, " ")); - type = atoi(strtok(NULL, " ")); - workshop_set_mark(file, line, markId, type); - } else if (cmd[1] == 'h' && - strncmp(cmd, NOCATGETS("showFile "), 9) == 0) { - workshop_show_file(&cmd[9]); - } else if (cmd[1] == 'u' && - strncmp(cmd, NOCATGETS("subMenu "), 8) == 0) { - char *label; - - label = strtok(&cmd[8], NOCATGETS("\001")); - workshop_submenu_begin(label); - } else if (cmd[1] == 'u' && - strcmp(cmd, NOCATGETS("subMenuEnd")) == 0) { - workshop_submenu_end(); - } else if (cmd[1] == 'e' && cmd[2] == 'n' && - strncmp(cmd, NOCATGETS("sensitivity "), 12) == 0) { - int num; - char *bracket; - char *table; - - num = atoi(strtok(&cmd[12], " ")); - bracket = strtok(NULL, " "); - if (*bracket != '[') { - fprintf(stderr, NOCATGETS("Parsing " - "error for sensitivity\n")); - } else { - table = strtok(NULL, NOCATGETS("]")); - workshop_sensitivity(num, table); - } - } else if (cmd[1] == 'e' && cmd[2] == 'n' && cmd[3] == 'd' && - strncmp(cmd, NOCATGETS("sendVerb "), 9) == 0) { - /* Send the given verb back (used for the - * debug.lineno callback (such that other tools - * can obtain the position coordinates or the - * selection) */ - char *verb; - - verb = strtok(&cmd[9], " "); - workshop_perform_verb(verb, NULL); - } else if (cmd[1] == 'a' && - strncmp(cmd, NOCATGETS("saveFile "), 9) == 0) { - workshop_save_file(&cmd[9]); -#ifdef NOHANDS_SUPPORT_FUNCTIONS - } else if (strncmp(cmd, NOCATGETS("saveSensitivity "), 16) == 0) { - char *file; - - file = strtok(&cmd[16], " "); - workshop_save_sensitivity(file); -#endif - } - HANDLE_ERRORS(cmd); - break; - - case 't': /* Toolbar */ - if (cmd[8] == 'e' && - strncmp(cmd, NOCATGETS("toolbarBegin"), 12) == 0) { - workshop_toolbar_begin(); - } else if (cmd[8] == 'u' && - strncmp(cmd, NOCATGETS("toolbarButton"), 13) == 0) { - process_toolbarButton(cmd); - } else if (cmd[7] == 'E' && - strcmp(cmd, NOCATGETS("toolbarEnd")) == 0) { - workshop_toolbar_end(); - } - HANDLE_ERRORS(cmd); - break; - -#ifdef DEBUG - default: - unrecognised_message(cmd); - break; -#endif - } -} - - static void -process_menuItem( - char *cmd) -{ - char *label = strtok(&cmd[9], NOCATGETS("\001")); - char *verb = strtok(NULL, NOCATGETS("\001")); - char *acc = strtok(NULL, NOCATGETS("\001")); - char *accText = strtok(NULL, NOCATGETS("\001")); - char *name = strtok(NULL, NOCATGETS("\001")); - char *sense = strtok(NULL, NOCATGETS("\n")); - char *filepos = strtok(NULL, NOCATGETS("\n")); - if (*acc == '-') { - acc = NULL; - } - if (*accText == '-') { - accText = NULL; - } - workshop_menu_item(label, verb, acc, accText, name, filepos, sense); - -} - - - static void -process_toolbarButton( - char *cmd) /* button definition */ -{ - char *label = strtok(&cmd[14], NOCATGETS("\001")); - char *verb = strtok(NULL, NOCATGETS("\001")); - char *senseVerb = strtok(NULL, NOCATGETS("\001")); - char *filepos = strtok(NULL, NOCATGETS("\001")); - char *help = strtok(NULL, NOCATGETS("\001")); - char *sense = strtok(NULL, NOCATGETS("\001")); - char *file = strtok(NULL, NOCATGETS("\001")); - char *left = strtok(NULL, NOCATGETS("\n")); - - if (!strcmp(label, NOCATGETS("-"))) { - label = NULL; - } - if (!strcmp(help, NOCATGETS("-"))) { - help = NULL; - } - if (!strcmp(file, NOCATGETS("-"))) { - file = NULL; - } - if (!strcmp(senseVerb, NOCATGETS("-"))) { - senseVerb = NULL; - } - workshop_toolbar_button(label, verb, senseVerb, filepos, help, - sense, file, left); -} - - -#ifdef DEBUG - static void -unrecognised_message( - char *cmd) -{ - pldebug("Unrecognised eserve message:\n\t%s\n", cmd); - /* abort(); */ -} -#endif - - -/* Change sign name to accommodate a different size: - * Create the filename based on the height. The filename format - * of multisize icons are: - * x.xpm : largest icon - * x1.xpm : smaller icon - * x2.xpm : smallest icon */ - static void -adjust_sign_name(char *filename) -{ - char *s; - static int fontSize = -1; - - if (fontSize == -1) - fontSize = workshop_get_font_height(); - if (fontSize == 0) - return; - if (filename[0] == '-') - return; - - /* This is ugly: later we should instead pass the fontheight over - * to eserve on startup and let eserve just send the right filenames - * to us in the first place - - * I know that the filename will end with 1.xpm (see - * GuiEditor.cc`LispPrintSign if you wonder why) */ - s = filename+strlen(filename)-5; - if (fontSize <= 11) - strcpy(s, "2.xpm"); - else if (fontSize <= 15) - strcpy(s, "1.xpm"); - else - strcpy(s, ".xpm"); -} - -#if 0 -/* Were we invoked by WorkShop? This function can be used early during startup - if you want to do things differently if the editor is started standalone - or in WorkShop mode. For example, in standalone mode you may not want to - add a footer/message area or a sign gutter. */ - int -workshop_invoked(void) -{ - static int result = -1; - if (result == -1) { - result = (getenv(NOCATGETS("SPRO_EDITOR_SOCKET")) != NULL); - } - return result; -} -#endif - -/* Connect back to eserve */ -void workshop_connect(XtAppContext context) -{ -#ifdef INET_SOCKETS - struct sockaddr_in server; - struct hostent * host; - int port; -#else - struct sockaddr_un server; -#endif - char buf[32]; - char * address; -#ifdef DEBUG - char *file; -#endif - - address = getenv(NOCATGETS("SPRO_EDITOR_SOCKET")); - if (address == NULL) { - return; - } - -#ifdef INET_SOCKETS - port = atoi(address); - - if ((sd = socket(AF_INET, SOCK_STREAM, 0)) == -1) { - PERROR(NOCATGETS("workshop_connect")); - return; - } - - /* Get the server internet address and put into addr structure */ - /* fill in the socket address structure and connect to server */ - vim_memset((char *)&server, '\0', sizeof(server)); - server.sin_family = AF_INET; - server.sin_port = port; - if ((host = gethostbyname(NOCATGETS("localhost"))) == NULL) { - PERROR(NOCATGETS("gethostbyname")); - sd = -1; - return; - } - memcpy((char *)&server.sin_addr, host->h_addr, host->h_length); -#else - if ((sd = socket(AF_UNIX, SOCK_STREAM, 0)) == -1) { - PERROR(NOCATGETS("workshop_connect")); - return; - } - - server.sun_family = AF_UNIX; - strcpy(server.sun_path, address); -#endif - /* Connect to server */ - if (connect(sd, (struct sockaddr *)&server, sizeof(server))) { - if (errno == ECONNREFUSED) { - close(sd); -#ifdef INET_SOCKETS - if ((sd = socket(AF_INET, SOCK_STREAM, 0)) == -1) { - PERROR(NOCATGETS("workshop_connect")); - return; - } -#else - if ((sd = socket(AF_UNIX, SOCK_STREAM, 0)) == -1) { - PERROR(NOCATGETS("workshop_connect")); - return; - } -#endif - if (connect(sd, (struct sockaddr *)&server, - sizeof(server))) { - PERROR(NOCATGETS("workshop_connect")); - return; - } - - } else { - PERROR(NOCATGETS("workshop_connect")); - return; - } - } - - /* tell notifier we are interested in being called - * when there is input on the editor connection socket - */ - inputHandler = XtAppAddInput(context, sd, (XtPointer) XtInputReadMask, - messageFromEserve, NULL); -#ifdef DEBUG - if ((file = getenv(NOCATGETS("SPRO_PLUGIN_DEBUG"))) != NULL) { - char buf[BUFSIZ]; - - unlink(file); - vim_snprintf(buf, sizeof(buf), "date > %s", file); - system(buf); - dfd = fopen(file, "a"); - } else { - dfd = NULL; - } -#endif - - vim_snprintf(buf, sizeof(buf), NOCATGETS("connected %s %s %s\n"), - workshop_get_editor_name(), - PROTOCOL_VERSION, - workshop_get_editor_version()); - dummy = write(sd, buf, strlen(buf)); - - vim_snprintf(buf, sizeof(buf), NOCATGETS("ack 1\n")); - dummy = write(sd, buf, strlen(buf)); -} - - static void -workshop_disconnect(void) -{ - /* Probably need to send some message here */ - - /* - * socket closed on other end - */ - XtRemoveInput(inputHandler); - close(sd); - inputHandler = 0; - sd = -1; - -} - -/* - * Utility functions - */ - - -/* Minimize and maximize shells. From libutil's shell.cc. */ - -/* utility functions from libutil's shell.cc */ -static Boolean -isWindowMapped(Display *display, Window win) -{ - XWindowAttributes winAttrs; - XGetWindowAttributes(display, - win, - &winAttrs); - if (winAttrs.map_state == IsViewable) { - return(True); - } else { - return(False); - } -} - -static Boolean -isMapped(Widget widget) -{ - if (widget == NULL) { - return(False); - } - - if (XtIsRealized(widget) == False) { - return(False); - } - - return(isWindowMapped(XtDisplay(widget), XtWindow(widget))); -} - -static Boolean -widgetIsIconified( - Widget w) -{ - Atom wm_state; - Atom act_type; /* actual Atom type returned */ - int act_fmt; /* actual format returned */ - u_long nitems_ret; /* number of items returned */ - u_long bytes_after; /* number of bytes remaining */ - u_long *property; /* actual property returned */ - - /* - * If a window is iconified its WM_STATE is set to IconicState. See - * ICCCM Version 2.0, section 4.1.3.1 for more details. - */ - - wm_state = XmInternAtom(XtDisplay(w), NOCATGETS("WM_STATE"), False); - if (XtWindow(w) != 0) { /* only check if window exists! */ - XGetWindowProperty(XtDisplay(w), XtWindow(w), wm_state, 0L, 2L, - False, AnyPropertyType, &act_type, &act_fmt, &nitems_ret, - &bytes_after, (char_u **) &property); - if (nitems_ret == 2 && property[0] == IconicState) { - return True; - } - } - - return False; - -} /* end widgetIsIconified */ - -void -workshop_minimize_shell(Widget shell) -{ - if (shell != NULL && - XtIsObject(shell) && - XtIsRealized(shell) == True) { - if (isMapped(shell) == True) { - XIconifyWindow(XtDisplay(shell), XtWindow(shell), - XScreenNumberOfScreen(XtScreen(shell))); - } - XtVaSetValues(shell, - XmNiconic, True, - NULL); - } -} - -void workshop_maximize_shell(Widget shell) -{ - if (shell != NULL && - XtIsRealized(shell) == True && - widgetIsIconified(shell) == True && - isMapped(shell) == False) { - XtMapWidget(shell); - /* This used to be - XtPopdown(shell); - XtPopup(shell, XtGrabNone); - However, I found that that would drop any transient - windows that had been iconified with the window. - According to the ICCCM, XtMapWidget should be used - to bring a window from Iconic to Normal state. - However, Rich Mauri did a lot of work on this during - Bart, and found that XtPopDown,XtPopup was required - to fix several bugs involving multiple CDE workspaces. - I've tested it now and things seem to work fine but - I'm leaving this note for history in case this needs - to be revisited. - */ - } -} - - -Boolean workshop_get_width_height(int *width, int *height) -{ - static int wid = 0; - static int hgt = 0; - static Boolean firstTime = True; - static Boolean success = False; - - if (firstTime) { - char *settings; - - settings = getenv(NOCATGETS("SPRO_GUI_WIDTH_HEIGHT")); - if (settings != NULL) { - wid = atoi(settings); - settings = strrchr(settings, ':'); - if (settings++ != NULL) { - hgt = atoi(settings); - } - if (wid > 0 && hgt > 0) { - success = True; - } - firstTime = False; - } - } - - if (success) { - *width = wid; - *height = hgt; - } - return success; -} - -/* - * Toolbar code - */ - - static void -workshop_sensitivity(int num, char *table) -{ - /* build up a verb table */ - VerbSense *vs; - int i; - char *s; - if ((num < 1) || (num > 500)) { - return; - } - - vs = (VerbSense *)malloc((num+1)*sizeof(VerbSense)); - - /* Point to the individual names (destroys the table string, but - * that's okay -- this is more efficient than duplicating strings) */ - s = table; - for (i = 0; i < num; i++) { - while (*s == ' ') { - s++; - } - vs[i].verb = s; - while (*s && (*s != ' ') && (*s != '\001')) { - s++; - } - if (*s == 0) { - vs[i].verb = NULL; - break; - } - if (*s == '\001') { - *s = 0; - s++; - } - *s = 0; - s++; - while (*s == ' ') { - s++; - } - if (*s == '1') { - vs[i].sense = 1; - } else { - vs[i].sense = 0; - } - s++; - } - vs[i].verb = NULL; - - workshop_frame_sensitivities(vs); - - free(vs); -} - -/* - * Options code - */ -/* Set an editor option. - * IGNORE an option if you do not recognize it. - */ - static void -workshop_set_option_first(char *name, char *value) -{ - /* Currently value can only be on/off. This may change later (for - * example to set an option like "balloon evaluate delay", but - * for now just convert it into a boolean */ - Boolean on = !strcmp(value, "on"); - - if (!strcmp(name, "workshopkeys")) { - workshop_hotkeys(on); - } else if (!strcmp(name, "savefiles")) { - save_files = on; - } else if (!strcmp(name, "balloon")) { - workshop_balloon_mode(on); - } else if (!strcmp(name, "balloondelay")) { - int delay = atoi(value); - /* Should I validate the number here?? */ - workshop_balloon_delay(delay); - } else { - /* Let editor interpret it */ - workshop_set_option(name, value); - } -} - - -void workshop_file_closed_lineno(char *filename, int lineno) -{ - char buffer[2*MAXPATHLEN]; - vim_snprintf(buffer, sizeof(buffer), - NOCATGETS("deletedFile %s %d\n"), filename, lineno); - dummy = write(sd, buffer, strlen(buffer)); -} - -void workshop_file_opened(char *filename, int readOnly) -{ - char buffer[2*MAXPATHLEN]; - vim_snprintf(buffer, sizeof(buffer), - NOCATGETS("loadedFile %s %d\n"), filename, readOnly); - dummy = write(sd, buffer, strlen(buffer)); -} - - -void workshop_file_saved(char *filename) -{ - char buffer[2*MAXPATHLEN]; - vim_snprintf(buffer, sizeof(buffer), - NOCATGETS("savedFile %s\n"), filename); - dummy = write(sd, buffer, strlen(buffer)); - - /* Let editor report any moved marks that the eserve client - * should deal with (for example, moving location-based breakpoints) */ - workshop_moved_marks(filename); -} - -void workshop_frame_moved(int new_x, int new_y, int new_w, int new_h) -{ - char buffer[200]; - - if (sd >= 0) - { - vim_snprintf(buffer, sizeof(buffer), - NOCATGETS("frameAt %d %d %d %d\n"), - new_x, new_y, new_w, new_h); - dummy = write(sd, buffer, strlen(buffer)); - } -} - -/* A button in the toolbar has been pushed. - * Clientdata is a pointer used by the editor code to figure out the - * positions for this toolbar (probably by storing a window pointer, - * and then fetching the current buffer for that window and looking up - * cursor and selection positions etc.) */ -void workshop_perform_verb(char *verb, void *clientData) -{ - char *filename; - int curLine; - int curCol; - int selStartLine; - int selStartCol; - int selEndLine; - int selEndCol; - int selLength; - char *selection; - - char buf[2*MAXPATHLEN]; -/* Later: needsFilePos indicates whether or not we need to fetch all this - * info for this verb... for now, however, it looks as if - * eserve parsing routines depend on it always being present */ - - if (workshop_get_positions(clientData, - &filename, - &curLine, - &curCol, - &selStartLine, - &selStartCol, - &selEndLine, - &selEndCol, - &selLength, - &selection)) { - if (selection == NULL) { - selection = NOCATGETS(""); - } - - /* Should I save the files??? This is currently done by checking - if the verb is one of a few recognized ones. Later we can pass - this list from eserve to the editor (it's currently hardcoded in - vi and emacs as well). */ - if (save_files) { - if (!strcmp(verb, "build.build") || !strcmp(verb, "build.build-file") || - !strcmp(verb, "debug.fix") || !strcmp(verb, "debug.fix-all")) { - workshop_save_files(); - } - } - - vim_snprintf(buf, sizeof(buf), - NOCATGETS("toolVerb %s %s %d,%d %d,%d %d,%d %d %s\n"), - verb, - filename, - curLine, curCol, - selStartLine, selStartCol, - selEndLine, selEndCol, - selLength, - selection); - dummy = write(sd, buf, strlen(buf)); - if (*selection) { - free(selection); - } - } -} - -/* Send a message to eserve */ -#if defined(NOHANDS_SUPPORT_FUNCTIONS) || defined(FEAT_BEVAL_GUI) -void workshop_send_message(char *buf) -{ - dummy = write(sd, buf, strlen(buf)); -} -#endif - -/* Some methods, like currentFile, cursorPos, etc. are missing here. - * But it looks like these are used for NoHands testing only so we - * won't bother requiring editors to implement these - */ - - -#ifdef DEBUG - - static void -pldebug( - char *fmt, /* a printf style format line */ - ...) -{ - va_list ap; - - if (dfd != NULL) { - va_start(ap, fmt); - vfprintf(dfd, fmt, ap); - va_end(ap); - fflush(dfd); - } - -} /* end pldebug */ - -#endif diff --git a/src/integration.h b/src/integration.h deleted file mode 100644 index 817b683f65..0000000000 --- a/src/integration.h +++ /dev/null @@ -1,452 +0,0 @@ -/* vi:set ts=8 sts=4 sw=4 noet: - * - * VIM - Vi IMproved by Bram Moolenaar - * Visual Workshop integration by Gordon Prieur - * - * Do ":help uganda" in Vim to read copying and usage conditions. - * Do ":help credits" in Vim to see a list of people who contributed. - */ -/* - THIS IS AN UNSTABLE INTERFACE! It is unsupported and will likely - change in future releases, possibly breaking compatibility! -*/ - -#ifndef _INTEGRATION_H -#define _INTEGRATION_H - -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -/* Enable NoHands test support functions. Define this only if you want to - compile in support in the editor such that it can be run under - the WorkShop test suite. */ -#ifndef NOHANDS_SUPPORT_FUNCTIONS -#define NOHANDS_SUPPORT_FUNCTIONS -#endif - - -/* This header file has three parts. - * 1. Functions you need to implement; these are called by the integration - * library - * 2. Functions you need to call when certain events happen in the editor; - * these are implemented by the integration library - * 3. Utility functions provided by the integration library; these make - * task 1 a bit easier. - */ - -/* - * The following functions need to be implemented by the editor - * integration code (and will be editor-specific). Please see the - * sample workshop.c file for comments explaining what each functions - * needs to do, what the arguments mean, etc. - */ - -/* - * This string is recognized by eserve and should be all lower case. - * This is how the editor detects that it is talking to NEdit instead - * of Vim, for example, when the connection is initiated from the editor. - * Examples: "nedit", "gvim" - */ -char *workshop_get_editor_name(); - -/* - * Version number of the editor. - * This number is communicated along with the protocol - * version to the application. - * Examples: "5.0.2", "19.3" - */ -char *workshop_get_editor_version(); - - -/* Goto a given line in a given file */ -void workshop_goto_line(char *filename, int lineno); - - -/* Set mark in a given file */ -void workshop_set_mark(char *filename, int lineno, int markId, int type); - - -/* Change mark type (for example from current-pc to pc-and-breakpoint) */ -void workshop_change_mark_type(char *filename, int markId, int type); - -/* - * Goto the given mark in a file (e.g. show it). - * If message is not null, display it in the footer. - */ - -void workshop_goto_mark(char *filename, int markId, char *message); - - -/* Delete mark */ -void workshop_delete_mark(char *filename, int markId); - -/* Begin/end pair of messages indicating that a series of _set_mark and - * _delete_mark messages will be sent. This can/should be used to suppress gui - * redraws between the begin and end messages. For example, if you switch - * to a headerfile that has a class breakpoint set, there may be hundreds - * of marks that need to be added. You don't want to refresh the gui for each - * added sign, you want to wait until the final end message. - */ -void workshop_mark_batch_begin(); -void workshop_mark_batch_end(); - - -/* Load a given file into the WorkShop buffer. "frameid" is a token string - * that identifies which frame the file would like to be loaded into. This - * will usually be null, in which case you should use the default frame. - * However, if frameid is not null, you need to find a frame that has this - * frameid, and replace the file in that frame. Finally, if the frameid is - * one you haven't seen before, you should create a new frame for this file. - * Note that "frameid" is a string value, not just an opaque pointer, so - * you should use strcmp rather than == when testing for equality. - */ -void workshop_load_file(char *filename, int line, char *frameid); - - -/* Reload the WorkShop buffer */ -void workshop_reload_file(char *filename, int line); - - -/* Show the given file */ -void workshop_show_file(char *filename); - - -/* Front the given file */ -void workshop_front_file(char *filename); - - -/* Save the given file */ -void workshop_save_file(char *filename); - -/* Save all WorkShop edited files. You can ask user about modified files - * and skip saving any files the user doesn't want to save. - * This function is typically called when the user issues a build, a fix, - * etc. (and also if you select "Save All" from the File menu :-) - */ -void workshop_save_files(); - -/* Show a message in all footers. - Severity currently is not defined. */ -void workshop_footer_message(char *message, int severity); - -/* Minimize all windows */ -void workshop_minimize(); - - -/* Maximize all windows */ -void workshop_maximize(); - - -/* - * Create a new mark type, assign it a given index, a given textbackground - * color, and a given left-margin sign (where sign is a filename to an - * .xpm file) - */ -void workshop_add_mark_type(int idx, char *colorspec, char *sign); - - -/* Get mark line number */ -int workshop_get_mark_lineno(char *filename, int markId); - - -/* Exit editor; save confirmation dialogs are okay */ -void workshop_quit(); - -/* Set an editor option. - * For example, name="syntax",value="on" would enable syntax highlighting. - * The currently defined options are: - * lineno {on,off} show line numbers - * syntax {on,off} highlight syntax - * parentheses {on,off} show matching parentheses - * The following options are interpreted by the library for you (so you - * will never see the message. However, the implementation requires you - * to provide certain callbacks, like restore hotkeys or save all files. - * These are documented separately). - * workshopkeys {on,off} set workshop hotkeys - * savefiles {on,off} save all files before issuing a build - * balloon {on,off} enable/disable balloon evaluate - * - * IGNORE an option if you do not recognize it. - */ -void workshop_set_option(char *name, char *value); - -/* - * (See workshop_add_frame first.) This function notifies the editor - * that the frame for the given window (indicated by "frame", which - * was supplied by the editor in workshop_add_frame) has been created. - * This can happen much later than the workshop_add_frame message, since - * often a window is created on editor startup, while the frame description - * is passed over from eserve much later, when the connection is complete. - * This gives the editor a chance to kick its GUI to show the frame - * properly; typically you'll unmanage and remanage the parent widget to - * force a geometry recalculation. - */ - -void workshop_reconfigure_frame(void *frame); - - -/* Are there any moved marks? If so, call workshop_move_mark on - * each of them now. This is how eserve can find out if for example - * breakpoints have moved when a program has been recompiled and - * reloaded into dbx. - */ -void workshop_moved_marks(char *filename); - - -/* A button in the toolbar has been pushed. "frame" is provided - * which should let you determine which toolbar had a button pushed - * (you supplied this clientData when you created a toolbar). From - * this you should be able to figure out which file the operation - * applies to, and for that window the cursor line and column, - * selection begin line and column, selection end line and column, - * selection text and selection text length. The column numbers are - * currently unused but implement it anyway in case we decide to use - * them in the future. - * Note that frame can be NULL. In this case, you should pick - * a default window to translate coordinates for (ideally, the - * last window the user has operated on.) This will be the case when - * the user clicks on a Custom Button programmed to take the current - * line number as an argument. Here it's ambiguous which buffer - * to use, so you need to pick one. - * (Interface consideration: Perhaps we instead should add smarts - * into the library such that we remember which frame pointer - * we last noticed (e.g. last call to get_positions, or perhaps - * last add_frame) and then pass that instead? For example, we could - * have all workshop operations return the clientData when passed - * the filename (or add a filename-to-clientData converter?) and then - * remember the last filename/clientData used. - */ -int workshop_get_positions(void *frame, - char **filename, - int *curLine, - int *curCol, - int *selStartLine, - int *selStartCol, - int *selEndLine, - int *selEndCol, - int *selLength, - char **selection); - -/* The following function should return the height of a character - * in the text display. This is used to pick out a suitable size - * for the signs to match the text (currently available in three - * sizes). If you just return 0, WorkShop will use the default - * sign size. (Use XmStringExtent on character "A" to get the height.) - */ - -int workshop_get_font_height(void); - -/* The following function requests that you register the given - * hotkey as a keyboard accelerator for all frames. Whenever the - * hotkey is pressed, you should invoke workshop_hotkey_pressed - * and pass the current frame pointer as an argument as well as - * the clientData pointer passed in to this function. - * The remove function unregisters the hotkey. - */ -void workshop_register_hotkey(Modifiers modifiers, KeySym keysym, - void *clientData); -void workshop_unregister_hotkey(Modifiers modifiers, KeySym keysym, - void *clientData); - - - - -/* - * - * The following functions notify eserve of important editor events, - * such as files being modified, files being saved, etc. You must - * sprinkle your editor code with calls to these. For example, whenever - * a file is modified (well, when its read-only status changes to modified), - * call workshop_file_modified(). - * - */ - - - -/* Connect with eserve. Add this call after you editor initialization - * is done, right before entering the event loop or blocking on input. - * This will set up a socket connection with eserve. - */ -void workshop_connect(XtAppContext context); - -/* A file has been opened. */ -void workshop_file_opened(char *filename, int readOnly); - - -/* A file has been saved. Despite its name, eserve also uses this - * message to mean a file has been reverted or unmodified. - */ -void workshop_file_saved(char *filename); - - -#if 0 -/* A file has been closed */ -void workshop_file_closed(char *filename); -#endif - -/* Like workshop_file_closed, but also inform eserve what line the - cursor was on when you left the file. That way eserve can put you - back where you left off when you return to this file. */ -void workshop_file_closed_lineno(char *filename, int line); - -#if 0 -/* A file has been modified */ -void workshop_file_modified(char *filename); - -/* - * A mark has been moved. Only call this as a response to - * a workshop_moved_marks request call. - */ -void workshop_move_mark(char *filename, int markId, int newLineno); -#endif - -/* Tell the integration library about a new frame being added. - * Supply a form for the toolbar, a label for the footer, and an - * XmPulldown menu for the WorkShop menu to attach to. Top and bottom - * are the widgets above and below the toolbar form widget, if - * any. Call this function when you create a new window. It returns a - * void *, a handle which you should keep and return when you delete - * the window with workshop_delete_toolbar. The "footer" argument - * points to a Label widget that is going to be used as a status - * message area, and "menu" (if any) points to an Menu widget that - * should contain a WorkShop menu. Clientdata is a pointer which is - * only used by the editor. It will typically be a pointer to the - * window object that the toolbar is placed in. If you have multiple - * windows, you need to use this pointer to figure out which window - * (and thus corresponding buffer) the user has clicked on to respond - * to the workshop_get_positions message. - * Each frame's clientData ("frame") should be unique. - */ -void *workshop_add_frame(void *frame, Widget form, - Widget top, Widget bottom, Widget footer, - Widget menu); - -/* Delete a window/frame. Call this when an editor window is being deleted. */ -void workshop_delete_frame(void *handle); - -/* Add a balloon evaluate text area. "frame" is used the same way - * as in workshop_add_frame. This call is not part of workshop_add_frame because - * a frame can have multiple tooltip areas (typically, an editor frame that - * is split showing multiple buffers will have a separate tooltip area for - * each text widget. Each such area is called a "window" (consistent with - * XEmacs terminology). Separate these by the window argument if necessary. - * You will need to implement workshop_get_balloon_text such that it uses - * these two arguments to derive the file, line etc. for the tip. - * Call the remove function if you delete this area such that the integration - *