Removed unnecessary code.
diff --git a/com.google.eclipse.cdt.core.linux.x86/.project b/com.google.eclipse.cdt.core.linux.x86/.project
deleted file mode 100644
index 09a0d58..0000000
--- a/com.google.eclipse.cdt.core.linux.x86/.project
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
- <name>com.google.eclipse.cdt.core.linux.x86</name>
- <comment></comment>
- <projects>
- </projects>
- <buildSpec>
- <buildCommand>
- <name>org.eclipse.pde.ManifestBuilder</name>
- <arguments>
- </arguments>
- </buildCommand>
- <buildCommand>
- <name>org.eclipse.pde.SchemaBuilder</name>
- <arguments>
- </arguments>
- </buildCommand>
- </buildSpec>
- <natures>
- <nature>org.eclipse.pde.PluginNature</nature>
- </natures>
-</projectDescription>
diff --git a/com.google.eclipse.cdt.core.linux.x86/META-INF/MANIFEST.MF b/com.google.eclipse.cdt.core.linux.x86/META-INF/MANIFEST.MF
deleted file mode 100644
index 4784cb9..0000000
--- a/com.google.eclipse.cdt.core.linux.x86/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,9 +0,0 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: %fragmentName.linux.x86
-Bundle-SymbolicName: com.google.eclipse.cdt.core.linux.x86;singleton:=true
-Bundle-Version: 1.1.0.qualifier
-Bundle-Vendor: %providerName
-Fragment-Host: com.google.eclipse.cdt.core;bundle-version="1.1.0"
-Bundle-Localization: plugin
-Eclipse-PlatformFilter: (&(osgi.os=linux)(osgi.arch=x86))
diff --git a/com.google.eclipse.cdt.core.linux.x86/build.properties b/com.google.eclipse.cdt.core.linux.x86/build.properties
deleted file mode 100644
index e16c8a6..0000000
--- a/com.google.eclipse.cdt.core.linux.x86/build.properties
+++ /dev/null
@@ -1,12 +0,0 @@
-###############################################################################
-# Copyright (c) 2005, 2009 IBM Corporation and others.
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-# IBM Corporation - initial API and implementation
-###############################################################################
-bin.includes = os/,\
- META-INF/
diff --git a/com.google.eclipse.cdt.core.linux.x86/os/linux/x86/libgpty.so b/com.google.eclipse.cdt.core.linux.x86/os/linux/x86/libgpty.so
deleted file mode 100644
index 60088bc..0000000
--- a/com.google.eclipse.cdt.core.linux.x86/os/linux/x86/libgpty.so
+++ /dev/null
Binary files differ
diff --git a/com.google.eclipse.cdt.core.linux.x86/os/linux/x86/libgspawner.so b/com.google.eclipse.cdt.core.linux.x86/os/linux/x86/libgspawner.so
deleted file mode 100644
index b6fb632..0000000
--- a/com.google.eclipse.cdt.core.linux.x86/os/linux/x86/libgspawner.so
+++ /dev/null
Binary files differ
diff --git a/com.google.eclipse.cdt.core.linux.x86_64/.project b/com.google.eclipse.cdt.core.linux.x86_64/.project
deleted file mode 100644
index 81f4328..0000000
--- a/com.google.eclipse.cdt.core.linux.x86_64/.project
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
- <name>com.google.eclipse.cdt.core.linux.x86_64</name>
- <comment></comment>
- <projects>
- </projects>
- <buildSpec>
- <buildCommand>
- <name>org.eclipse.pde.ManifestBuilder</name>
- <arguments>
- </arguments>
- </buildCommand>
- <buildCommand>
- <name>org.eclipse.pde.SchemaBuilder</name>
- <arguments>
- </arguments>
- </buildCommand>
- </buildSpec>
- <natures>
- <nature>org.eclipse.pde.PluginNature</nature>
- </natures>
-</projectDescription>
diff --git a/com.google.eclipse.cdt.core.linux.x86_64/META-INF/MANIFEST.MF b/com.google.eclipse.cdt.core.linux.x86_64/META-INF/MANIFEST.MF
deleted file mode 100644
index 5b3c511..0000000
--- a/com.google.eclipse.cdt.core.linux.x86_64/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,9 +0,0 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: %fragmentName.linux.x86_64
-Bundle-SymbolicName: com.google.eclipse.cdt.core.linux.x86_64;singleton:=true
-Bundle-Version: 1.1.0.qualifier
-Bundle-Vendor: %providerName
-Fragment-Host: com.google.eclipse.cdt.core;bundle-version="1.1.0"
-Bundle-Localization: plugin
-Eclipse-PlatformFilter: (&(osgi.os=linux)(osgi.arch=x86_64))
diff --git a/com.google.eclipse.cdt.core.linux.x86_64/build.properties b/com.google.eclipse.cdt.core.linux.x86_64/build.properties
deleted file mode 100644
index 9faf19a..0000000
--- a/com.google.eclipse.cdt.core.linux.x86_64/build.properties
+++ /dev/null
@@ -1,14 +0,0 @@
-###############################################################################
-# Copyright (c) 2005, 2009 IBM Corporation and others.
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-# IBM Corporation - initial API and implementation
-###############################################################################
-bin.includes = os/,\
- about.html,\
- META-INF/
-src.includes = about.html
diff --git a/com.google.eclipse.cdt.core.linux.x86_64/os/linux/x86_64/libgpty.so b/com.google.eclipse.cdt.core.linux.x86_64/os/linux/x86_64/libgpty.so
deleted file mode 100644
index 587fa69..0000000
--- a/com.google.eclipse.cdt.core.linux.x86_64/os/linux/x86_64/libgpty.so
+++ /dev/null
Binary files differ
diff --git a/com.google.eclipse.cdt.core.linux.x86_64/os/linux/x86_64/libgspawner.so b/com.google.eclipse.cdt.core.linux.x86_64/os/linux/x86_64/libgspawner.so
deleted file mode 100644
index 18736e1..0000000
--- a/com.google.eclipse.cdt.core.linux.x86_64/os/linux/x86_64/libgspawner.so
+++ /dev/null
Binary files differ
diff --git a/com.google.eclipse.cdt.core.linux/.classpath b/com.google.eclipse.cdt.core.linux/.classpath
deleted file mode 100644
index 7d9b38e..0000000
--- a/com.google.eclipse.cdt.core.linux/.classpath
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
- <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
- <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
- <classpathentry kind="output" path="bin"/>
-</classpath>
diff --git a/com.google.eclipse.cdt.core.linux/.gitignore b/com.google.eclipse.cdt.core.linux/.gitignore
deleted file mode 100644
index 5e56e04..0000000
--- a/com.google.eclipse.cdt.core.linux/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-/bin
diff --git a/com.google.eclipse.cdt.core.linux/.project b/com.google.eclipse.cdt.core.linux/.project
deleted file mode 100644
index b07799c..0000000
--- a/com.google.eclipse.cdt.core.linux/.project
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
- <name>com.google.eclipse.cdt.core.linux</name>
- <comment></comment>
- <projects>
- </projects>
- <buildSpec>
- <buildCommand>
- <name>org.eclipse.jdt.core.javabuilder</name>
- <arguments>
- </arguments>
- </buildCommand>
- <buildCommand>
- <name>org.eclipse.pde.ManifestBuilder</name>
- <arguments>
- </arguments>
- </buildCommand>
- <buildCommand>
- <name>org.eclipse.pde.SchemaBuilder</name>
- <arguments>
- </arguments>
- </buildCommand>
- </buildSpec>
- <natures>
- <nature>org.eclipse.jdt.core.javanature</nature>
- <nature>org.eclipse.pde.PluginNature</nature>
- </natures>
-</projectDescription>
diff --git a/com.google.eclipse.cdt.core.linux/.settings/org.eclipse.jdt.core.prefs b/com.google.eclipse.cdt.core.linux/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100644
index c537b63..0000000
--- a/com.google.eclipse.cdt.core.linux/.settings/org.eclipse.jdt.core.prefs
+++ /dev/null
@@ -1,7 +0,0 @@
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
-org.eclipse.jdt.core.compiler.compliance=1.6
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.source=1.6
diff --git a/com.google.eclipse.cdt.core.linux/META-INF/MANIFEST.MF b/com.google.eclipse.cdt.core.linux/META-INF/MANIFEST.MF
deleted file mode 100644
index ac68792..0000000
--- a/com.google.eclipse.cdt.core.linux/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,11 +0,0 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: %fragmentName.linux
-Bundle-SymbolicName: com.google.eclipse.cdt.core.linux;singleton:=true
-Bundle-Version: 1.1.0.qualifier
-Bundle-ClassPath: cdt_linux.jar
-Bundle-Vendor: %providerName
-Fragment-Host: com.google.eclipse.cdt.core;bundle-version="1.1.0"
-Bundle-Localization: plugin
-Bundle-RequiredExecutionEnvironment: JavaSE-1.6
-Eclipse-PlatformFilter: (osgi.os=linux)
diff --git a/com.google.eclipse.cdt.core.linux/build.properties b/com.google.eclipse.cdt.core.linux/build.properties
deleted file mode 100644
index 6542e91..0000000
--- a/com.google.eclipse.cdt.core.linux/build.properties
+++ /dev/null
@@ -1,17 +0,0 @@
-###############################################################################
-# Copyright (c) 2005, 2006 IBM Corporation and others.
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-# IBM Corporation - initial API and implementation
-###############################################################################
-bin.includes = fragment.xml,\
- about.html,\
- .,\
- META-INF/
-src.includes = about.html,\
- library/
-source.. = src/
diff --git a/com.google.eclipse.cdt.core.linux/fragment.xml b/com.google.eclipse.cdt.core.linux/fragment.xml
deleted file mode 100644
index aedc72a..0000000
--- a/com.google.eclipse.cdt.core.linux/fragment.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<?eclipse version="3.0"?>
-<fragment>
-
-</fragment>
diff --git a/com.google.eclipse.cdt.core.linux/library/Makefile b/com.google.eclipse.cdt.core.linux/library/Makefile
deleted file mode 100644
index 6e67977..0000000
--- a/com.google.eclipse.cdt.core.linux/library/Makefile
+++ /dev/null
@@ -1,44 +0,0 @@
-# makefile for libspawner.so
-
-ifeq ($(JAVA_HOME),)
-$(warning JAVA_HOME not set in environment)
-endif
-
-# Defaults which can be overridden.
-OS = linux
-ARCH = x86
-
-JDK_INCLUDES= $(JAVA_HOME)/include
-JDK_OS_INCLUDES= $(JAVA_HOME)/include/$(OS)
-
-CC=gcc
-CPPFLAGS = -I. -I$(JDK_INCLUDES) -I$(JDK_OS_INCLUDES)
-CFLAGS +=-fpic -D_REENTRANT -D_GNU_SOURCE
-
-INSTALL_DIR = ../../org.eclipse.cdt.core.linux.$(ARCH)/os/$(OS)/$(ARCH)
-
-LIB_NAME_SPAWNER = libspawner.so
-LIB_NAME_FULL_SPAWNER = $(INSTALL_DIR)/libspawner.so
-OBJS_SPAWNER=spawner.o io.o exec_unix.o exec_pty.o pfind.o openpty.o
-
-LIB_NAME_PTY = libpty.so
-LIB_NAME_FULL_PTY = $(INSTALL_DIR)/libpty.so
-OBJS_PTY= openpty.o pty.o ptyio.o
-
-OBJS = $(OBJS_SPAWNER) $(OBJS_PTY)
-
-all: $(LIB_NAME_FULL_SPAWNER) $(LIB_NAME_FULL_PTY)
-
-rebuild: clean all
-
-$(LIB_NAME_FULL_SPAWNER) : $(OBJS_SPAWNER)
- mkdir -p $(INSTALL_DIR)
- $(CC) -g -shared -Wl,-soname,$(LIB_NAME_SPAWNER) $(LDFLAGS) -o $(LIB_NAME_FULL_SPAWNER) $(OBJS_SPAWNER) -lc
-
-$(LIB_NAME_FULL_PTY): $(OBJS_PTY)
- mkdir -p $(INSTALL_DIR)
- $(CC) -g -shared -Wl,-soname,$(LIB_NAME_PTY) $(LDFLAGS) -o $(LIB_NAME_FULL_PTY) $(OBJS_PTY)
-
-clean :
- $(RM) $(OBJS_SPAWNER) $(LIB_NAME_FULL_SPAWNER)
- $(RM) $(OBJS_PTY) $(LIB_NAME_FULL_PTY)
diff --git a/com.google.eclipse.cdt.core.linux/library/PTY.h b/com.google.eclipse.cdt.core.linux/library/PTY.h
deleted file mode 100644
index f717942..0000000
--- a/com.google.eclipse.cdt.core.linux/library/PTY.h
+++ /dev/null
@@ -1,29 +0,0 @@
-/* DO NOT EDIT THIS FILE - it is machine generated */
-#include <jni.h>
-/* Header for class org_eclipse_cdt_utils_pty_PTY */
-
-#ifndef _Included_org_eclipse_cdt_utils_pty_PTY
-#define _Included_org_eclipse_cdt_utils_pty_PTY
-#ifdef __cplusplus
-extern "C" {
-#endif
-/*
- * Class: org_eclipse_cdt_utils_pty_PTY
- * Method: openMaster
- * Signature: (Z)Ljava/lang/String;
- */
-JNIEXPORT jstring JNICALL Java_org_eclipse_cdt_utils_pty_PTY_openMaster
- (JNIEnv *, jobject, jboolean);
-
-/*
- * Class: org_eclipse_cdt_utils_pty_PTY
- * Method: change_window_size
- * Signature: (III)I
- */
-JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_pty_PTY_change_1window_1size
- (JNIEnv *, jobject, jint, jint, jint);
-
-#ifdef __cplusplus
-}
-#endif
-#endif
diff --git a/com.google.eclipse.cdt.core.linux/library/PTYInputStream.h b/com.google.eclipse.cdt.core.linux/library/PTYInputStream.h
deleted file mode 100644
index e734927..0000000
--- a/com.google.eclipse.cdt.core.linux/library/PTYInputStream.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/* DO NOT EDIT THIS FILE - it is machine generated */
-#include <jni.h>
-/* Header for class org_eclipse_cdt_utils_pty_PTYInputStream */
-
-#ifndef _Included_org_eclipse_cdt_utils_pty_PTYInputStream
-#define _Included_org_eclipse_cdt_utils_pty_PTYInputStream
-#ifdef __cplusplus
-extern "C" {
-#endif
-#undef org_eclipse_cdt_utils_pty_PTYInputStream_SKIP_BUFFER_SIZE
-#define org_eclipse_cdt_utils_pty_PTYInputStream_SKIP_BUFFER_SIZE 2048L
-/* Inaccessible static: skipBuffer */
-/*
- * Class: org_eclipse_cdt_utils_pty_PTYInputStream
- * Method: read0
- * Signature: (I[BI)I
- */
-JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_pty_PTYInputStream_read0
- (JNIEnv *, jobject, jint, jbyteArray, jint);
-
-/*
- * Class: org_eclipse_cdt_utils_pty_PTYInputStream
- * Method: close0
- * Signature: (I)I
- */
-JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_pty_PTYInputStream_close0
- (JNIEnv *, jobject, jint);
-
-#ifdef __cplusplus
-}
-#endif
-#endif
diff --git a/com.google.eclipse.cdt.core.linux/library/PTYOutputStream.h b/com.google.eclipse.cdt.core.linux/library/PTYOutputStream.h
deleted file mode 100644
index fb28491..0000000
--- a/com.google.eclipse.cdt.core.linux/library/PTYOutputStream.h
+++ /dev/null
@@ -1,29 +0,0 @@
-/* DO NOT EDIT THIS FILE - it is machine generated */
-#include <jni.h>
-/* Header for class org_eclipse_cdt_utils_pty_PTYOutputStream */
-
-#ifndef _Included_org_eclipse_cdt_utils_pty_PTYOutputStream
-#define _Included_org_eclipse_cdt_utils_pty_PTYOutputStream
-#ifdef __cplusplus
-extern "C" {
-#endif
-/*
- * Class: org_eclipse_cdt_utils_pty_PTYOutputStream
- * Method: write0
- * Signature: (I[BI)I
- */
-JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_pty_PTYOutputStream_write0
- (JNIEnv *, jobject, jint, jbyteArray, jint);
-
-/*
- * Class: org_eclipse_cdt_utils_pty_PTYOutputStream
- * Method: close0
- * Signature: (I)I
- */
-JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_pty_PTYOutputStream_close0
- (JNIEnv *, jobject, jint);
-
-#ifdef __cplusplus
-}
-#endif
-#endif
diff --git a/com.google.eclipse.cdt.core.linux/library/Spawner.h b/com.google.eclipse.cdt.core.linux/library/Spawner.h
deleted file mode 100644
index 02727f9..0000000
--- a/com.google.eclipse.cdt.core.linux/library/Spawner.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/* DO NOT EDIT THIS FILE - it is machine generated */
-#include <jni.h>
-/* Header for class org_eclipse_cdt_utils_spawner_Spawner */
-
-#ifndef _Included_org_eclipse_cdt_utils_spawner_Spawner
-#define _Included_org_eclipse_cdt_utils_spawner_Spawner
-#ifdef __cplusplus
-extern "C" {
-#endif
-/*
- * Class: org_eclipse_cdt_utils_spawner_Spawner
- * Method: exec0
- * Signature: ([Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;[I)I
- */
-JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_Spawner_exec0
- (JNIEnv *, jobject, jobjectArray, jobjectArray, jstring, jintArray);
-
-/*
- * Class: org_eclipse_cdt_utils_spawner_Spawner
- * Method: exec1
- * Signature: ([Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)I
- */
-JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_Spawner_exec1
- (JNIEnv *, jobject, jobjectArray, jobjectArray, jstring);
-
-/*
- * Class: org_eclipse_cdt_utils_spawner_Spawner
- * Method: exec2
- * Signature: ([Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;[ILjava/lang/String;IZ)I
- */
-JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_Spawner_exec2
- (JNIEnv *, jobject, jobjectArray, jobjectArray, jstring, jintArray, jstring, jint, jboolean);
-
-/*
- * Class: org_eclipse_cdt_utils_spawner_Spawner
- * Method: raise
- * Signature: (II)I
- */
-JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_Spawner_raise
- (JNIEnv *, jobject, jint, jint);
-
-/*
- * Class: org_eclipse_cdt_utils_spawner_Spawner
- * Method: waitFor
- * Signature: (I)I
- */
-JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_Spawner_waitFor
- (JNIEnv *, jobject, jint);
-
-#ifdef __cplusplus
-}
-#endif
-#endif
diff --git a/com.google.eclipse.cdt.core.linux/library/SpawnerInputStream.h b/com.google.eclipse.cdt.core.linux/library/SpawnerInputStream.h
deleted file mode 100644
index 3b32d2b..0000000
--- a/com.google.eclipse.cdt.core.linux/library/SpawnerInputStream.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/* DO NOT EDIT THIS FILE - it is machine generated */
-#include <jni.h>
-/* Header for class com_qnx_tools_utils_spawner_SpawnerInputStream */
-
-#ifndef _Included_com_qnx_tools_utils_spawner_SpawnerInputStream
-#define _Included_com_qnx_tools_utils_spawner_SpawnerInputStream
-#ifdef __cplusplus
-extern "C" {
-#endif
-#undef com_qnx_tools_utils_spawner_SpawnerInputStream_SKIP_BUFFER_SIZE
-#define com_qnx_tools_utils_spawner_SpawnerInputStream_SKIP_BUFFER_SIZE 2048L
-/* Inaccessible static: skipBuffer */
-/*
- * Class: org_elipse_cdt_utils_spawner_SpawnerInputStream
- * Method: read0
- * Signature: (I[BI)I
- */
-JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_SpawnerInputStream_read0
- (JNIEnv *, jobject, jint, jbyteArray, jint);
-
-/*
- * Class: org_eclipse_cdt_utils_spawner_SpawnerInputStream
- * Method: close0
- * Signature: (I)I
- */
-JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_SpawnerInputStream_close0
- (JNIEnv *, jobject, jint);
-
-#ifdef __cplusplus
-}
-#endif
-#endif
diff --git a/com.google.eclipse.cdt.core.linux/library/SpawnerOutputStream.h b/com.google.eclipse.cdt.core.linux/library/SpawnerOutputStream.h
deleted file mode 100644
index f835947..0000000
--- a/com.google.eclipse.cdt.core.linux/library/SpawnerOutputStream.h
+++ /dev/null
@@ -1,29 +0,0 @@
-/* DO NOT EDIT THIS FILE - it is machine generated */
-#include <jni.h>
-/* Header for class com_qnx_tools_utils_spawner_SpawnerOutputStream */
-
-#ifndef _Included_com_qnx_tools_utils_spawner_SpawnerOutputStream
-#define _Included_com_qnx_tools_utils_spawner_SpawnerOutputStream
-#ifdef __cplusplus
-extern "C" {
-#endif
-/*
- * Class: org_eclipse_cdt_utils_spawner_SpawnerOutputStream
- * Method: write0
- * Signature: (I[BI)I
- */
-JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_SpawnerOutputStream_write0
- (JNIEnv *, jobject, jint, jbyteArray, jint);
-
-/*
- * Class: org_eclipse_cdt_utils_spawner_SpawnerOutputStream
- * Method: close0
- * Signature: (I)I
- */
-JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_SpawnerOutputStream_close0
- (JNIEnv *, jobject, jint);
-
-#ifdef __cplusplus
-}
-#endif
-#endif
diff --git a/com.google.eclipse.cdt.core.linux/library/exec0.h b/com.google.eclipse.cdt.core.linux/library/exec0.h
deleted file mode 100644
index 3033ec1..0000000
--- a/com.google.eclipse.cdt.core.linux/library/exec0.h
+++ /dev/null
@@ -1,29 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2002, 2010 QNX Software Systems and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * QNX Software Systems - initial API and implementation
- * Wind River Systems, Inc.
- * Mikhail Zabaluev (Nokia) - bug 82744
- *******************************************************************************/
-#include <unistd.h>
-#include <sys/wait.h>
-#include <sys/types.h>
-#include <signal.h>
-#include <errno.h>
-
-extern pid_t exec0(const char *path, char *const argv[],
- char *const envp[], const char *dirpath,
- int channels[3]);
-
-
-extern pid_t exec_pty(const char *path, char *const argv[],
- char *const envp[], const char *dirpath,
- int channels[3], const char *pts_name, int fdm,
- int console);
-
-extern int wait0(pid_t pid);
diff --git a/com.google.eclipse.cdt.core.linux/library/exec_pty.c b/com.google.eclipse.cdt.core.linux/library/exec_pty.c
deleted file mode 100644
index dd68615..0000000
--- a/com.google.eclipse.cdt.core.linux/library/exec_pty.c
+++ /dev/null
@@ -1,186 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 2010 QNX Software Systems and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * QNX Software Systems - initial API and implementation
- * Wind River Systems, Inc.
- * Mikhail Zabaluev (Nokia) - bug 82744
- * Mikhail Sennikovsky - bug 145737
- *******************************************************************************/
-#include "exec0.h"
-#include "openpty.h"
-#include <unistd.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <errno.h>
-#include <string.h>
-#include <libgen.h>
-#include <stdlib.h>
-#include <termios.h>
-
-/* from pfind.c */
-extern char *pfind(const char *name, char * const envp[]);
-
-pid_t
-exec_pty(const char *path, char *const argv[], char *const envp[],
- const char *dirpath, int channels[3], const char *pts_name, int fdm, int console)
-{
- int pipe2[2];
- pid_t childpid;
- char *full_path;
-
- /*
- * We use pfind() to check that the program exists and is an executable.
- * If not pass the error up. Also execve() wants a full path.
- */
- full_path = pfind(path, envp);
- if (full_path == NULL) {
- fprintf(stderr, "Unable to find full path for \"%s\"\n", (path) ? path : "");
- return -1;
- }
-
- /*
- * Make sure we can create our pipes before forking.
- */
- if (channels != NULL && console) {
- if (pipe(pipe2) < 0) {
- fprintf(stderr, "%s(%d): returning due to error: %s\n", __FUNCTION__, __LINE__, strerror(errno));
- free(full_path);
- return -1;
- }
- }
-
- childpid = fork();
-
- if (childpid < 0) {
- fprintf(stderr, "%s(%d): returning due to error: %s\n", __FUNCTION__, __LINE__, strerror(errno));
- free(full_path);
- return -1;
- } else if (childpid == 0) { /* child */
-
- chdir(dirpath);
-
- if (channels != NULL) {
- int fds;
-
- if (!console && setsid() < 0) {
- perror("setsid()");
- return -1;
- }
-
- fds = ptys_open(fdm, pts_name);
- if (fds < 0) {
- fprintf(stderr, "%s(%d): returning due to error: %s\n", __FUNCTION__, __LINE__, strerror(errno));
- return -1;
- }
-
- /* Close the read end of pipe2 */
- if (console && close(pipe2[0]) == -1) {
- perror("close(pipe2[0]))");
- }
-
- /* close the master, no need in the child */
- close(fdm);
-
- if (console) {
- set_noecho(fds);
- if (setpgid(getpid(), getpid()) < 0) {
- perror("setpgid()");
- return -1;
- }
- }
-
- /* redirections */
- dup2(fds, STDIN_FILENO); /* dup stdin */
- dup2(fds, STDOUT_FILENO); /* dup stdout */
- if (console) {
- dup2(pipe2[1], STDERR_FILENO); /* dup stderr */
- } else {
- dup2(fds, STDERR_FILENO); /* dup stderr */
- }
- close(fds); /* done with fds. */
- }
-
- /* Close all the fd's in the child */
- {
- int fdlimit = sysconf(_SC_OPEN_MAX);
- int fd = 3;
-
- while (fd < fdlimit)
- close(fd++);
- }
-
- if (envp[0] == NULL) {
- execv(full_path, argv);
- } else {
- execve(full_path, argv, envp);
- }
-
- _exit(127);
-
- } else if (childpid != 0) { /* parent */
- if (console) {
- set_noecho(fdm);
- }
- if (channels != NULL) {
- channels[0] = fdm; /* Input Stream. */
- channels[1] = fdm; /* Output Stream. */
- if (console) {
- /* close the write end of pipe1 */
- if (close(pipe2[1]) == -1)
- perror("close(pipe2[1])");
- channels[2] = pipe2[0]; /* stderr Stream. */
- } else {
- channels[2] = fdm; /* Error Stream. */
- }
- }
-
- free(full_path);
- return childpid;
- }
-
- free(full_path);
- return -1; /*NOT REACHED */
-}
-#ifdef __STAND_ALONE__
-int main(int argc, char **argv, char **envp) {
- const char *path = "./bufferring_test";
- int channels[3] = { -1, -1, -1};
- int status;
- FILE *app_stdin;
- FILE *app_stdout;
- FILE *app_stderr;
- char pts_name[32];
- int fdm;
- char buffer[32];
-
- fdm = ptym_open(pts_name);
- status = exec_pty(path, argv, envp, ".", channels, pts_name, fdm);
- if (status >= 0) {
- app_stdin = fdopen(channels[0], "w");
- app_stdout = fdopen(channels[1], "r");
- app_stderr = fdopen(channels[2], "r");
- if (app_stdout == NULL || app_stderr == NULL || app_stdin == NULL) {
- fprintf(stderr, "PROBLEMS\n");
- } else {
- fputs("foo\n", app_stdin);
- fputs("bar\n", app_stdin);
- while(fgets(buffer, sizeof buffer, app_stdout) != NULL) {
- fprintf(stdout, "STDOUT: %s\n", buffer);
- }
- while(fgets(buffer, sizeof buffer, app_stderr) != NULL) {
- fprintf(stdout, "STDERR: %s\n", buffer);
- }
- }
- }
- fputs("bye\n", stdout);
- close(channels[0]);
- close(channels[1]);
- close(channels[2]);
- return 0;
-}
-#endif
diff --git a/com.google.eclipse.cdt.core.linux/library/exec_unix.c b/com.google.eclipse.cdt.core.linux/library/exec_unix.c
deleted file mode 100644
index ced7b74..0000000
--- a/com.google.eclipse.cdt.core.linux/library/exec_unix.c
+++ /dev/null
@@ -1,158 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2002, 2010 QNX Software Systems and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * QNX Software Systems - initial API and implementation
- * Wind River Systems, Inc.
- * Mikhail Sennikovsky - bug 145737
- *******************************************************************************/
-#include "exec0.h"
-#include <unistd.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <errno.h>
-#include <string.h>
-#include <libgen.h>
-#include <stdlib.h>
-
-/* from pfind.c */
-extern char *pfind(const char *name, char * const envp[]);
-
-pid_t
-exec0(const char *path, char *const argv[], char *const envp[],
- const char *dirpath, int channels[3])
-{
- int pipe0[2], pipe1[2], pipe2[2];
- pid_t childpid;
- char *full_path;
-
- /*
- * We use pfind() to check that the program exists and is an executable.
- * If not pass the error up. Also execve() wants a full path.
- */
- full_path = pfind(path, envp);
- if (full_path == NULL) {
- fprintf(stderr, "Unable to find full path for \"%s\"\n", (path) ? path : "");
- return -1;
- }
-
- /*
- * Make sure we can create our pipes before forking.
- */
- if (channels != NULL) {
- if (pipe(pipe0) < 0 || pipe(pipe1) < 0 || pipe(pipe2) < 0) {
- fprintf(stderr, "%s(%d): returning due to error.\n",
- __FUNCTION__, __LINE__);
- free(full_path);
- return -1;
- }
- }
-
- childpid = fork();
-
- if (childpid < 0) {
- fprintf(stderr, "%s(%d): returning due to error: %s\n",
- __FUNCTION__, __LINE__, strerror(errno));
- free(full_path);
- return -1;
- } else if (childpid == 0) { /* child */
- char *ptr;
-
- chdir(dirpath);
-
- if (channels != NULL) {
- /* Close the write end of pipe0 */
- if (close(pipe0[1]) == -1)
- perror("close(pipe0[1])");
-
- /* Close the read end of pipe1 */
- if (close(pipe1[0]) == -1)
- perror("close(pipe1[0])");
-
- /* Close the read end of pipe2 */
- if (close(pipe2[0]) == -1)
- perror("close(pipe2[0]))");
-
- /* redirections */
- dup2(pipe0[0], STDIN_FILENO); /* dup stdin */
- dup2(pipe1[1], STDOUT_FILENO); /* dup stdout */
- dup2(pipe2[1], STDERR_FILENO); /* dup stderr */
- }
-
- /* Close all the fd's in the child */
- {
- int fdlimit = sysconf(_SC_OPEN_MAX);
- int fd = 3;
-
- while (fd < fdlimit)
- close(fd++);
- }
-
- setpgid(getpid(), getpid());
-
- if (envp[0] == NULL) {
- execv(full_path, argv);
- } else {
- execve(full_path, argv, envp);
- }
-
- _exit(127);
-
- } else if (childpid != 0) { /* parent */
-
- char b;
-
- if (channels != NULL) {
- /* close the read end of pipe1 */
- if (close(pipe0[0]) == -1)
- perror("close(pipe0[0])");
-
- /* close the write end of pipe2 */
- if (close(pipe1[1]) == -1)
- perror("close(pipe1[1])");
-
- /* close the write end of pipe2 */
- if (close(pipe2[1]) == -1)
- perror("close(pipe2[1])");
-
- channels[0] = pipe0[1]; /* Output Stream. */
- channels[1] = pipe1[0]; /* Input Stream. */
- channels[2] = pipe2[0]; /* Input Stream. */
- }
-
- free(full_path);
- return childpid;
- }
-
- free(full_path);
- return -1; /*NOT REACHED */
-}
-
-
-int wait0(pid_t pid)
-{
- int status;
- int val = -1;
-
- if (pid < 0)
- return -1;
-
- for (;;) {
- if (waitpid(pid, &status, 0) < 0) {
- if (errno == EINTR) {
- // interrupted system call - retry
- continue;
- }
- }
- break;
- }
- if (WIFEXITED(status)) {
- val = WEXITSTATUS(status);
- }
-
- return val;
-}
diff --git a/com.google.eclipse.cdt.core.linux/library/io.c b/com.google.eclipse.cdt.core.linux/library/io.c
deleted file mode 100644
index 8540b82..0000000
--- a/com.google.eclipse.cdt.core.linux/library/io.c
+++ /dev/null
@@ -1,114 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2002, 2006 QNX Software Systems and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * QNX Software Systems - initial API and implementation
- * Wind River Systems, Inc.
- *******************************************************************************/
-#include <jni.h>
-#include <stdio.h>
-#include <SpawnerInputStream.h>
-#include <SpawnerOutputStream.h>
-#include <unistd.h>
-
-/* Header for class _org_eclipse_cdt_utils_spawner_SpawnerInputStream */
-/* Header for class _org_eclipse_cdt_utils_spawner_SpawnerOutputStream */
-
-/*
- * Class: org_eclipse_cdt_utils_spawner_SpawnerInputStream
- * Method: read0
- * Signature: (I)I
- */
-JNIEXPORT jint JNICALL
-Java_org_eclipse_cdt_utils_spawner_SpawnerInputStream_read0(JNIEnv * env,
- jobject jobj,
- jint jfd,
- jbyteArray buf,
- jint buf_len)
-{
- int fd;
- int status;
- jbyte *data;
- int data_len;
-
- data = (*env)->GetByteArrayElements(env, buf, 0);
- data_len = buf_len;
- fd = jfd;
-
- status = read( fd, data, data_len );
- (*env)->ReleaseByteArrayElements(env, buf, data, 0);
-
- if (status == 0) {
- /* EOF. */
- status = -1;
- } else if (status == -1) {
- /* Error, toss an exception */
- jclass exception = (*env)->FindClass(env, "java/io/IOException");
- if (exception == NULL) {
- /* Give up. */
- return -1;
- }
- (*env)->ThrowNew(env, exception, "read error");
- }
-
- return status;
-}
-
-
-/*
- * Class: org_eclipse_cdt_utils_spawner_SpawnerInputStream
- * Method: close0
- * Signature: (I)I
- */
-JNIEXPORT jint JNICALL
-Java_org_eclipse_cdt_utils_spawner_SpawnerInputStream_close0(JNIEnv * env,
- jobject jobj,
- jint fd)
-{
- return close(fd);
-}
-
-/*
- * Class: org_eclipse_cdt_utils_spawner_SpawnerOutputStream
- * Method: write0
- * Signature: (II)I
- */
-JNIEXPORT jint JNICALL
-Java_org_eclipse_cdt_utils_spawner_SpawnerOutputStream_write0(JNIEnv * env,
- jobject jobj,
- jint jfd,
- jbyteArray buf,
- jint buf_len)
-{
- int status;
- int fd;
- jbyte *data;
- int data_len;
-
- data = (*env)->GetByteArrayElements(env, buf, 0);
- data_len = buf_len;
- fd = jfd;
-
- status = write(fd, data, data_len);
- (*env)->ReleaseByteArrayElements(env, buf, data, 0);
-
- return status;
-}
-
-
-/*
- * Class: org_eclipse_cdt_utils_spawner_SpawnerOutputStream
- * Method: close0
- * Signature: (I)I
- */
-JNIEXPORT jint JNICALL
-Java_org_eclipse_cdt_utils_spawner_SpawnerOutputStream_close0(JNIEnv * env,
- jobject jobj,
- jint fd)
-{
- return close(fd);
-}
diff --git a/com.google.eclipse.cdt.core.linux/library/openpty.c b/com.google.eclipse.cdt.core.linux/library/openpty.c
deleted file mode 100644
index 818ca8e..0000000
--- a/com.google.eclipse.cdt.core.linux/library/openpty.c
+++ /dev/null
@@ -1,130 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2002, 2010 QNX Software Systems and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * QNX Software Systems - initial API and implementation
- * Wind River Systems, Inc.
- * Mikhail Zabaluev (Nokia) - bug 82744
- * Corey Ashford (IBM) - bug 272370, bug 272372
- *******************************************************************************/
-
-/* _XOPEN_SOURCE is needed to bring in the header for ptsname */
-#define _XOPEN_SOURCE
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <sys/ioctl.h>
-#include <fcntl.h>
-#include <termios.h>
-#include <errno.h>
-#include <unistd.h>
-#include <stdio.h>
-#include <string.h>
-#include <grp.h>
-
-#include <stdlib.h>
-
-/**
- * This is taken from R. W. Stevens book.
- * Alain Magloire.
- */
-
-int ptym_open (char *pts_name);
-int ptys_open (int fdm, const char * pts_name);
-void set_noecho(int fd);
-
-int
-openpty(int *amaster, int *aslave, char *name, struct termios *termp, struct winsize *winp)
-{
- char line[20];
- line[0]=0;
- *amaster = ptym_open(line);
- if (*amaster < 0)
- return -1;
- *aslave = ptys_open(*amaster, line);
- if (*aslave < 0) {
- close(*amaster);
- return -1;
- }
-
- if (name)
- strcpy(name, line);
-#ifndef TCSAFLUSH
-#define TCSAFLUSH TCSETAF
-#endif
- if (termp)
- (void) tcsetattr(*aslave, TCSAFLUSH, termp);
-#ifdef TIOCSWINSZ
- if (winp)
- (void) ioctl(*aslave, TIOCSWINSZ, (char *)winp);
-#endif
- return 0;
-}
-
-void
-set_noecho(int fd)
-{
- struct termios stermios;
- if (tcgetattr(fd, &stermios) < 0) {
- return ;
- }
-
- /* turn off echo */
- stermios.c_lflag &= ~(ECHO | ECHOE | ECHOK | ECHONL);
- /* Turn off the NL to CR/NL mapping ou output. */
- /*stermios.c_oflag &= ~(ONLCR);*/
-
- stermios.c_iflag |= (IGNCR);
-
- tcsetattr(fd, TCSANOW, &stermios);
-}
-
-int
-ptym_open(char * pts_name)
-{
- int fdm;
- char *ptr;
-
- strcpy(pts_name, "/dev/ptmx");
- fdm = getpt();
- if (fdm < 0)
- return -1;
- if (grantpt(fdm) < 0) { /* grant access to slave */
- close(fdm);
- return -2;
- }
- if (unlockpt(fdm) < 0) { /* clear slave's lock flag */
- close(fdm);
- return -3;
- }
- ptr = ptsname(fdm);
- if (ptr == NULL) { /* get slave's name */
- close (fdm);
- return -4;
- }
- strcpy(pts_name, ptr); /* return name of slave */
- return fdm; /* return fd of master */
-}
-
-int
-ptys_open(int fdm, const char * pts_name)
-{
- int fds;
- /* following should allocate controlling terminal */
- fds = open(pts_name, O_RDWR);
- if (fds < 0) {
- close(fdm);
- return -5;
- }
-
-#if defined(TIOCSCTTY)
- /* TIOCSCTTY is the BSD way to acquire a controlling terminal. */
- if (ioctl(fds, TIOCSCTTY, (char *)0) < 0) {
- // ignore error: this is expected in console-mode
- }
-#endif
- return fds;
-}
diff --git a/com.google.eclipse.cdt.core.linux/library/openpty.h b/com.google.eclipse.cdt.core.linux/library/openpty.h
deleted file mode 100644
index c6475fa..0000000
--- a/com.google.eclipse.cdt.core.linux/library/openpty.h
+++ /dev/null
@@ -1,18 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2002, 2010 QNX Software Systems and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * QNX Software Systems - initial API and implementation
- * Wind River Systems, Inc.
- * Mikhail Zabaluev (Nokia) - bug 82744
- *******************************************************************************/
-#ifndef _OPENPTY_H
-#define _OPENPTY_H
-int ptym_open (char *pts_name);
-int ptys_open (int fdm, const char * pts_name);
-void set_noecho(int fd);
-#endif
diff --git a/com.google.eclipse.cdt.core.linux/library/pfind.c b/com.google.eclipse.cdt.core.linux/library/pfind.c
deleted file mode 100644
index 519c6c3..0000000
--- a/com.google.eclipse.cdt.core.linux/library/pfind.c
+++ /dev/null
@@ -1,109 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2002, 2010 QNX Software Systems and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * QNX Software Systems - initial API and implementation
- * Wind River Systems, Inc.
- * Mikhail Sennikovsky - bug 145737
- * Everton Rufino Constantino (IBM) - bug 237611
- *******************************************************************************/
-/*
- * pfind.c - Search for a binary in $PATH.
- */
-
-#include <stdio.h>
-#include <unistd.h>
-#include <stdlib.h>
-#include <string.h>
-#include <limits.h>
-
-#ifndef PATH_MAX
-#define PATH_MAX 1024
-#endif
-
-#define PATH_DEF "PATH="
-const int path_def_len = 5; /* strlen(PATH_DEF); */
-
-char * path_val(char * const envp[])
-{
- int i;
- if (envp == NULL || envp[0] == NULL)
- return getenv("PATH" );
-
- for(i = 0; envp[i] != NULL; i++){
- char* p = envp[i];
- if(!strncmp(PATH_DEF, p, path_def_len)){
- return p + path_def_len;
- }
- }
-
- return NULL;
-}
-
-char * pfind(const char *name, char * const envp[])
-{
- char *tok;
- char *sp;
- char *path;
- char fullpath[PATH_MAX+1];
-
- /* Sanity check. */
- if (name == NULL) {
- fprintf(stderr, "pfind(): Null argument.\n");
- return NULL;
- }
-
- /* For absolute name or name with a path, check if it is an executable. */
- if (name[0] == '/' || name[0] == '.') {
- if (access(name, X_OK) == 0) {
- return strdup(name);
- }
- return NULL;
- }
-
- /* Search in the PATH environment. */
- path = path_val( envp );
-
- if (path == NULL || strlen(path) <= 0) {
- fprintf(stderr, "Unable to get $PATH.\n");
- return NULL;
- }
-
- /* The value return by getenv() is readonly */
- path = strdup(path);
-
- tok = strtok_r(path, ":", &sp);
- while (tok != NULL) {
- snprintf(fullpath, sizeof(fullpath) - 1, "%s/%s", tok, name);
-
- if (access(fullpath, X_OK) == 0) {
- free(path);
- return strdup(fullpath);
- }
-
- tok = strtok_r( NULL, ":", &sp );
- }
-
- free(path);
- return NULL;
-}
-
-#ifdef BUILD_WITH_MAIN
-int main(int argc, char **argv)
-{
- int i;
- char *fullpath;
-
- for (i=1; i<argc; i++) {
- fullpath = pfind(argv[i], NULL);
- if (fullpath == NULL)
- printf("Unable to find %s in $PATH.\n", argv[i]);
- else
- printf("Found %s @ %s.\n", argv[i], fullpath);
- }
-}
-#endif
diff --git a/com.google.eclipse.cdt.core.linux/library/pty.c b/com.google.eclipse.cdt.core.linux/library/pty.c
deleted file mode 100644
index 5c1e864..0000000
--- a/com.google.eclipse.cdt.core.linux/library/pty.c
+++ /dev/null
@@ -1,70 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2002, 2010 QNX Software Systems and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * QNX Software Systems - initial API and implementation
- * Wind River Systems, Inc.
- *******************************************************************************/
-#include <sys/ioctl.h>
-#include "PTY.h"
-#include "openpty.h"
-
-/*
- * Class: org_eclipse_cdt_utils_pty_PTY
- * Method: forkpty
- * Signature: ()I
- */
-JNIEXPORT jstring JNICALL
-Java_org_eclipse_cdt_utils_pty_PTY_openMaster (JNIEnv *env, jobject jobj, jboolean console) {
- jfieldID fid; /* Store the field ID */
- jstring jstr = NULL;
- int master = -1;
- char line[1024]; /* FIXME: Should be enough */
- jclass cls;
-
- line[0] = '\0';
-
- master = ptym_open(line);
- if (master >= 0) {
- // turn off echo
- if (console) {
- set_noecho(master);
- }
-
- /* Get a reference to the obj's class */
- cls = (*env)->GetObjectClass(env, jobj);
-
- /* Set the master fd. */
- fid = (*env)->GetFieldID(env, cls, "master", "I");
- if (fid == NULL) {
- return NULL;
- }
- (*env)->SetIntField(env, jobj, fid, (jint)master);
-
- /* Create a new String for the slave. */
- jstr = (*env)->NewStringUTF(env, line);
- }
- return jstr;
-}
-
-JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_pty_PTY_change_1window_1size
- (JNIEnv *env, jobject jobj, jint fdm, jint width, jint height)
-{
-#ifdef TIOCGWINSZ
- struct winsize win;
-
- win.ws_col = width;
- win.ws_row = height;
- win.ws_xpixel = 0;
- win.ws_ypixel = 0;
-
- return ioctl(fdm, TIOCSWINSZ, &win);
-#else
- return 0;
-#endif
-}
-
diff --git a/com.google.eclipse.cdt.core.linux/library/ptyio.c b/com.google.eclipse.cdt.core.linux/library/ptyio.c
deleted file mode 100644
index a999787..0000000
--- a/com.google.eclipse.cdt.core.linux/library/ptyio.c
+++ /dev/null
@@ -1,117 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2002 - 2005 QNX Software Systems and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * QNX Software Systems - initial API and implementation
- *******************************************************************************/
-#include <jni.h>
-#include <stdio.h>
-#include <PTYInputStream.h>
-#include <PTYOutputStream.h>
-#include <unistd.h>
-
-/* Header for class _org_eclipse_cdt_utils_pty_PTYInputStream */
-/* Header for class _org_eclipse_cdt_utils_pty_PTYOutputStream */
-
-/*
- * Class: org_eclipse_cdt_utils_pty_PTYInputStream
- * Method: read0
- * Signature: (I)I
- */
-JNIEXPORT jint JNICALL
-Java_org_eclipse_cdt_utils_pty_PTYInputStream_read0(JNIEnv * env,
- jobject jobj,
- jint jfd,
- jbyteArray buf,
- jint buf_len)
-{
- int fd;
- int status;
- jbyte *data;
- int data_len;
-
- data = (*env)->GetByteArrayElements(env, buf, 0);
- data_len = buf_len;
- fd = jfd;
-
- status = read( fd, data, data_len );
- (*env)->ReleaseByteArrayElements(env, buf, data, 0);
-
- if (status == 0) {
- /* EOF. */
- status = -1;
- } else if (status == -1) {
- /* Error, toss an exception */
- /* Ignore the error for now, the debugger will attempt
- * to close this multiple time. */
-#if 0
- jclass exception = (*env)->FindClass(env, "java/io/IOException");
- if (exception == NULL) {
- /* Give up. */
- return -1;
- }
- (*env)->ThrowNew(env, exception, "read error");
-#endif
- }
-
- return status;
-}
-
-
-/*
- * Class: org_eclipse_cdt_utils_pty_PTYInputStream
- * Method: close0
- * Signature: (I)I
- */
-JNIEXPORT jint JNICALL
-Java_org_eclipse_cdt_utils_pty_PTYInputStream_close0(JNIEnv * env,
- jobject jobj,
- jint fd)
-{
- return close(fd);
-}
-
-/*
- * Class: org_eclipse_cdt_utils_pty_PTYOutputStream
- * Method: write0
- * Signature: (II)I
- */
-JNIEXPORT jint JNICALL
-Java_org_eclipse_cdt_utils_pty_PTYOutputStream_write0(JNIEnv * env,
- jobject jobj,
- jint jfd,
- jbyteArray buf,
- jint buf_len)
-{
- int status;
- int fd;
- jbyte *data;
- int data_len;
-
- data = (*env)->GetByteArrayElements(env, buf, 0);
- data_len = buf_len;
- fd = jfd;
-
- status = write(fd, data, data_len);
- (*env)->ReleaseByteArrayElements(env, buf, data, 0);
-
- return status;
-}
-
-
-/*
- * Class: org_eclipse_cdt_utils_pty_PTYOutputStream
- * Method: close0
- * Signature: (I)I
- */
-JNIEXPORT jint JNICALL
-Java_org_eclipse_cdt_utils_pty_PTYOutputStream_close0(JNIEnv * env,
- jobject jobj,
- jint fd)
-{
- return close(fd);
-}
diff --git a/com.google.eclipse.cdt.core.linux/library/spawner.c b/com.google.eclipse.cdt.core.linux/library/spawner.c
deleted file mode 100644
index 67b12b0..0000000
--- a/com.google.eclipse.cdt.core.linux/library/spawner.c
+++ /dev/null
@@ -1,302 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2002, 2010 QNX Software Systems and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * QNX Software Systems - initial API and implementation
- * Wind River Systems, Inc.
- * Mikhail Zabaluev (Nokia) - bug 82744
- *******************************************************************************/
-#include <unistd.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <signal.h>
-#include <string.h>
-#include <jni.h>
-
-#include "exec0.h"
-#include <Spawner.h>
-
-
-#define DEBUGIT 0
-
-
-/*
- * Header for class org_eclipse_cdt_utils_spawner_Spawner
- */
-
-
-#if DEBUGIT
-static void print_array(char **c_array)
-{
- if (c_array) {
- char **p = c_array;
- for (; *p; p++) {
- if (*p) {
- fprintf(stderr, " %s", *p);
- }
- }
- } else {
- fprintf(stderr, "null");
- }
- fprintf(stderr, "\n");
-}
-#endif
-
-
-static char **alloc_c_array(JNIEnv * env, jobjectArray j_array)
-{
- int i;
- jint c_array_size = (*env)->GetArrayLength(env, j_array);
- char **c_array = calloc(c_array_size + 1, sizeof(*c_array));
-
- if (c_array == NULL)
- return NULL;
-
- for (i = 0; i < c_array_size; i++) {
- jstring j_str =
- (jstring) (*env)->GetObjectArrayElement(env, j_array, i);
- const char *c_str = (*env)->GetStringUTFChars(env, j_str, NULL);
- c_array[i] = (char *) strdup(c_str);
- (*env)->ReleaseStringUTFChars(env, j_str, c_str);
- (*env)->DeleteLocalRef(env, j_str);
- }
-
- return c_array;
-}
-
-
-static void free_c_array(char **c_array)
-{
- if (c_array) {
- char **p = c_array;
- for (; *p; p++) {
- if (*p) {
- free(*p);
- }
- }
- free(c_array);
- }
-}
-
-
-/*
- * Class: org_eclipse_cdt_utils_spawner_Spawner
- * Method: exec2
- * Signature: ([Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;[ILorg/eclipse/cdt/utils/pty/PTY;)I
- */
-JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_Spawner_exec2
- (JNIEnv *env, jobject jobj, jobjectArray jcmd, jobjectArray jenv, jstring jdir, jintArray jchannels,
- jstring jslaveName, jint masterFD, jboolean console)
-{
- jint *channels = (*env)->GetIntArrayElements(env, jchannels, 0);
- const char *dirpath = (*env)->GetStringUTFChars(env, jdir, NULL);
- const char *pts_name = (*env)->GetStringUTFChars(env, jslaveName, NULL);
- char **cmd = NULL;
- char **envp = NULL;
- int fd[3];
- pid_t pid = -1;
-
- if (channels == NULL)
- goto bail_out;
-
- cmd = alloc_c_array(env, jcmd);
- if (cmd == NULL)
- goto bail_out;
-
- envp = alloc_c_array(env, jenv);
- if (envp == NULL)
- goto bail_out;
-
-#if DEBUGIT
- fprintf(stderr, "command:");
- print_array(cmd);
- fprintf(stderr, "Envp:");
- print_array(envp);
- fprintf(stderr, "dirpath: %s\n", dirpath);
- fprintf(stderr, "pts_name: %s\n", pts_name);
-#endif
-
- pid = exec_pty(cmd[0], cmd, envp, dirpath, fd, pts_name, masterFD, console);
- if (pid < 0)
- goto bail_out;
-
- channels[0] = fd[0];
- channels[1] = fd[1];
- channels[2] = fd[2];
-
- bail_out:
- (*env)->ReleaseIntArrayElements(env, jchannels, channels, 0);
- (*env)->ReleaseStringUTFChars(env, jdir, dirpath);
- (*env)->ReleaseStringUTFChars(env, jslaveName, pts_name);
- if (cmd)
- free_c_array(cmd);
- if (envp)
- free_c_array(envp);
- return pid;
-}
-
-
-JNIEXPORT jint JNICALL
-Java_org_eclipse_cdt_utils_spawner_Spawner_exec1(JNIEnv * env, jobject jobj,
- jobjectArray jcmd,
- jobjectArray jenv,
- jstring jdir)
-{
- const char *dirpath = (*env)->GetStringUTFChars(env, jdir, NULL);
- char **cmd = NULL;
- char **envp = NULL;
- pid_t pid = -1;
-
- cmd = alloc_c_array(env, jcmd);
- if (cmd == NULL)
- goto bail_out;
-
- envp = alloc_c_array(env, jenv);
- if (envp == NULL)
- goto bail_out;
-
-#if DEBUGIT
- fprintf(stderr, "command:");
- print_array(cmd);
- fprintf(stderr, "Envp:");
- print_array(envp);
- fprintf(stderr, "dirpath: %s\n", dirpath);
-#endif
-
- pid = exec0(cmd[0], cmd, envp, dirpath, NULL);
- if (pid < 0)
- goto bail_out;
-
- bail_out:
- (*env)->ReleaseStringUTFChars(env, jdir, dirpath);
- if (cmd)
- free_c_array(cmd);
- if (envp)
- free_c_array(envp);
- return pid;
-}
-
-/*
- * Class: org_eclipse_cdt_utils_spawner_Spawner
- * Method: exec0
- * Signature: ([Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;[I)I
- */
-JNIEXPORT jint JNICALL
-Java_org_eclipse_cdt_utils_spawner_Spawner_exec0(JNIEnv * env, jobject jobj,
- jobjectArray jcmd,
- jobjectArray jenv,
- jstring jdir,
- jintArray jchannels)
-{
- jint *channels = (*env)->GetIntArrayElements(env, jchannels, 0);
- const char *dirpath = (*env)->GetStringUTFChars(env, jdir, NULL);
- char **cmd = NULL;
- char **envp = NULL;
- int fd[3];
- pid_t pid = -1;
-
- if (channels == NULL)
- goto bail_out;
-
- cmd = alloc_c_array(env, jcmd);
- if (cmd == NULL)
- goto bail_out;
-
- envp = alloc_c_array(env, jenv);
- if (envp == NULL)
- goto bail_out;
-
-#if DEBUGIT
- fprintf(stderr, "command:");
- print_array(cmd);
- fprintf(stderr, "Envp:");
- print_array(envp);
- fprintf(stderr, "dirpath: %s\n", dirpath);
-#endif
-
- pid = exec0(cmd[0], cmd, envp, dirpath, fd);
- if (pid < 0)
- goto bail_out;
-
- channels[0] = fd[0];
- channels[1] = fd[1];
- channels[2] = fd[2];
-
- bail_out:
- (*env)->ReleaseIntArrayElements(env, jchannels, channels, 0);
- (*env)->ReleaseStringUTFChars(env, jdir, dirpath);
- if (cmd)
- free_c_array(cmd);
- if (envp)
- free_c_array(envp);
- return pid;
-}
-
-/*
- * Class: org_eclipse_cdt_utils_spawner_Spawner
- * Method: raise
- * Signature: (II)I
- */
-JNIEXPORT jint JNICALL
-Java_org_eclipse_cdt_utils_spawner_Spawner_raise(JNIEnv * env, jobject jobj,
- jint pid, jint sig)
-{
- int status = -1;
-
- switch (sig) {
- case 0: /* NOOP */
- status = killpg(pid, 0);
- if(status == -1) {
- status = kill(pid, 0);
- }
- break;
-
- case 2: /* INTERRUPT */
- status = killpg(pid, SIGINT);
- if(status == -1) {
- status = kill(pid, SIGINT);
- }
- break;
-
- case 9: /* KILL */
- status = killpg(pid, SIGKILL);
- if(status == -1) {
- status = kill(pid, SIGKILL);
- }
- break;
-
- case 15: /* TERM */
- status = killpg(pid, SIGTERM);
- if(status == -1) {
- status = kill(pid, SIGTERM);
- }
- break;
-
- default:
- status = killpg(pid, sig); /* WHAT ?? */
- if(status == -1) {
- status = kill(pid, sig); /* WHAT ?? */
- }
- break;
- }
-
- return status;
-}
-
-
-
-/*
- * Class: org_eclipse_cdt_utils_spawner_Spawner
- * Method: waitFor
- * Signature: (I)I
- */
-JNIEXPORT jint JNICALL
-Java_org_eclipse_cdt_utils_spawner_Spawner_waitFor(JNIEnv * env,
- jobject jobj, jint pid)
-{
- return wait0(pid);
-}
diff --git a/com.google.eclipse.cdt.core.macosx/.classpath b/com.google.eclipse.cdt.core.macosx/.classpath
deleted file mode 100644
index 7d9b38e..0000000
--- a/com.google.eclipse.cdt.core.macosx/.classpath
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
- <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
- <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
- <classpathentry kind="output" path="bin"/>
-</classpath>
diff --git a/com.google.eclipse.cdt.core.macosx/.gitignore b/com.google.eclipse.cdt.core.macosx/.gitignore
deleted file mode 100644
index 5e56e04..0000000
--- a/com.google.eclipse.cdt.core.macosx/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-/bin
diff --git a/com.google.eclipse.cdt.core.macosx/.project b/com.google.eclipse.cdt.core.macosx/.project
deleted file mode 100644
index 54bc2c2..0000000
--- a/com.google.eclipse.cdt.core.macosx/.project
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
- <name>com.google.eclipse.cdt.core.macosx</name>
- <comment></comment>
- <projects>
- </projects>
- <buildSpec>
- <buildCommand>
- <name>org.eclipse.jdt.core.javabuilder</name>
- <arguments>
- </arguments>
- </buildCommand>
- <buildCommand>
- <name>org.eclipse.pde.ManifestBuilder</name>
- <arguments>
- </arguments>
- </buildCommand>
- <buildCommand>
- <name>org.eclipse.pde.SchemaBuilder</name>
- <arguments>
- </arguments>
- </buildCommand>
- </buildSpec>
- <natures>
- <nature>org.eclipse.jdt.core.javanature</nature>
- <nature>org.eclipse.pde.PluginNature</nature>
- </natures>
-</projectDescription>
diff --git a/com.google.eclipse.cdt.core.macosx/.settings/org.eclipse.jdt.core.prefs b/com.google.eclipse.cdt.core.macosx/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100644
index c537b63..0000000
--- a/com.google.eclipse.cdt.core.macosx/.settings/org.eclipse.jdt.core.prefs
+++ /dev/null
@@ -1,7 +0,0 @@
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
-org.eclipse.jdt.core.compiler.compliance=1.6
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.source=1.6
diff --git a/com.google.eclipse.cdt.core.macosx/META-INF/MANIFEST.MF b/com.google.eclipse.cdt.core.macosx/META-INF/MANIFEST.MF
deleted file mode 100644
index eba6d61..0000000
--- a/com.google.eclipse.cdt.core.macosx/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,11 +0,0 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: %fragmentName.macosx
-Bundle-SymbolicName: com.google.eclipse.cdt.core.macosx;singleton:=true
-Bundle-Version: 1.1.0.qualifier
-Bundle-ClassPath: cdt_macosx.jar
-Bundle-Vendor: %providerName
-Fragment-Host: com.google.eclipse.cdt.core;bundle-version="1.1.0"
-Bundle-Localization: plugin
-Bundle-RequiredExecutionEnvironment: J2SE-1.4
-Eclipse-PlatformFilter: (osgi.os=macosx)
diff --git a/com.google.eclipse.cdt.core.macosx/build.properties b/com.google.eclipse.cdt.core.macosx/build.properties
deleted file mode 100644
index fc76b9b..0000000
--- a/com.google.eclipse.cdt.core.macosx/build.properties
+++ /dev/null
@@ -1,18 +0,0 @@
-###############################################################################
-# Copyright (c) 2005, 2007 IBM Corporation and others.
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-# IBM Corporation - initial API and implementation
-###############################################################################
-bin.includes = fragment.xml,\
- about.html,\
- .,\
- os/,\
- META-INF/
-src.includes = about.html,\
- library/
-source.. = src/
diff --git a/com.google.eclipse.cdt.core.macosx/fragment.xml b/com.google.eclipse.cdt.core.macosx/fragment.xml
deleted file mode 100644
index aedc72a..0000000
--- a/com.google.eclipse.cdt.core.macosx/fragment.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<?eclipse version="3.0"?>
-<fragment>
-
-</fragment>
diff --git a/com.google.eclipse.cdt.core.macosx/library/Makefile b/com.google.eclipse.cdt.core.macosx/library/Makefile
deleted file mode 100644
index 26de453..0000000
--- a/com.google.eclipse.cdt.core.macosx/library/Makefile
+++ /dev/null
@@ -1,189 +0,0 @@
-#*******************************************************************************
-# Copyright (c) 2002, 2009 QNX Software Systems and others.
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-# QNX Software Systems - initial API and implementation
-# Alex Blewitt - MacOSX with a 64-bit vm
-#*******************************************************************************/
-
-# makefile for libspawner.so
-# See http://developer.apple.com/documentation/Java/Conceptual/Java141Development/Core_APIs/chapter_6_section_4.html
-
-JAVA_HOME = /Library/Java/Home
-ifeq ($(JAVA_HOME),)
-$(warning JAVA_HOME not set in environment)
-endif
-
-# Defaults which can be overridden.
-OS = macosx
-ARCH_PPC = ppc
-ARCH_X86 = x86
-ARCH_X86_64 = x86_64
-
-JDK_INCLUDES= $(JAVA_HOME)/include
-
-CC=gcc
-LD=libtool
-CPPFLAGS = -I. -I$(JDK_INCLUDES) #-I$(JDK_OS_INCLUDES)
-CFLAGS +=-fPIC -D_REENTRANT
-
-ARCH_FLAG_PPC = -arch ppc
-ARCH_FLAG_X86 = -arch i386
-ARCH_FLAG_X86_64 = -arch x86_64
-
-INSTALL_DIR_PPC = ../os/$(OS)/$(ARCH_PPC)
-INSTALL_DIR_X86 = ../os/$(OS)/$(ARCH_X86)
-INSTALL_DIR_X86_64 = ../os/$(OS)/$(ARCH_X86_64)
-
-LIB_NAME_SPAWNER = libspawner.dylib
-LIB_NAME_FULL_SPAWNER_PPC = $(INSTALL_DIR_PPC)/libspawner.jnilib
-LIB_NAME_FULL_SPAWNER_X86 = $(INSTALL_DIR_X86)/libspawner.jnilib
-LIB_NAME_FULL_SPAWNER_X86_64 = $(INSTALL_DIR_X86_64)/libspawner.jnilib
-OBJS_SPAWNER_PPC = spawner_$(ARCH_PPC).o \
- io_$(ARCH_PPC).o \
- exec_unix_$(ARCH_PPC).o \
- exec_pty_$(ARCH_PPC).o \
- openpty_$(ARCH_PPC).o \
- pfind_$(ARCH_PPC).o
-OBJS_SPAWNER_X86 = spawner_$(ARCH_X86).o \
- io_$(ARCH_X86).o \
- exec_unix_$(ARCH_X86).o \
- exec_pty_$(ARCH_X86).o \
- openpty_$(ARCH_X86).o \
- pfind_$(ARCH_X86).o
-OBJS_SPAWNER_X86_64 = spawner_$(ARCH_X86_64).o \
- io_$(ARCH_X86_64).o \
- exec_unix_$(ARCH_X86_64).o \
- exec_pty_$(ARCH_X86_64).o \
- openpty_$(ARCH_X86_64).o \
- pfind_$(ARCH_X86_64).o
-
-LIB_NAME_PTY = libpty.so
-LIB_NAME_FULL_PTY_PPC = $(INSTALL_DIR_PPC)/libpty.jnilib
-LIB_NAME_FULL_PTY_X86 = $(INSTALL_DIR_X86)/libpty.jnilib
-LIB_NAME_FULL_PTY_X86_64 = $(INSTALL_DIR_X86_64)/libpty.jnilib
-OBJS_PTY_PPC = openpty_$(ARCH_PPC).o pty_$(ARCH_PPC).o ptyio_$(ARCH_PPC).o
-OBJS_PTY_X86 = openpty_$(ARCH_X86).o pty_$(ARCH_X86).o ptyio_$(ARCH_X86).o
-OBJS_PTY_X86_64 = openpty_$(ARCH_X86_64).o pty_$(ARCH_X86_64).o ptyio_$(ARCH_X86_64).o
-
-OBJS_PPC = $(OBJS_SPAWNER_PPC) $(OBJS_PTY_PPC)
-OBJS_X86 = $(OBJS_SPAWNER_X86) $(OBJS_PTY_X86)
-OBJS_X86_64 = $(OBJS_SPAWNER_X86_64) $(OBJS_PTY_X86_64)
-
-all: ppc x86 x86_64
-
-ppc: $(LIB_NAME_FULL_SPAWNER_PPC) $(LIB_NAME_FULL_PTY_PPC)
-
-x86: $(LIB_NAME_FULL_SPAWNER_X86) $(LIB_NAME_FULL_PTY_X86)
-
-x86_64: $(LIB_NAME_FULL_SPAWNER_X86_64) $(LIB_NAME_FULL_PTY_X86_64)
-
-rebuild: clean all
-
-$(LIB_NAME_FULL_SPAWNER_PPC) : $(OBJS_SPAWNER_PPC)
- mkdir -p $(INSTALL_DIR_PPC)
- $(CC) -dynamiclib $(ARCH_FLAG_PPC) -o $(LIB_NAME_FULL_SPAWNER_PPC) $(OBJS_SPAWNER_PPC) -lc -framework JavaVM
-
-$(LIB_NAME_FULL_SPAWNER_X86) : $(OBJS_SPAWNER_X86)
- mkdir -p $(INSTALL_DIR_X86)
- $(CC) -dynamiclib $(ARCH_FLAG_X86) -o $(LIB_NAME_FULL_SPAWNER_X86) $(OBJS_SPAWNER_X86) -lc -framework JavaVM
-
-$(LIB_NAME_FULL_SPAWNER_X86_64) : $(OBJS_SPAWNER_X86_64)
- mkdir -p $(INSTALL_DIR_X86_64)
- $(CC) -dynamiclib $(ARCH_FLAG_X86_64) -o $(LIB_NAME_FULL_SPAWNER_X86_64) $(OBJS_SPAWNER_X86_64) -lc -framework JavaVM
-
-$(LIB_NAME_FULL_PTY_PPC): $(OBJS_PTY_PPC)
- mkdir -p $(INSTALL_DIR_PPC)
- $(CC) -dynamiclib $(ARCH_FLAG_PPC) -o $(LIB_NAME_FULL_PTY_PPC) $(OBJS_PTY_PPC) -lc -framework JavaVM
-
-$(LIB_NAME_FULL_PTY_X86): $(OBJS_PTY_X86)
- mkdir -p $(INSTALL_DIR_X86)
- $(CC) -dynamiclib $(ARCH_FLAG_X86) -o $(LIB_NAME_FULL_PTY_X86) $(OBJS_PTY_X86) -lc -framework JavaVM
-
-$(LIB_NAME_FULL_PTY_X86_64): $(OBJS_PTY_X86_64)
- mkdir -p $(INSTALL_DIR_X86_64)
- $(CC) -dynamiclib $(ARCH_FLAG_X86_64) -o $(LIB_NAME_FULL_PTY_X86_64) $(OBJS_PTY_X86_64) -lc -framework JavaVM
-
-spawner_$(ARCH_PPC).o: spawner.c
- $(CC) $(CFLAGS) $(ARCH_FLAG_PPC) $(CPPFLAGS) -c -o $@ spawner.c
-
-io_$(ARCH_PPC).o: io.c
- $(CC) $(CFLAGS) $(ARCH_FLAG_PPC) $(CPPFLAGS) -c -o $@ io.c
-
-exec_unix_$(ARCH_PPC).o: exec_unix.c
- $(CC) $(CFLAGS) $(ARCH_FLAG_PPC) $(CPPFLAGS) -c -o $@ exec_unix.c
-
-exec_pty_$(ARCH_PPC).o: exec_pty.c
- $(CC) $(CFLAGS) $(ARCH_FLAG_PPC) $(CPPFLAGS) -c -o $@ exec_pty.c
-
-openpty_$(ARCH_PPC).o: openpty.c
- $(CC) $(CFLAGS) $(ARCH_FLAG_PPC) $(CPPFLAGS) -c -o $@ openpty.c
-
-pfind_$(ARCH_PPC).o: pfind.c
- $(CC) $(CFLAGS) $(ARCH_FLAG_PPC) $(CPPFLAGS) -c -o $@ pfind.c
-
-openpty_$(ARCH_PPC).o: openpty.c
- $(CC) $(CFLAGS) $(ARCH_FLAG_PPC) $(CPPFLAGS) -c -o $@ openpty.c
-
-pty_$(ARCH_PPC).o: pty.c
- $(CC) $(CFLAGS) $(ARCH_FLAG_PPC) $(CPPFLAGS) -c -o $@ pty.c
-
-ptyio_$(ARCH_PPC).o: ptyio.c
- $(CC) $(CFLAGS) $(ARCH_FLAG_PPC) $(CPPFLAGS) -c -o $@ ptyio.c
-
-spawner_$(ARCH_X86).o: spawner.c
- $(CC) $(CFLAGS) $(ARCH_FLAG_X86) $(CPPFLAGS) -c -o $@ spawner.c
-
-io_$(ARCH_X86).o: io.c
- $(CC) $(CFLAGS) $(ARCH_FLAG_X86) $(CPPFLAGS) -c -o $@ io.c
-
-exec_unix_$(ARCH_X86).o: exec_unix.c
- $(CC) $(CFLAGS) $(ARCH_FLAG_X86) $(CPPFLAGS) -c -o $@ exec_unix.c
-
-exec_pty_$(ARCH_X86).o: exec_pty.c
- $(CC) $(CFLAGS) $(ARCH_FLAG_X86) $(CPPFLAGS) -c -o $@ exec_pty.c
-
-openpty_$(ARCH_X86).o: openpty.c
- $(CC) $(CFLAGS) $(ARCH_FLAG_X86) $(CPPFLAGS) -c -o $@ openpty.c
-
-pfind_$(ARCH_X86).o: pfind.c
- $(CC) $(CFLAGS) $(ARCH_FLAG_X86) $(CPPFLAGS) -c -o $@ pfind.c
-
-pty_$(ARCH_X86).o: pty.c
- $(CC) $(CFLAGS) $(ARCH_FLAG_X86) $(CPPFLAGS) -c -o $@ pty.c
-
-ptyio_$(ARCH_X86).o: ptyio.c
- $(CC) $(CFLAGS) $(ARCH_FLAG_X86) $(CPPFLAGS) -c -o $@ ptyio.c
-
-spawner_$(ARCH_X86_64).o: spawner.c
- $(CC) $(CFLAGS) $(ARCH_FLAG_X86_64) $(CPPFLAGS) -c -o $@ spawner.c
-
-io_$(ARCH_X86_64).o: io.c
- $(CC) $(CFLAGS) $(ARCH_FLAG_X86_64) $(CPPFLAGS) -c -o $@ io.c
-
-exec_unix_$(ARCH_X86_64).o: exec_unix.c
- $(CC) $(CFLAGS) $(ARCH_FLAG_X86_64) $(CPPFLAGS) -c -o $@ exec_unix.c
-
-exec_pty_$(ARCH_X86_64).o: exec_pty.c
- $(CC) $(CFLAGS) $(ARCH_FLAG_X86_64) $(CPPFLAGS) -c -o $@ exec_pty.c
-
-openpty_$(ARCH_X86_64).o: openpty.c
- $(CC) $(CFLAGS) $(ARCH_FLAG_X86_64) $(CPPFLAGS) -c -o $@ openpty.c
-
-pfind_$(ARCH_X86_64).o: pfind.c
- $(CC) $(CFLAGS) $(ARCH_FLAG_X86_64) $(CPPFLAGS) -c -o $@ pfind.c
-
-pty_$(ARCH_X86_64).o: pty.c
- $(CC) $(CFLAGS) $(ARCH_FLAG_X86_64) $(CPPFLAGS) -c -o $@ pty.c
-
-ptyio_$(ARCH_X86_64).o: ptyio.c
- $(CC) $(CFLAGS) $(ARCH_FLAG_X86_64) $(CPPFLAGS) -c -o $@ ptyio.c
-
-clean :
- $(RM) $(OBJS_PPC) $(LIB_NAME_FULL_SPAWNER_PPC) $(LIB_NAME_FULL_PTY_PPC)
- $(RM) $(OBJS_X86) $(LIB_NAME_FULL_SPAWNER_X86) $(LIB_NAME_FULL_PTY_X86)
- $(RM) $(OBJS_X86_64) $(LIB_NAME_FULL_SPAWNER_X86_64) $(LIB_NAME_FULL_PTY_X86_64)
diff --git a/com.google.eclipse.cdt.core.macosx/library/PTY.h b/com.google.eclipse.cdt.core.macosx/library/PTY.h
deleted file mode 100644
index f717942..0000000
--- a/com.google.eclipse.cdt.core.macosx/library/PTY.h
+++ /dev/null
@@ -1,29 +0,0 @@
-/* DO NOT EDIT THIS FILE - it is machine generated */
-#include <jni.h>
-/* Header for class org_eclipse_cdt_utils_pty_PTY */
-
-#ifndef _Included_org_eclipse_cdt_utils_pty_PTY
-#define _Included_org_eclipse_cdt_utils_pty_PTY
-#ifdef __cplusplus
-extern "C" {
-#endif
-/*
- * Class: org_eclipse_cdt_utils_pty_PTY
- * Method: openMaster
- * Signature: (Z)Ljava/lang/String;
- */
-JNIEXPORT jstring JNICALL Java_org_eclipse_cdt_utils_pty_PTY_openMaster
- (JNIEnv *, jobject, jboolean);
-
-/*
- * Class: org_eclipse_cdt_utils_pty_PTY
- * Method: change_window_size
- * Signature: (III)I
- */
-JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_pty_PTY_change_1window_1size
- (JNIEnv *, jobject, jint, jint, jint);
-
-#ifdef __cplusplus
-}
-#endif
-#endif
diff --git a/com.google.eclipse.cdt.core.macosx/library/PTYInputStream.h b/com.google.eclipse.cdt.core.macosx/library/PTYInputStream.h
deleted file mode 100644
index e734927..0000000
--- a/com.google.eclipse.cdt.core.macosx/library/PTYInputStream.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/* DO NOT EDIT THIS FILE - it is machine generated */
-#include <jni.h>
-/* Header for class org_eclipse_cdt_utils_pty_PTYInputStream */
-
-#ifndef _Included_org_eclipse_cdt_utils_pty_PTYInputStream
-#define _Included_org_eclipse_cdt_utils_pty_PTYInputStream
-#ifdef __cplusplus
-extern "C" {
-#endif
-#undef org_eclipse_cdt_utils_pty_PTYInputStream_SKIP_BUFFER_SIZE
-#define org_eclipse_cdt_utils_pty_PTYInputStream_SKIP_BUFFER_SIZE 2048L
-/* Inaccessible static: skipBuffer */
-/*
- * Class: org_eclipse_cdt_utils_pty_PTYInputStream
- * Method: read0
- * Signature: (I[BI)I
- */
-JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_pty_PTYInputStream_read0
- (JNIEnv *, jobject, jint, jbyteArray, jint);
-
-/*
- * Class: org_eclipse_cdt_utils_pty_PTYInputStream
- * Method: close0
- * Signature: (I)I
- */
-JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_pty_PTYInputStream_close0
- (JNIEnv *, jobject, jint);
-
-#ifdef __cplusplus
-}
-#endif
-#endif
diff --git a/com.google.eclipse.cdt.core.macosx/library/PTYOutputStream.h b/com.google.eclipse.cdt.core.macosx/library/PTYOutputStream.h
deleted file mode 100644
index fb28491..0000000
--- a/com.google.eclipse.cdt.core.macosx/library/PTYOutputStream.h
+++ /dev/null
@@ -1,29 +0,0 @@
-/* DO NOT EDIT THIS FILE - it is machine generated */
-#include <jni.h>
-/* Header for class org_eclipse_cdt_utils_pty_PTYOutputStream */
-
-#ifndef _Included_org_eclipse_cdt_utils_pty_PTYOutputStream
-#define _Included_org_eclipse_cdt_utils_pty_PTYOutputStream
-#ifdef __cplusplus
-extern "C" {
-#endif
-/*
- * Class: org_eclipse_cdt_utils_pty_PTYOutputStream
- * Method: write0
- * Signature: (I[BI)I
- */
-JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_pty_PTYOutputStream_write0
- (JNIEnv *, jobject, jint, jbyteArray, jint);
-
-/*
- * Class: org_eclipse_cdt_utils_pty_PTYOutputStream
- * Method: close0
- * Signature: (I)I
- */
-JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_pty_PTYOutputStream_close0
- (JNIEnv *, jobject, jint);
-
-#ifdef __cplusplus
-}
-#endif
-#endif
diff --git a/com.google.eclipse.cdt.core.macosx/library/Spawner.h b/com.google.eclipse.cdt.core.macosx/library/Spawner.h
deleted file mode 100644
index 02727f9..0000000
--- a/com.google.eclipse.cdt.core.macosx/library/Spawner.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/* DO NOT EDIT THIS FILE - it is machine generated */
-#include <jni.h>
-/* Header for class org_eclipse_cdt_utils_spawner_Spawner */
-
-#ifndef _Included_org_eclipse_cdt_utils_spawner_Spawner
-#define _Included_org_eclipse_cdt_utils_spawner_Spawner
-#ifdef __cplusplus
-extern "C" {
-#endif
-/*
- * Class: org_eclipse_cdt_utils_spawner_Spawner
- * Method: exec0
- * Signature: ([Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;[I)I
- */
-JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_Spawner_exec0
- (JNIEnv *, jobject, jobjectArray, jobjectArray, jstring, jintArray);
-
-/*
- * Class: org_eclipse_cdt_utils_spawner_Spawner
- * Method: exec1
- * Signature: ([Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)I
- */
-JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_Spawner_exec1
- (JNIEnv *, jobject, jobjectArray, jobjectArray, jstring);
-
-/*
- * Class: org_eclipse_cdt_utils_spawner_Spawner
- * Method: exec2
- * Signature: ([Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;[ILjava/lang/String;IZ)I
- */
-JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_Spawner_exec2
- (JNIEnv *, jobject, jobjectArray, jobjectArray, jstring, jintArray, jstring, jint, jboolean);
-
-/*
- * Class: org_eclipse_cdt_utils_spawner_Spawner
- * Method: raise
- * Signature: (II)I
- */
-JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_Spawner_raise
- (JNIEnv *, jobject, jint, jint);
-
-/*
- * Class: org_eclipse_cdt_utils_spawner_Spawner
- * Method: waitFor
- * Signature: (I)I
- */
-JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_Spawner_waitFor
- (JNIEnv *, jobject, jint);
-
-#ifdef __cplusplus
-}
-#endif
-#endif
diff --git a/com.google.eclipse.cdt.core.macosx/library/SpawnerInputStream.h b/com.google.eclipse.cdt.core.macosx/library/SpawnerInputStream.h
deleted file mode 100644
index ecf8f8c..0000000
--- a/com.google.eclipse.cdt.core.macosx/library/SpawnerInputStream.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/* DO NOT EDIT THIS FILE - it is machine generated */
-#include <jni.h>
-/* Header for class com_qnx_tools_utils_spawner_SpawnerInputStream */
-
-#ifndef _Included_com_qnx_tools_utils_spawner_SpawnerInputStream
-#define _Included_com_qnx_tools_utils_spawner_SpawnerInputStream
-#ifdef __cplusplus
-extern "C" {
-#endif
-#undef com_qnx_tools_utils_spawner_SpawnerInputStream_SKIP_BUFFER_SIZE
-#define com_qnx_tools_utils_spawner_SpawnerInputStream_SKIP_BUFFER_SIZE 2048L
-/* Inaccessible static: skipBuffer */
-/*
- * Class: org_elipse_cdt_utils_spawner_SpawnerInputStream
- * Method: read0
- * Signature: (I[BI)I
- */
-JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_SpawnerInputStream_read0
- (JNIEnv *, jobject, jint, jbyteArray, jint);
-
-/*
- * Class: org_eclipse_cdt_utils_spawner_SpawnerInputStream
- * Method: close0
- * Signature: (I)I
- */
-JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_SpawnerInputStream_close0
- (JNIEnv *, jobject, jint);
-
-#ifdef __cplusplus
-}
-#endif
-#endif
diff --git a/com.google.eclipse.cdt.core.macosx/library/SpawnerOutputStream.h b/com.google.eclipse.cdt.core.macosx/library/SpawnerOutputStream.h
deleted file mode 100644
index 444d71c..0000000
--- a/com.google.eclipse.cdt.core.macosx/library/SpawnerOutputStream.h
+++ /dev/null
@@ -1,29 +0,0 @@
-/* DO NOT EDIT THIS FILE - it is machine generated */
-#include <jni.h>
-/* Header for class com_qnx_tools_utils_spawner_SpawnerOutputStream */
-
-#ifndef _Included_com_qnx_tools_utils_spawner_SpawnerOutputStream
-#define _Included_com_qnx_tools_utils_spawner_SpawnerOutputStream
-#ifdef __cplusplus
-extern "C" {
-#endif
-/*
- * Class: org_eclipse_cdt_utils_spawner_SpawnerOutputStream
- * Method: write0
- * Signature: (I[BI)I
- */
-JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_SpawnerOutputStream_write0
- (JNIEnv *, jobject, jint, jbyteArray, jint);
-
-/*
- * Class: org_eclipse_cdt_utils_spawner_SpawnerOutputStream
- * Method: close0
- * Signature: (I)I
- */
-JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_SpawnerOutputStream_close0
- (JNIEnv *, jobject, jint);
-
-#ifdef __cplusplus
-}
-#endif
-#endif
diff --git a/com.google.eclipse.cdt.core.macosx/library/exec0.h b/com.google.eclipse.cdt.core.macosx/library/exec0.h
deleted file mode 100644
index fa23bd7..0000000
--- a/com.google.eclipse.cdt.core.macosx/library/exec0.h
+++ /dev/null
@@ -1,26 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2002, 2009 QNX Software Systems and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * QNX Software Systems - initial API and implementation
- *******************************************************************************/
-#include <unistd.h>
-#include <sys/wait.h>
-#include <sys/types.h>
-#include <signal.h>
-#include <errno.h>
-
-extern pid_t exec0(const char *path, char *const argv[],
- char *const envp[], const char *dirpath,
- int channels[3] );
-
-extern pid_t exec_pty(const char *path, char *const argv[],
- char *const envp[], const char *dirpath,
- int channels[3], const char *pts_name, int fdm,
- int console);
-
-extern int wait0(pid_t pid);
diff --git a/com.google.eclipse.cdt.core.macosx/library/exec_pty.c b/com.google.eclipse.cdt.core.macosx/library/exec_pty.c
deleted file mode 100644
index c326805..0000000
--- a/com.google.eclipse.cdt.core.macosx/library/exec_pty.c
+++ /dev/null
@@ -1,184 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2002, 2009 QNX Software Systems and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * QNX Software Systems - initial API and implementation
- *******************************************************************************/
-#include "exec0.h"
-#include "openpty.h"
-#include <unistd.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <errno.h>
-#include <string.h>
-#include <libgen.h>
-#include <stdlib.h>
-#include <termios.h>
-
-/* from pfind.c */
-extern char *pfind(const char *name, char *const envp[]);
-
-pid_t
-exec_pty(const char *path, char *const argv[], char *const envp[],
- const char *dirpath, int channels[3], const char *pts_name, int fdm, int console)
-{
- int pipe2[2];
- pid_t childpid;
- char *full_path;
-
- /*
- * We use pfind() to check that the program exists and is an executable.
- * If not pass the error up. Also execve() wants a full path.
- */
- full_path = pfind(path, envp);
- if (full_path == NULL) {
- fprintf(stderr, "Unable to find full path for \"%s\"\n", (path) ? path : "");
- return -1;
- }
-
- /*
- * Make sure we can create our pipes before forking.
- */
- if (console && channels != NULL) {
- if (pipe(pipe2) < 0) {
- fprintf(stderr, "%s(%d): returning due to error: %s\n", __FUNCTION__, __LINE__, strerror(errno));
- free(full_path);
- return -1;
- }
- }
-
- childpid = fork();
-
- if (childpid < 0) {
- fprintf(stderr, "%s(%d): returning due to error: %s\n", __FUNCTION__, __LINE__, strerror(errno));
- free(full_path);
- return -1;
- } else if (childpid == 0) { /* child */
-
- chdir(dirpath);
-
- if (channels != NULL) {
- int fds;
-
- if (!console && setsid() < 0) {
- perror("setsid()");
- return -1;
- }
-
- fds = ptys_open(fdm, pts_name);
- if (fds < 0) {
- fprintf(stderr, "%s(%d): returning due to error: %s\n", __FUNCTION__, __LINE__, strerror(errno));
- return -1;
- }
-
- /* Close the read end of pipe2 */
- if (console && close(pipe2[0]) == -1) {
- perror("close(pipe2[0]))");
- }
-
- /* close the master, no need in the child */
- close(fdm);
-
- if (console) {
- set_noecho(fds);
- if (setpgid(getpid(), getpid()) < 0) {
- perror("setpgid()");
- return -1;
- }
- }
- /* redirections */
- dup2(fds, STDIN_FILENO); /* dup stdin */
- dup2(fds, STDOUT_FILENO); /* dup stdout */
- if (console) {
- dup2(pipe2[1], STDERR_FILENO); /* dup stderr */
- } else {
- dup2(fds, STDERR_FILENO); /* dup stderr */
- }
- close(fds); /* done with fds. */
- }
-
- /* Close all the fd's in the child */
- {
- int fdlimit = sysconf(_SC_OPEN_MAX);
- int fd = 3;
-
- while (fd < fdlimit)
- close(fd++);
- }
-
- if (envp[0] == NULL) {
- execv(full_path, argv);
- } else {
- execve(full_path, argv, envp);
- }
-
- _exit(127);
-
- } else if (childpid != 0) { /* parent */
-
- if (console) {
- set_noecho(fdm);
- }
- if (channels != NULL) {
- /* close the write end of pipe1 */
- if (console && close(pipe2[1]) == -1)
- perror("close(pipe2[1])");
-
- channels[0] = fdm; /* Input Stream. */
- channels[1] = fdm; /* Output Stream. */
- if (console) { /* stderr Stream. */
- channels[2] = pipe2[0];
- } else {
- channels[2] = fdm;
- }
- }
-
- free(full_path);
- return childpid;
- }
-
- free(full_path);
- return -1; /*NOT REACHED */
-}
-#ifdef __STAND_ALONE__
-int main(int argc, char **argv, char **envp) {
- const char *path = "./bufferring_test";
- int channels[3] = { -1, -1, -1};
- int status;
- FILE *app_stdin;
- FILE *app_stdout;
- FILE *app_stderr;
- char pts_name[32];
- int fdm;
- char buffer[32];
-
- fdm = ptym_open(pts_name);
- status = exec_pty(path, argv, envp, ".", channels, pts_name, fdm);
- if (status >= 0) {
- app_stdin = fdopen(channels[0], "w");
- app_stdout = fdopen(channels[1], "r");
- app_stderr = fdopen(channels[2], "r");
- if (app_stdout == NULL || app_stderr == NULL || app_stdin == NULL) {
- fprintf(stderr, "PROBLEMS\n");
- } else {
- fputs("foo\n", app_stdin);
- fputs("bar\n", app_stdin);
- while(fgets(buffer, sizeof buffer, app_stdout) != NULL) {
- fprintf(stdout, "STDOUT: %s\n", buffer);
- }
- while(fgets(buffer, sizeof buffer, app_stderr) != NULL) {
- fprintf(stdout, "STDERR: %s\n", buffer);
- }
- }
- }
- fputs("bye\n", stdout);
- close(channels[0]);
- close(channels[1]);
- close(channels[2]);
- return 0;
-}
-#endif
diff --git a/com.google.eclipse.cdt.core.macosx/library/exec_unix.c b/com.google.eclipse.cdt.core.macosx/library/exec_unix.c
deleted file mode 100644
index ee70513..0000000
--- a/com.google.eclipse.cdt.core.macosx/library/exec_unix.c
+++ /dev/null
@@ -1,145 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2002 - 2005 QNX Software Systems and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * QNX Software Systems - initial API and implementation
- *******************************************************************************/
-#include "exec0.h"
-#include <unistd.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <errno.h>
-#include <string.h>
-#include <libgen.h>
-#include <stdlib.h>
-
-/* from pfind.c */
-extern char *pfind(const char *name, char *const envp[]);
-
-pid_t
-exec0(const char *path, char *const argv[], char *const envp[],
- const char *dirpath, int channels[3])
-{
- int pipe0[2], pipe1[2], pipe2[2];
- pid_t childpid;
- char *full_path;
-
- /*
- * We use pfind() to check that the program exists and is an executable.
- * If not pass the error up. Also execve() wants a full path.
- */
- full_path = pfind(path, envp);
- if (full_path == NULL) {
- fprintf(stderr, "Unable to find full path for \"%s\"\n", (path) ? path : "");
- return -1;
- }
-
- /*
- * Make sure we can create our pipes before forking.
- */
- if (channels != NULL) {
- if (pipe(pipe0) < 0 || pipe(pipe1) < 0 || pipe(pipe2) < 0) {
- fprintf(stderr, "%s(%d): returning due to error.\n",
- __FUNCTION__, __LINE__);
- free(full_path);
- return -1;
- }
- }
-
- childpid = fork();
-
- if (childpid < 0) {
- fprintf(stderr, "%s(%d): returning due to error: %s\n",
- __FUNCTION__, __LINE__, strerror(errno));
- free(full_path);
- return -1;
- } else if (childpid == 0) { /* child */
- char *ptr;
-
- chdir(dirpath);
-
- if (channels != NULL) {
- /* Close the write end of pipe0 */
- if (close(pipe0[1]) == -1)
- perror("close(pipe0[1])");
-
- /* Close the read end of pipe1 */
- if (close(pipe1[0]) == -1)
- perror("close(pipe1[0])");
-
- /* Close the read end of pipe2 */
- if (close(pipe2[0]) == -1)
- perror("close(pipe2[0]))");
-
- /* redirections */
- dup2(pipe0[0], STDIN_FILENO); /* dup stdin */
- dup2(pipe1[1], STDOUT_FILENO); /* dup stdout */
- dup2(pipe2[1], STDERR_FILENO); /* dup stderr */
- }
-
- /* Close all the fd's in the child */
- {
- int fdlimit = sysconf(_SC_OPEN_MAX);
- int fd = 3;
-
- while (fd < fdlimit)
- close(fd++);
- }
-
- if (envp[0] == NULL) {
- execv(full_path, argv);
- } else {
- execve(full_path, argv, envp);
- }
-
- _exit(127);
-
- } else if (childpid != 0) { /* parent */
-
- char b;
-
- if (channels != NULL) {
- /* close the read end of pipe1 */
- if (close(pipe0[0]) == -1)
- perror("close(pipe0[0])");
-
- /* close the write end of pipe2 */
- if (close(pipe1[1]) == -1)
- perror("close(pipe1[1])");
-
- /* close the write end of pipe2 */
- if (close(pipe2[1]) == -1)
- perror("close(pipe2[1])");
-
- channels[0] = pipe0[1]; /* Output Stream. */
- channels[1] = pipe1[0]; /* Input Stream. */
- channels[2] = pipe2[0]; /* Input Stream. */
- }
-
- free(full_path);
- return childpid;
- }
-
- free(full_path);
- return -1; /*NOT REACHED */
-}
-
-
-int wait0(pid_t pid)
-{
- int status;
- int val = -1;
-
- if (pid < 0 || waitpid(pid, &status, 0) < 0)
- return -1;
-
- if (WIFEXITED(status)) {
- val = WEXITSTATUS(status);
- }
-
- return val;
-}
diff --git a/com.google.eclipse.cdt.core.macosx/library/io.c b/com.google.eclipse.cdt.core.macosx/library/io.c
deleted file mode 100644
index 8c45e5d..0000000
--- a/com.google.eclipse.cdt.core.macosx/library/io.c
+++ /dev/null
@@ -1,113 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2002 - 2005 QNX Software Systems and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * QNX Software Systems - initial API and implementation
- *******************************************************************************/
-#include <jni.h>
-#include <stdio.h>
-#include <SpawnerInputStream.h>
-#include <SpawnerOutputStream.h>
-#include <unistd.h>
-
-/* Header for class _org_eclipse_cdt_utils_spawner_SpawnerInputStream */
-/* Header for class _org_eclipse_cdt_utils_spawner_SpawnerOutputStream */
-
-/*
- * Class: org_eclipse_cdt_utils_spawner_SpawnerInputStream
- * Method: read0
- * Signature: (I)I
- */
-JNIEXPORT jint JNICALL
-Java_org_eclipse_cdt_utils_spawner_SpawnerInputStream_read0(JNIEnv * env,
- jobject jobj,
- jint jfd,
- jbyteArray buf,
- jint buf_len)
-{
- int fd;
- int status;
- jbyte *data;
- int data_len;
-
- data = (*env)->GetByteArrayElements(env, buf, 0);
- data_len = buf_len;
- fd = jfd;
-
- status = read( fd, data, data_len );
- (*env)->ReleaseByteArrayElements(env, buf, data, 0);
-
- if (status == 0) {
- /* EOF. */
- status = -1;
- } else if (status == -1) {
- /* Error, toss an exception */
- jclass exception = (*env)->FindClass(env, "java/io/IOException");
- if (exception == NULL) {
- /* Give up. */
- return -1;
- }
- (*env)->ThrowNew(env, exception, "read error");
- }
-
- return status;
-}
-
-
-/*
- * Class: org_eclipse_cdt_utils_spawner_SpawnerInputStream
- * Method: close0
- * Signature: (I)I
- */
-JNIEXPORT jint JNICALL
-Java_org_eclipse_cdt_utils_spawner_SpawnerInputStream_close0(JNIEnv * env,
- jobject jobj,
- jint fd)
-{
- return close(fd);
-}
-
-/*
- * Class: org_eclipse_cdt_utils_spawner_SpawnerOutputStream
- * Method: write0
- * Signature: (II)I
- */
-JNIEXPORT jint JNICALL
-Java_org_eclipse_cdt_utils_spawner_SpawnerOutputStream_write0(JNIEnv * env,
- jobject jobj,
- jint jfd,
- jbyteArray buf,
- jint buf_len)
-{
- int status;
- int fd;
- jbyte *data;
- int data_len;
-
- data = (*env)->GetByteArrayElements(env, buf, 0);
- data_len = buf_len;
- fd = jfd;
-
- status = write(fd, data, data_len);
- (*env)->ReleaseByteArrayElements(env, buf, data, 0);
-
- return status;
-}
-
-
-/*
- * Class: org_eclipse_cdt_utils_spawner_SpawnerOutputStream
- * Method: close0
- * Signature: (I)I
- */
-JNIEXPORT jint JNICALL
-Java_org_eclipse_cdt_utils_spawner_SpawnerOutputStream_close0(JNIEnv * env,
- jobject jobj,
- jint fd)
-{
- return close(fd);
-}
diff --git a/com.google.eclipse.cdt.core.macosx/library/openpty.c b/com.google.eclipse.cdt.core.macosx/library/openpty.c
deleted file mode 100644
index 0d720f5..0000000
--- a/com.google.eclipse.cdt.core.macosx/library/openpty.c
+++ /dev/null
@@ -1,136 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2002, 2009 QNX Software Systems and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * QNX Software Systems - initial API and implementation
- *******************************************************************************/
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <sys/ioctl.h>
-#include <fcntl.h>
-#include <termios.h>
-#include <errno.h>
-#include <unistd.h>
-#include <stdio.h>
-#include <string.h>
-#include <grp.h>
-#include <termios.h>
-
-#include <stdlib.h>
-
-/**
- * This is taken from R. W. Stevens book.
- * Alain Magloire.
- */
-
-int ptym_open (char *pts_name);
-int ptys_open (int fdm, const char * pts_name);
-
-int
-openpty(int *amaster, int *aslave, char *name, struct termios *termp, struct winsize *winp)
-{
- char line[20];
- line[0]=0;
- *amaster = ptym_open(line);
- if (*amaster < 0)
- return -1;
- *aslave = ptys_open(*amaster, line);
- if (*aslave < 0) {
- close(*amaster);
- return -1;
- }
- if (name)
- strcpy(name, line);
-#ifndef TCSAFLUSH
-#define TCSAFLUSH TCSETAF
-#endif
- if (termp)
- (void) tcsetattr(*aslave, TCSAFLUSH, termp);
-#ifdef TIOCSWINSZ
- if (winp)
- (void) ioctl(*aslave, TIOCSWINSZ, (char *)winp);
-#endif
- return 0;
-}
-
-int
-ptym_open(char * pts_name)
-{
- char *ptr1, *ptr2;
- int fdm;
-
- strcpy(pts_name, "/dev/ptyXY");
- /* array index: 012345689 (for references in following code) */
- for (ptr1 = "pqrstuvwxyzPQRST"; *ptr1 != 0; ptr1++) {
- pts_name[8] = *ptr1;
- for (ptr2 = "0123456789abcdef"; *ptr2 != 0; ptr2++) {
- pts_name[9] = *ptr2;
- /* try to open master */
- fdm = open(pts_name, O_RDWR);
- if (fdm < 0) {
- if (errno == ENOENT) {/* different from EIO */
- return -1; /* out of pty devices */
- } else {
- continue; /* try next pty device */
- }
- }
- pts_name[5] = 't'; /* chage "pty" to "tty" */
- return fdm; /* got it, return fd of master */
- }
- }
- return -1; /* out of pty devices */
-}
-
-int
-ptys_open(int fdm, const char * pts_name)
-{
- int gid, fds;
- struct group *grptr;
-
- grptr = getgrnam("tty");
- if (grptr != NULL) {
- gid = grptr->gr_gid;
- } else {
- gid = -1; /* group tty is not in the group file */
- }
-
- /* following two functions don't work unless we're root */
- chown(pts_name, getuid(), gid);
- chmod(pts_name, S_IRUSR | S_IWUSR | S_IWGRP);
- fds = open(pts_name, O_RDWR);
- if (fds < 0) {
- close(fdm);
- return -1;
- }
-
-#if defined(TIOCSCTTY)
- /* TIOCSCTTY is the BSD way to acquire a controlling terminal. */
- if (ioctl(fds, TIOCSCTTY, (char *)0) < 0) {
- // ignore error: this is expected in console-mode
- }
-#endif
-
- return fds;
-}
-
-void
-set_noecho(int fd)
-{
- struct termios stermios;
- if (tcgetattr(fd, &stermios) < 0) {
- return ;
- }
-
- /* turn off echo */
- stermios.c_lflag &= ~(ECHO | ECHOE | ECHOK | ECHONL);
- /* Turn off the NL to CR/NL mapping ou output. */
- /*stermios.c_oflag &= ~(ONLCR);*/
-
- stermios.c_iflag |= (IGNCR);
-
- tcsetattr(fd, TCSANOW, &stermios);
-}
diff --git a/com.google.eclipse.cdt.core.macosx/library/openpty.h b/com.google.eclipse.cdt.core.macosx/library/openpty.h
deleted file mode 100644
index fd974da..0000000
--- a/com.google.eclipse.cdt.core.macosx/library/openpty.h
+++ /dev/null
@@ -1,16 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2002, 2009 QNX Software Systems and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * QNX Software Systems - initial API and implementation
- *******************************************************************************/
-#ifndef _OPENPTY_H
-#define _OPENPTY_H
-int ptym_open (char *pts_name);
-int ptys_open (int fdm, const char * pts_name);
-void set_noecho(int fd);
-#endif
diff --git a/com.google.eclipse.cdt.core.macosx/library/pfind.c b/com.google.eclipse.cdt.core.macosx/library/pfind.c
deleted file mode 100644
index 83abf24..0000000
--- a/com.google.eclipse.cdt.core.macosx/library/pfind.c
+++ /dev/null
@@ -1,109 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2002, 2010 QNX Software Systems and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * QNX Software Systems - initial API and implementation
- * Wind River Systems, Inc.
- * Mikhail Sennikovsky - bug 145737
- * Everton Rufino Constantino (IBM) - bug 237611
- *******************************************************************************/
-/*
- * pfind.c - Search for a binary in $PATH.
- */
-
-#include <stdio.h>
-#include <unistd.h>
-#include <stdlib.h>
-#include <string.h>
-#include <limits.h>
-
-#ifndef PATH_MAX
-#define PATH_MAX 1024
-#endif
-
-#define PATH_DEF "PATH="
-const int path_def_len = 5; /* strlen(PATH_DEF); */
-
-char * path_val(char * const envp[])
-{
- int i;
- if (envp == NULL || envp[0] == NULL)
- return getenv("PATH" );
-
- for(i = 0; envp[i] != NULL; i++){
- char* p = envp[i];
- if(!strncmp(PATH_DEF, p, path_def_len)){
- return p + path_def_len;
- }
- }
-
- return NULL;
-}
-
-char * pfind(const char *name, char * const envp[])
-{
- char *tok;
- char *sp;
- char *path;
- char fullpath[PATH_MAX+1];
-
- /* Sanity check. */
- if (name == NULL) {
- fprintf(stderr, "pfind(): Null argument.\n");
- return NULL;
- }
-
- /* For absolute name or name with a path, check if it is an executable. */
- if (name[0] == '/' || name[0] == '.') {
- if (access(name, X_OK) == 0) {
- return strdup(name);
- }
- return NULL;
- }
-
- /* Search in the PATH environment. */
- path = path_val( envp );
-
- if (path == NULL || strlen(path) <= 0) {
- fprintf(stderr, "Unable to get $PATH.\n");
- return NULL;
- }
-
- /* The value return by getenv() is readonly */
- path = strdup(path);
-
- tok = strtok_r(path, ":", &sp);
- while (tok != NULL) {
- snprintf(fullpath, sizeof(fullpath) - 1, "%s/%s", tok, name);
-
- if (access(fullpath, X_OK) == 0) {
- free(path);
- return strdup(fullpath);
- }
-
- tok = strtok_r( NULL, ":", &sp );
- }
-
- free(path);
- return NULL;
-}
-
-#ifdef BUILD_WITH_MAIN
-int main(int argc, char **argv)
-{
- int i;
- char *fullpath;
-
- for (i=1; i<argc; i++) {
- fullpath = pfind(argv[i], NULL);
- if (fullpath == NULL)
- printf("Unable to find %s in $PATH.\n", argv[i]);
- else
- printf("Found %s @ %s.\n", argv[i], fullpath);
- }
-}
-#endif
diff --git a/com.google.eclipse.cdt.core.macosx/library/pty.c b/com.google.eclipse.cdt.core.macosx/library/pty.c
deleted file mode 100644
index e7c23e8..0000000
--- a/com.google.eclipse.cdt.core.macosx/library/pty.c
+++ /dev/null
@@ -1,67 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2002, 2009 QNX Software Systems and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * QNX Software Systems - initial API and implementation
- *******************************************************************************/
-#include "PTY.h"
-#include "openpty.h"
-
-/*
- * Class: org_eclipse_cdt_utils_pty_PTY
- * Method: forkpty
- * Signature: ()I
- */
-JNIEXPORT jstring JNICALL
-Java_org_eclipse_cdt_utils_pty_PTY_openMaster (JNIEnv *env, jobject jobj, jboolean console) {
- jfieldID fid; /* Store the field ID */
- jstring jstr = NULL;
- int master = -1;
- char line[1024]; /* FIXME: Should be enough */
- jclass cls;
-
- line[0] = '\0';
-
- master = ptym_open(line);
- if (master >= 0) {
- if (console) {
- // turn off echo
- set_noecho(master);
- }
-
- /* Get a reference to the obj's class */
- cls = (*env)->GetObjectClass(env, jobj);
-
- /* Set the master fd. */
- fid = (*env)->GetFieldID(env, cls, "master", "I");
- if (fid == NULL) {
- return NULL;
- }
- (*env)->SetIntField(env, jobj, fid, (jint)master);
-
- /* Create a new String for the slave. */
- jstr = (*env)->NewStringUTF(env, line);
- }
- return jstr;
-}
-
-JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_pty_PTY_change_1window_1size
- (JNIEnv *env, jobject jobj, jint fdm, jint width, jint height)
-{
-#ifdef TIOCGWINSZ
- struct winsize win;
-
- win.ws_col = width;
- win.ws_row = height;
- win.ws_xpixel = 0;
- win.ws_ypixel = 0;
-
- return ioctl(fdm, TIOCSWINSZ, &win);
-#else
- return 0;
-#endif
-}
diff --git a/com.google.eclipse.cdt.core.macosx/library/ptyio.c b/com.google.eclipse.cdt.core.macosx/library/ptyio.c
deleted file mode 100644
index a999787..0000000
--- a/com.google.eclipse.cdt.core.macosx/library/ptyio.c
+++ /dev/null
@@ -1,117 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2002 - 2005 QNX Software Systems and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * QNX Software Systems - initial API and implementation
- *******************************************************************************/
-#include <jni.h>
-#include <stdio.h>
-#include <PTYInputStream.h>
-#include <PTYOutputStream.h>
-#include <unistd.h>
-
-/* Header for class _org_eclipse_cdt_utils_pty_PTYInputStream */
-/* Header for class _org_eclipse_cdt_utils_pty_PTYOutputStream */
-
-/*
- * Class: org_eclipse_cdt_utils_pty_PTYInputStream
- * Method: read0
- * Signature: (I)I
- */
-JNIEXPORT jint JNICALL
-Java_org_eclipse_cdt_utils_pty_PTYInputStream_read0(JNIEnv * env,
- jobject jobj,
- jint jfd,
- jbyteArray buf,
- jint buf_len)
-{
- int fd;
- int status;
- jbyte *data;
- int data_len;
-
- data = (*env)->GetByteArrayElements(env, buf, 0);
- data_len = buf_len;
- fd = jfd;
-
- status = read( fd, data, data_len );
- (*env)->ReleaseByteArrayElements(env, buf, data, 0);
-
- if (status == 0) {
- /* EOF. */
- status = -1;
- } else if (status == -1) {
- /* Error, toss an exception */
- /* Ignore the error for now, the debugger will attempt
- * to close this multiple time. */
-#if 0
- jclass exception = (*env)->FindClass(env, "java/io/IOException");
- if (exception == NULL) {
- /* Give up. */
- return -1;
- }
- (*env)->ThrowNew(env, exception, "read error");
-#endif
- }
-
- return status;
-}
-
-
-/*
- * Class: org_eclipse_cdt_utils_pty_PTYInputStream
- * Method: close0
- * Signature: (I)I
- */
-JNIEXPORT jint JNICALL
-Java_org_eclipse_cdt_utils_pty_PTYInputStream_close0(JNIEnv * env,
- jobject jobj,
- jint fd)
-{
- return close(fd);
-}
-
-/*
- * Class: org_eclipse_cdt_utils_pty_PTYOutputStream
- * Method: write0
- * Signature: (II)I
- */
-JNIEXPORT jint JNICALL
-Java_org_eclipse_cdt_utils_pty_PTYOutputStream_write0(JNIEnv * env,
- jobject jobj,
- jint jfd,
- jbyteArray buf,
- jint buf_len)
-{
- int status;
- int fd;
- jbyte *data;
- int data_len;
-
- data = (*env)->GetByteArrayElements(env, buf, 0);
- data_len = buf_len;
- fd = jfd;
-
- status = write(fd, data, data_len);
- (*env)->ReleaseByteArrayElements(env, buf, data, 0);
-
- return status;
-}
-
-
-/*
- * Class: org_eclipse_cdt_utils_pty_PTYOutputStream
- * Method: close0
- * Signature: (I)I
- */
-JNIEXPORT jint JNICALL
-Java_org_eclipse_cdt_utils_pty_PTYOutputStream_close0(JNIEnv * env,
- jobject jobj,
- jint fd)
-{
- return close(fd);
-}
diff --git a/com.google.eclipse.cdt.core.macosx/library/spawner.c b/com.google.eclipse.cdt.core.macosx/library/spawner.c
deleted file mode 100644
index 99f7fde..0000000
--- a/com.google.eclipse.cdt.core.macosx/library/spawner.c
+++ /dev/null
@@ -1,284 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2002, 2009 QNX Software Systems and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * QNX Software Systems - initial API and implementation
- *******************************************************************************/
-#include <unistd.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <signal.h>
-#include <string.h>
-#include <jni.h>
-
-#include "exec0.h"
-#include <Spawner.h>
-
-
-#define DEBUGIT 0
-
-
-/*
- * Header for class org_eclipse_cdt_utils_spawner_Spawner
- */
-
-
-#if DEBUGIT
-static void print_array(char **c_array)
-{
- if (c_array) {
- char **p = c_array;
- for (; *p; p++) {
- if (*p) {
- fprintf(stderr, " %s", *p);
- }
- }
- } else {
- fprintf(stderr, "null");
- }
- fprintf(stderr, "\n");
-}
-#endif
-
-
-static char **alloc_c_array(JNIEnv * env, jobjectArray j_array)
-{
- int i;
- jint c_array_size = (*env)->GetArrayLength(env, j_array);
- char **c_array = calloc(c_array_size + 1, sizeof(*c_array));
-
- if (c_array == NULL)
- return NULL;
-
- for (i = 0; i < c_array_size; i++) {
- jstring j_str =
- (jstring) (*env)->GetObjectArrayElement(env, j_array, i);
- const char *c_str = (*env)->GetStringUTFChars(env, j_str, NULL);
- c_array[i] = (char *) strdup(c_str);
- (*env)->ReleaseStringUTFChars(env, j_str, c_str);
- (*env)->DeleteLocalRef(env, j_str);
- }
-
- return c_array;
-}
-
-
-static void free_c_array(char **c_array)
-{
- if (c_array) {
- char **p = c_array;
- for (; *p; p++) {
- if (*p) {
- free(*p);
- }
- }
- free(c_array);
- }
-}
-
-
-/*
- * Class: org_eclipse_cdt_utils_spawner_Spawner
- * Method: exec2
- * Signature: ([Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;[ILorg/eclipse/cdt/utils/pty/PTY;)I
- */
-JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_Spawner_exec2
- (JNIEnv *env, jobject jobj, jobjectArray jcmd, jobjectArray jenv, jstring jdir, jintArray jchannels,
- jstring jslaveName, jint masterFD, jboolean console)
-{
- jint *channels = (*env)->GetIntArrayElements(env, jchannels, 0);
- const char *dirpath = (*env)->GetStringUTFChars(env, jdir, NULL);
- const char *pts_name = (*env)->GetStringUTFChars(env, jslaveName, NULL);
- char **cmd = NULL;
- char **envp = NULL;
- int fd[3];
- pid_t pid = -1;
-
- if (channels == NULL)
- goto bail_out;
-
- cmd = alloc_c_array(env, jcmd);
- if (cmd == NULL)
- goto bail_out;
-
- envp = alloc_c_array(env, jenv);
- if (envp == NULL)
- goto bail_out;
-
-#if DEBUGIT
- fprintf(stderr, "command:");
- print_array(cmd);
- fprintf(stderr, "Envp:");
- print_array(envp);
- fprintf(stderr, "dirpath: %s\n", dirpath);
- fprintf(stderr, "pts_name: %s\n", pts_name);
-#endif
-
- pid = exec_pty(cmd[0], cmd, envp, dirpath, fd, pts_name, masterFD, console);
- if (pid < 0)
- goto bail_out;
-
- channels[0] = fd[0];
- channels[1] = fd[1];
- channels[2] = fd[2];
-
- bail_out:
- (*env)->ReleaseIntArrayElements(env, jchannels, channels, 0);
- (*env)->ReleaseStringUTFChars(env, jdir, dirpath);
- (*env)->ReleaseStringUTFChars(env, jslaveName, pts_name);
- if (cmd)
- free_c_array(cmd);
- if (envp)
- free_c_array(envp);
- return pid;
-}
-
-JNIEXPORT jint JNICALL
-Java_org_eclipse_cdt_utils_spawner_Spawner_exec1(JNIEnv * env, jobject jobj,
- jobjectArray jcmd,
- jobjectArray jenv,
- jstring jdir)
-{
- const char *dirpath = (*env)->GetStringUTFChars(env, jdir, NULL);
- char **cmd = NULL;
- char **envp = NULL;
- pid_t pid = -1;
-
- cmd = alloc_c_array(env, jcmd);
- if (cmd == NULL)
- goto bail_out;
-
- envp = alloc_c_array(env, jenv);
- if (envp == NULL)
- goto bail_out;
-
-#if DEBUGIT
- fprintf(stderr, "command:");
- print_array(cmd);
- fprintf(stderr, "Envp:");
- print_array(envp);
- fprintf(stderr, "dirpath: %s\n", dirpath);
-#endif
-
- pid = exec0(cmd[0], cmd, envp, dirpath, NULL);
- if (pid < 0)
- goto bail_out;
-
- bail_out:
- (*env)->ReleaseStringUTFChars(env, jdir, dirpath);
- if (cmd)
- free_c_array(cmd);
- if (envp)
- free_c_array(envp);
- return pid;
-}
-
-/*
- * Class: org_eclipse_cdt_utils_spawner_Spawner
- * Method: exec0
- * Signature: ([Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;[I)I
- */
-JNIEXPORT jint JNICALL
-Java_org_eclipse_cdt_utils_spawner_Spawner_exec0(JNIEnv * env, jobject jobj,
- jobjectArray jcmd,
- jobjectArray jenv,
- jstring jdir,
- jintArray jchannels)
-{
- jint *channels = (*env)->GetIntArrayElements(env, jchannels, 0);
- const char *dirpath = (*env)->GetStringUTFChars(env, jdir, NULL);
- char **cmd = NULL;
- char **envp = NULL;
- int fd[3];
- pid_t pid = -1;
-
- if (channels == NULL)
- goto bail_out;
-
- cmd = alloc_c_array(env, jcmd);
- if (cmd == NULL)
- goto bail_out;
-
- envp = alloc_c_array(env, jenv);
- if (envp == NULL)
- goto bail_out;
-
-#if DEBUGIT
- fprintf(stderr, "command:");
- print_array(cmd);
- fprintf(stderr, "Envp:");
- print_array(envp);
- fprintf(stderr, "dirpath: %s\n", dirpath);
-#endif
-
- pid = exec0(cmd[0], cmd, envp, dirpath, fd);
- if (pid < 0)
- goto bail_out;
-
- channels[0] = fd[0];
- channels[1] = fd[1];
- channels[2] = fd[2];
-
- bail_out:
- (*env)->ReleaseIntArrayElements(env, jchannels, channels, 0);
- (*env)->ReleaseStringUTFChars(env, jdir, dirpath);
- if (cmd)
- free_c_array(cmd);
- if (envp)
- free_c_array(envp);
- return pid;
-}
-
-/*
- * Class: org_eclipse_cdt_utils_spawner_Spawner
- * Method: raise
- * Signature: (II)I
- */
-JNIEXPORT jint JNICALL
-Java_org_eclipse_cdt_utils_spawner_Spawner_raise(JNIEnv * env, jobject jobj,
- jint pid, jint sig)
-{
- int status = -1;
-
- switch (sig) {
- case 0: /* NOOP */
- status = kill(pid, 0);
- break;
-
- case 2: /* INTERRUPT */
- status = kill(pid, SIGINT);
- break;
-
- case 9: /* KILL */
- status = kill(pid, SIGKILL);
- break;
-
- case 15: /* TERM */
- status = kill(pid, SIGTERM);
- break;
-
- default:
- status = kill(pid, sig); /* WHAT ?? */
- break;
- }
-
- return status;
-}
-
-
-
-/*
- * Class: org_eclipse_cdt_utils_spawner_Spawner
- * Method: waitFor
- * Signature: (I)I
- */
-JNIEXPORT jint JNICALL
-Java_org_eclipse_cdt_utils_spawner_Spawner_waitFor(JNIEnv * env,
- jobject jobj, jint pid)
-{
- return wait0(pid);
-}
diff --git a/com.google.eclipse.cdt.core.macosx/os/macosx/ppc/libgpty.jnilib b/com.google.eclipse.cdt.core.macosx/os/macosx/ppc/libgpty.jnilib
deleted file mode 100644
index a7a98f9..0000000
--- a/com.google.eclipse.cdt.core.macosx/os/macosx/ppc/libgpty.jnilib
+++ /dev/null
Binary files differ
diff --git a/com.google.eclipse.cdt.core.macosx/os/macosx/ppc/libgspawner.jnilib b/com.google.eclipse.cdt.core.macosx/os/macosx/ppc/libgspawner.jnilib
deleted file mode 100644
index 96ae03d..0000000
--- a/com.google.eclipse.cdt.core.macosx/os/macosx/ppc/libgspawner.jnilib
+++ /dev/null
Binary files differ
diff --git a/com.google.eclipse.cdt.core.macosx/os/macosx/x86/libgpty.jnilib b/com.google.eclipse.cdt.core.macosx/os/macosx/x86/libgpty.jnilib
deleted file mode 100755
index 49ad7a7..0000000
--- a/com.google.eclipse.cdt.core.macosx/os/macosx/x86/libgpty.jnilib
+++ /dev/null
Binary files differ
diff --git a/com.google.eclipse.cdt.core.macosx/os/macosx/x86/libgspawner.jnilib b/com.google.eclipse.cdt.core.macosx/os/macosx/x86/libgspawner.jnilib
deleted file mode 100755
index 1377d5d..0000000
--- a/com.google.eclipse.cdt.core.macosx/os/macosx/x86/libgspawner.jnilib
+++ /dev/null
Binary files differ
diff --git a/com.google.eclipse.cdt.core.macosx/os/macosx/x86_64/libgpty.jnilib b/com.google.eclipse.cdt.core.macosx/os/macosx/x86_64/libgpty.jnilib
deleted file mode 100644
index e0577a8..0000000
--- a/com.google.eclipse.cdt.core.macosx/os/macosx/x86_64/libgpty.jnilib
+++ /dev/null
Binary files differ
diff --git a/com.google.eclipse.cdt.core.macosx/os/macosx/x86_64/libgspawner.jnilib b/com.google.eclipse.cdt.core.macosx/os/macosx/x86_64/libgspawner.jnilib
deleted file mode 100644
index 06c3818..0000000
--- a/com.google.eclipse.cdt.core.macosx/os/macosx/x86_64/libgspawner.jnilib
+++ /dev/null
Binary files differ
diff --git a/com.google.eclipse.cdt.core/.classpath b/com.google.eclipse.cdt.core/.classpath
deleted file mode 100644
index cbb71f6..0000000
--- a/com.google.eclipse.cdt.core/.classpath
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
- <classpathentry kind="src" path="src"/>
- <classpathentry kind="src" path="utils"/>
- <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
- <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
- <classpathentry kind="output" path="bin"/>
-</classpath>
diff --git a/com.google.eclipse.cdt.core/.gitignore b/com.google.eclipse.cdt.core/.gitignore
deleted file mode 100644
index 5e56e04..0000000
--- a/com.google.eclipse.cdt.core/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-/bin
diff --git a/com.google.eclipse.cdt.core/.project b/com.google.eclipse.cdt.core/.project
deleted file mode 100644
index fa9ad7d..0000000
--- a/com.google.eclipse.cdt.core/.project
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
- <name>com.google.eclipse.cdt.core</name>
- <comment></comment>
- <projects>
- </projects>
- <buildSpec>
- <buildCommand>
- <name>org.eclipse.jdt.core.javabuilder</name>
- <arguments>
- </arguments>
- </buildCommand>
- <buildCommand>
- <name>org.eclipse.pde.ManifestBuilder</name>
- <arguments>
- </arguments>
- </buildCommand>
- <buildCommand>
- <name>org.eclipse.pde.SchemaBuilder</name>
- <arguments>
- </arguments>
- </buildCommand>
- </buildSpec>
- <natures>
- <nature>org.eclipse.jdt.core.javanature</nature>
- <nature>org.eclipse.pde.PluginNature</nature>
- </natures>
-</projectDescription>
diff --git a/com.google.eclipse.cdt.core/.settings/org.eclipse.jdt.core.prefs b/com.google.eclipse.cdt.core/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100644
index c537b63..0000000
--- a/com.google.eclipse.cdt.core/.settings/org.eclipse.jdt.core.prefs
+++ /dev/null
@@ -1,7 +0,0 @@
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
-org.eclipse.jdt.core.compiler.compliance=1.6
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.source=1.6
diff --git a/com.google.eclipse.cdt.core/META-INF/MANIFEST.MF b/com.google.eclipse.cdt.core/META-INF/MANIFEST.MF
deleted file mode 100644
index cbe79bd..0000000
--- a/com.google.eclipse.cdt.core/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,18 +0,0 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: %pluginName
-Bundle-SymbolicName: com.google.eclipse.cdt.core;singleton:=true
-Bundle-Version: 1.1.0.qualifier
-Bundle-Activator: com.google.eclipse.cdt.core.CCorePlugin
-Bundle-Vendor: %providerName
-Bundle-Localization: plugin
-Export-Package: com.google.eclipse.cdt.core,
- com.google.eclipse.cdt.internal.core,
- com.google.eclipse.cdt.utils,
- org.eclipse.cdt.utils.pty,
- org.eclipse.cdt.utils.spawner
-Require-Bundle: org.eclipse.core.resources,
- org.eclipse.core.runtime;bundle-version="[3.7.0,4.0.0)",
- com.ibm.icu;bundle-version="4.4.2"
-Bundle-ActivationPolicy: lazy
-Bundle-RequiredExecutionEnvironment: JavaSE-1.6
diff --git a/com.google.eclipse.cdt.core/build.properties b/com.google.eclipse.cdt.core/build.properties
deleted file mode 100644
index b8073b7..0000000
--- a/com.google.eclipse.cdt.core/build.properties
+++ /dev/null
@@ -1,19 +0,0 @@
-###############################################################################
-# Copyright (c) 2003, 2009 IBM Corporation and others.
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-# IBM Corporation - initial API and implementation
-###############################################################################
-bin.includes = plugin.properties,\
- .,\
- META-INF/
-source.. = src/,\
- utils/
-
-jre.compilation.profile=JavaSE-1.6
-javacSource=1.6
-javacTarget=1.6
diff --git a/com.google.eclipse.cdt.core/plugin.properties b/com.google.eclipse.cdt.core/plugin.properties
deleted file mode 100644
index 8fb84bf..0000000
--- a/com.google.eclipse.cdt.core/plugin.properties
+++ /dev/null
@@ -1,18 +0,0 @@
-###############################################################################
-# Copyright (c) 2003, 2011 IBM Corporation and others.
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-# IBM Corporation - initial API and implementation
-# Anton Leherbauer (Wind River Systems)
-###############################################################################
-pluginName=CDT's Pseudo-terminal Support
-providerName=Eclipse CDT
-
-fragmentName.linux = CDT's Pseudo-terminal Support for Linux
-fragmentName.linux.x86 = CDT's Pseudo-terminal Support for Linux (x86)
-fragmentName.linux.x86_64 = CDT's Pseudo-terminal Support for Linux (x86_64)
-fragmentName.macosx = CDT's Pseudo-terminal Support for MacOS X
diff --git a/com.google.eclipse.cdt.core/src/com/google/eclipse/cdt/core/CCorePlugin.java b/com.google.eclipse.cdt.core/src/com/google/eclipse/cdt/core/CCorePlugin.java
deleted file mode 100644
index a034126..0000000
--- a/com.google.eclipse.cdt.core/src/com/google/eclipse/cdt/core/CCorePlugin.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2011 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *******************************************************************************/
-package com.google.eclipse.cdt.core;
-
-import java.util.*;
-
-import org.eclipse.core.resources.*;
-import org.eclipse.core.runtime.*;
-
-import com.ibm.icu.text.MessageFormat;
-
-/**
- * Life-cycle owner of the core plug-in, and starting point for access to many core APIs.
- */
-public class CCorePlugin extends Plugin {
- public static final String PLUGIN_ID = "org.eclipse.cdt.core";
-
- private static CCorePlugin plugin;
- private static ResourceBundle resourceBundle;
-
- static {
- try {
- resourceBundle = ResourceBundle.getBundle("com.google.eclipse.cdt.internal.core.CCorePluginResources");
- } catch (MissingResourceException x) {
- resourceBundle = null;
- }
- }
-
- public CCorePlugin() {
- plugin = this;
- }
-
- public static String getResourceString(String key) {
- try {
- return resourceBundle.getString(key);
- } catch (MissingResourceException e) {
- return "!" + key + "!";
- } catch (NullPointerException e) {
- return "#" + key + "#";
- }
- }
-
- public static IWorkspace getWorkspace() {
- return ResourcesPlugin.getWorkspace();
- }
-
- public static String getFormattedString(String key, String arg) {
- return MessageFormat.format(getResourceString(key), new Object[] { arg });
- }
-
- public static String getFormattedString(String key, String[] args) {
- return MessageFormat.format(getResourceString(key), (Object[]) args);
- }
-
- public static ResourceBundle getResourceBundle() {
- return resourceBundle;
- }
-
- public static CCorePlugin getDefault() {
- return plugin;
- }
-
- public static void log(Throwable e) {
- String msg = e.getMessage();
- if (msg == null) {
- log("Error", e);
- } else {
- log("Error: " + msg, e);
- }
- }
-
- public static void log(String message, Throwable e) {
- log(createStatus(message, e));
- }
-
- public static IStatus createStatus(String message) {
- return createStatus(message, null);
- }
-
- public static IStatus createStatus(String message, Throwable exception) {
- return new Status(IStatus.ERROR, PLUGIN_ID, message, exception);
- }
-
- public static void log(IStatus status) {
- getDefault().getLog().log(status);
- }
-}
diff --git a/com.google.eclipse.cdt.core/src/com/google/eclipse/cdt/internal/core/CCorePluginResources.properties b/com.google.eclipse.cdt.core/src/com/google/eclipse/cdt/internal/core/CCorePluginResources.properties
deleted file mode 100644
index 62d2d05..0000000
--- a/com.google.eclipse.cdt.core/src/com/google/eclipse/cdt/internal/core/CCorePluginResources.properties
+++ /dev/null
@@ -1,11 +0,0 @@
-###############################################################################
-# Copyright (c) 2000, 2010, 2012 QNX Software Systems and others.
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-###############################################################################
-Util.exception.cannotCreatePty=Cannot create pty
-Util.exception.cannotSetTerminalSize=Setting terminal size is not supported
-Util.error.cannotRun=Cannot run program "{0}": {1}
-Util.exception.closeError=close error
\ No newline at end of file
diff --git a/com.google.eclipse.cdt.core/utils/com/google/eclipse/cdt/utils/Platform.java b/com.google.eclipse.cdt.core/utils/com/google/eclipse/cdt/utils/Platform.java
deleted file mode 100644
index 616e13b..0000000
--- a/com.google.eclipse.cdt.core/utils/com/google/eclipse/cdt/utils/Platform.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006, 2009 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *******************************************************************************/
-package com.google.eclipse.cdt.utils;
-
-import java.io.*;
-
-import org.osgi.framework.Bundle;
-
-import com.google.eclipse.cdt.core.CCorePlugin;
-
-public final class Platform {
- // This class duplicates all of the methods in org.eclipse.core.runtime.Platform
- // that are used by the CDT. getOSArch() needs a few tweaks because the value returned
- // by org.eclipse.core.runtime.Platform.getOSArch represents what the JVM thinks the
- // architecture is. In some cases, we may actually be running on a 64-bit machine,
- // but the JVM thinks it's running on a 32-bit machine. Without this change, the CDT
- // will not handle 64-bit executables on some ppc64. This method could easily be
- // extended to handle other platforms with similar issues.
- //
- // Unfortunately, the org.eclipse.core.runtime.Platform is final, so we cannot just
- // extend it and and then override the getOSArch method, so getBundle and getOS just
- // encapsulate calls to the same methods in org.eclipse.core.runtime.Platform.
-
- public static final String OS_LINUX = org.eclipse.core.runtime.Platform.OS_LINUX;
-
- private static String cachedArch = null;
-
- public static Bundle getBundle(String symbolicName) {
- return org.eclipse.core.runtime.Platform.getBundle(symbolicName);
- }
-
- public static String getOS() {
- return org.eclipse.core.runtime.Platform.getOS();
- }
-
- public static String getOSArch() {
- if (cachedArch == null) {
- String arch = org.eclipse.core.runtime.Platform.getOSArch();
- if (arch.equals(org.eclipse.core.runtime.Platform.ARCH_PPC)) {
- // Determine if the platform is actually a ppc64 machine
- Process unameProcess;
- String cmd[] = { "uname", "-p" };
- try {
- unameProcess = Runtime.getRuntime().exec(cmd);
- InputStreamReader inputStreamReader = new InputStreamReader(unameProcess.getInputStream());
- BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
- String unameOutput = bufferedReader.readLine();
- if (unameOutput != null) {
- arch = unameOutput;
- }
- bufferedReader.close();
- unameProcess.waitFor(); // otherwise the process becomes a zombie
- } catch (IOException e) {
- CCorePlugin.log(e);
- } catch (InterruptedException exc) {
- // restore interrupted flag
- Thread.currentThread().interrupt();
- }
- } else if (arch.equals(org.eclipse.core.runtime.Platform.ARCH_X86)) {
- // Determine if the platform is actually a x86_64 machine
- Process unameProcess;
- String cmd[];
- if (org.eclipse.core.runtime.Platform.OS_WIN32.equals(getOS())) {
- cmd = new String[] { "cmd", "/d", "/c", "set", "PROCESSOR_ARCHITECTURE" };
- } else {
- // We don't use "uname -p" since it returns "unknown" on some Linux systems.
- cmd = new String[] { "uname", "-m" };
- }
- try {
- unameProcess = Runtime.getRuntime().exec(cmd);
- unameProcess.getOutputStream().close();
- unameProcess.getErrorStream().close();
- InputStreamReader inputStreamReader = new InputStreamReader(unameProcess.getInputStream());
- BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
- String unameOutput = bufferedReader.readLine();
- if (unameOutput != null && unameOutput.endsWith("64")) {
- arch = org.eclipse.core.runtime.Platform.ARCH_X86_64;
- }
- bufferedReader.close();
- unameProcess.waitFor(); // otherwise the process becomes a zombie
- } catch (IOException e) {
- CCorePlugin.log(e);
- } catch (InterruptedException e) {
- // restore interrupted flag
- Thread.currentThread().interrupt();
- }
- }
- cachedArch = arch;
- }
- return cachedArch;
- }
-
- private Platform() {}
-}
diff --git a/com.google.eclipse.cdt.core/utils/com/google/eclipse/cdt/utils/Processes.java b/com.google.eclipse.cdt.core/utils/com/google/eclipse/cdt/utils/Processes.java
deleted file mode 100644
index 13c6f6f..0000000
--- a/com.google.eclipse.cdt.core/utils/com/google/eclipse/cdt/utils/Processes.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package com.google.eclipse.cdt.utils;
-
-import org.eclipse.cdt.utils.pty.PTY;
-import org.eclipse.cdt.utils.spawner.ProcessFactory;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-
-/**
- * Utility methods related to processes.
- */
-public final class Processes {
- /**
- * Starts a new process.
- * @param command the command to execute.
- * @param environment the environment variables.
- * @param workingDirectory the working directory.
- * @return the new process.
- * @throws IOException if something went wrong.
- */
- public static Process executeInPty(
- String[] command, Map<String, String> environment, File workingDirectory) throws IOException {
- PTY pty = new PTY(true);
- ProcessFactory processFactory = ProcessFactory.getFactory();
- return processFactory.exec(command, toArray(environment), workingDirectory, pty);
- }
-
- private static String[] toArray(Map<String, String> environmentMap) {
- List<String> environment = new ArrayList<String>();
- for (Entry<String, String> entry : environmentMap.entrySet()) {
- environment.add(entry.getKey() + "=" + entry.getValue());
- }
- return environment.toArray(new String[environment.size()]);
- }
-
- private Processes() {}
-}
diff --git a/com.google.eclipse.cdt.core/utils/com/google/eclipse/cdt/utils/spawner/EnvironmentReader.java b/com.google.eclipse.cdt.core/utils/com/google/eclipse/cdt/utils/spawner/EnvironmentReader.java
deleted file mode 100644
index 2f7f390..0000000
--- a/com.google.eclipse.cdt.core/utils/com/google/eclipse/cdt/utils/spawner/EnvironmentReader.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2010 QNX Software Systems and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *******************************************************************************/
-package com.google.eclipse.cdt.utils.spawner;
-
-import java.util.*;
-
-import org.eclipse.core.runtime.Platform;
-
-/**
- * This class provides environment variables supplied as {@link Properties} class.
- */
-public final class EnvironmentReader {
- private static Properties envVars = null;
- private static Properties envVarsNormalized = null;
- private static ArrayList<String> rawVars = null;
-
- private static synchronized void init() {
- if (envVars == null) {
- envVars = new Properties();
- // on Windows environment variable names are case-insensitive
- if (Platform.getOS().equals(Platform.OS_WIN32)) {
- envVarsNormalized = new Properties();
- } else {
- envVarsNormalized = envVars;
- }
- rawVars = new ArrayList<String>();
- Map<String, String> envMap = System.getenv();
- for (String var : envMap.keySet()) {
- String value = envMap.get(var);
- envVars.setProperty(var, value);
- if (envVarsNormalized != envVars) {
- envVarsNormalized.setProperty(var.toUpperCase(), value);
- }
- rawVars.add(var + "=" + value);
- }
- rawVars.trimToSize();
- }
- }
-
- public static Properties getEnvVars() {
- init();
- return (Properties) envVars.clone();
- }
-
- public static String getEnvVar(String key) {
- init();
- return envVarsNormalized.getProperty(key);
- }
-
- private EnvironmentReader() {}
-}
diff --git a/com.google.eclipse.cdt.core/utils/org/eclipse/cdt/utils/pty/PTY.java b/com.google.eclipse.cdt.core/utils/org/eclipse/cdt/utils/pty/PTY.java
deleted file mode 100644
index 498c16c..0000000
--- a/com.google.eclipse.cdt.core/utils/org/eclipse/cdt/utils/pty/PTY.java
+++ /dev/null
@@ -1,147 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2002, 2010 QNX Software Systems and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *******************************************************************************/
-package org.eclipse.cdt.utils.pty;
-
-import java.io.IOException;
-
-import com.google.eclipse.cdt.core.CCorePlugin;
-
-/**
- * PTY - pseudo terminal support.
- */
-public class PTY {
- static final String LIBRARY_NAME = "gpty";
-
- final boolean console;
- String slave;
- PTYInputStream in;
- PTYOutputStream out;
- /*
- * NOTE: Field is accessed by the native layer. Do not refactor!
- */
- int master;
-
- private static boolean hasPTY;
- private static boolean setTerminalSizeErrorAlreadyLogged;
-
- /**
- * The master fd is used on two streams. We need to wrap the fd so that when stream.close() is called the other stream
- * is disabled.
- */
- public class MasterFD {
- public int getFD() {
- return master;
- }
-
- void setFD(int fd) {
- master = fd;
- }
- }
-
- /**
- * Create PTY for use with Eclipse console. Identical to {@link PTY#PTY(boolean) PTY(true)}.
- * @throws IOException if something goes wrong.
- */
- public PTY() throws IOException {
- this(true);
- }
-
- /**
- * Create pseudo-terminal.
- *
- * <p>
- * The provided flag indicates whether the pseudo terminal is used with the interactive Eclipse console:
- * <ul>
- * <li>If {@code true} the terminal is configured with no echo and stderr is redirected to a pipe instead of the
- * PTY.</li>
- * <li>If {@code false} the terminal is configured with echo and stderr is connected to the PTY. This mode is
- * best suited for use with a proper terminal emulation. Note that this mode might not be supported on all platforms.
- * Known platforms which support this mode are: <code>linux-x86</code>, <code>linux-x86_64</code>,
- * <code>solaris-sparc</code>, <code>macosx</code>.</li>
- * </ul>
- * </p>
- *
- * @param console whether terminal is used with Eclipse console
- * @throws IOException if the PTY could not be created
- * @since 5.2
- */
- public PTY(boolean console) throws IOException {
- this.console = console;
-
- if (hasPTY) {
- slave = openMaster(console);
- }
-
- if (slave == null) {
- throw new IOException(CCorePlugin.getResourceString("Util.exception.cannotCreatePty"));
- }
-
- in = new PTYInputStream(new MasterFD());
- out = new PTYOutputStream(new MasterFD());
- }
-
- public String getSlaveName() {
- return slave;
- }
-
- public MasterFD getMasterFD() {
- return new MasterFD();
- }
-
- /**
- * @return whether this pseudo terminal is for use with the Eclipse console.
- */
- public final boolean isConsole() {
- return console;
- }
-
- public PTYOutputStream getOutputStream() {
- return out;
- }
-
- public PTYInputStream getInputStream() {
- return in;
- }
-
- /**
- * Change terminal window size to given width and height.
- * <p>
- * This should only be used when the pseudo terminal is configured for use with a terminal emulation, i.e. when
- * {@link #isConsole()} returns {@code false}.
- * </p>
- * <p>
- * <strong>Note:</strong> This method may not be supported on all platforms. Known platforms which support this method
- * are: {@code linux-x86}, {@code linux-x86_64}, {@code solaris-sparc}, {@code macosx}.
- * </p>
- * @param width the given width.
- * @param height the given height.
- */
- public final void setTerminalSize(int width, int height) {
- try {
- change_window_size(master, width, height);
- } catch (UnsatisfiedLinkError e) {
- if (!setTerminalSizeErrorAlreadyLogged) {
- setTerminalSizeErrorAlreadyLogged = true;
- CCorePlugin.log(CCorePlugin.getResourceString("Util.exception.cannotSetTerminalSize"), e);
- }
- }
- }
-
- public static boolean isSupported() {
- return hasPTY;
- }
-
- native String openMaster(boolean console);
-
- native int change_window_size(int fdm, int width, int height);
-
- static {
- System.loadLibrary(LIBRARY_NAME);
- hasPTY = true;
- }
-}
diff --git a/com.google.eclipse.cdt.core/utils/org/eclipse/cdt/utils/pty/PTYInputStream.java b/com.google.eclipse.cdt.core/utils/org/eclipse/cdt/utils/pty/PTYInputStream.java
deleted file mode 100644
index a2f1a1e..0000000
--- a/com.google.eclipse.cdt.core/utils/org/eclipse/cdt/utils/pty/PTYInputStream.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2011 QNX Software Systems and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *******************************************************************************/
-package org.eclipse.cdt.utils.pty;
-
-import java.io.*;
-
-import org.eclipse.cdt.utils.pty.PTY.MasterFD;
-
-class PTYInputStream extends InputStream {
- MasterFD master;
-
- /**
- * From a Unix valid file descriptor set a Reader.
- * @param fd file descriptor.
- */
- public PTYInputStream(MasterFD fd) {
- master = fd;
- }
-
- /**
- * Implementation of read for the InputStream.
- *
- * @exception IOException on error.
- */
- @Override public int read() throws IOException {
- byte b[] = new byte[1];
- if (1 != read(b, 0, 1)) {
- return -1;
- }
- return b[0];
- }
-
- @Override public int read(byte[] buf, int off, int len) throws IOException {
- if (buf == null) {
- throw new NullPointerException();
- }
- if ((off < 0) || (off > buf.length) || (len < 0) || ((off + len) > buf.length) || ((off + len) < 0)) {
- throw new IndexOutOfBoundsException();
- }
- if (len == 0) {
- return 0;
- }
- byte[] tmpBuf = new byte[len];
- len = read0(master.getFD(), tmpBuf, len);
- if (len <= 0) {
- return -1;
- }
- System.arraycopy(tmpBuf, 0, buf, off, len);
- return len;
- }
-
- @Override public void close() throws IOException {
- if (master.getFD() == -1) {
- return;
- }
- close0(master.getFD());
- master.setFD(-1);
- }
-
- @Override protected void finalize() throws IOException {
- close();
- }
-
- private native int read0(int fd, byte[] buf, int len) throws IOException;
-
- private native int close0(int fd) throws IOException;
-
- static {
- System.loadLibrary(PTY.LIBRARY_NAME);
- }
-}
diff --git a/com.google.eclipse.cdt.core/utils/org/eclipse/cdt/utils/pty/PTYOutputStream.java b/com.google.eclipse.cdt.core/utils/org/eclipse/cdt/utils/pty/PTYOutputStream.java
deleted file mode 100644
index 265fd26..0000000
--- a/com.google.eclipse.cdt.core/utils/org/eclipse/cdt/utils/pty/PTYOutputStream.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2011 QNX Software Systems and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *******************************************************************************/
-package org.eclipse.cdt.utils.pty;
-
-import java.io.*;
-
-import org.eclipse.cdt.utils.pty.PTY.MasterFD;
-
-public class PTYOutputStream extends OutputStream {
- MasterFD master;
-
- /**
- * From a Unix valid file descriptor set a Reader.
- * @param fd file descriptor.
- */
- public PTYOutputStream(MasterFD fd) {
- master = fd;
- }
-
- @Override public void write(byte[] b, int off, int len) throws IOException {
- if (b == null) {
- throw new NullPointerException();
- } else if ((off < 0) || (off > b.length) || (len < 0) || ((off + len) > b.length) || ((off + len) < 0)) {
- throw new IndexOutOfBoundsException();
- } else if (len == 0) {
- return;
- }
- byte[] tmpBuf = new byte[len];
- System.arraycopy(b, off, tmpBuf, off, len);
- write0(master.getFD(), tmpBuf, len);
- }
-
- @Override public void write(int b) throws IOException {
- byte[] buf = new byte[1];
- buf[0] = (byte) b;
- write(buf, 0, 1);
- }
-
- @Override public void close() throws IOException {
- if (master.getFD() == -1) {
- return;
- }
- int status = close0(master.getFD());
- if (status == -1) {
- throw new IOException("Close error");
- }
- master.setFD(-1);
- }
-
- @Override protected void finalize() throws IOException {
- close();
- }
-
- private native int write0(int fd, byte[] b, int len) throws IOException;
-
- private native int close0(int fd) throws IOException;
-
- static {
- System.loadLibrary(PTY.LIBRARY_NAME);
- }
-}
diff --git a/com.google.eclipse.cdt.core/utils/org/eclipse/cdt/utils/spawner/ProcessFactory.java b/com.google.eclipse.cdt.core/utils/org/eclipse/cdt/utils/spawner/ProcessFactory.java
deleted file mode 100644
index a0319d4..0000000
--- a/com.google.eclipse.cdt.core/utils/org/eclipse/cdt/utils/spawner/ProcessFactory.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2009 QNX Software Systems and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *******************************************************************************/
-package org.eclipse.cdt.utils.spawner;
-
-import java.io.*;
-
-import org.eclipse.cdt.utils.pty.PTY;
-
-import com.google.eclipse.cdt.core.CCorePlugin;
-
-public class ProcessFactory {
- static private ProcessFactory instance;
-
- private boolean hasSpawner;
- private final Runtime runtime;
-
- private ProcessFactory() {
- hasSpawner = false;
- String OS = System.getProperty("os.name").toLowerCase();
- runtime = Runtime.getRuntime();
- // Spawner does not work for Windows 98 fallback
- if (OS != null && OS.equals("windows 98")) {
- hasSpawner = false;
- } else {
- System.loadLibrary(Spawner.LIBRARY_NAME);
- hasSpawner = true;
- }
- }
-
- public static ProcessFactory getFactory() {
- if (instance == null) {
- instance = new ProcessFactory();
- }
- return instance;
- }
-
- public Process exec(String cmd) throws IOException {
- if (hasSpawner) {
- return new Spawner(cmd);
- }
- return runtime.exec(cmd);
- }
-
- public Process exec(String[] cmdarray) throws IOException {
- if (hasSpawner) {
- return new Spawner(cmdarray);
- }
- return runtime.exec(cmdarray);
- }
-
- public Process exec(String[] cmdarray, String[] envp) throws IOException {
- if (hasSpawner) {
- return new Spawner(cmdarray, envp);
- }
- return runtime.exec(cmdarray, envp);
- }
-
- public Process exec(String cmd, String[] envp) throws IOException {
- if (hasSpawner) {
- return new Spawner(cmd, envp);
- }
- return runtime.exec(cmd, envp);
- }
-
- public Process exec(String cmd, String[] envp, File dir) throws IOException {
- if (hasSpawner) {
- return new Spawner(cmd, envp, dir);
- }
- return runtime.exec(cmd, envp, dir);
- }
-
- public Process exec(String cmdarray[], String[] envp, File dir) throws IOException {
- if (hasSpawner) {
- return new Spawner(cmdarray, envp, dir);
- }
- return runtime.exec(cmdarray, envp, dir);
- }
-
- public Process exec(String cmdarray[], String[] envp, File dir, PTY pty) throws IOException {
- if (hasSpawner) {
- return new Spawner(cmdarray, envp, dir, pty);
- }
- throw new UnsupportedOperationException(CCorePlugin.getResourceString("Util.exception.cannotCreatePty"));
- }
-}
diff --git a/com.google.eclipse.cdt.core/utils/org/eclipse/cdt/utils/spawner/Spawner.java b/com.google.eclipse.cdt.core/utils/org/eclipse/cdt/utils/spawner/Spawner.java
deleted file mode 100644
index 4e2024e..0000000
--- a/com.google.eclipse.cdt.core/utils/org/eclipse/cdt/utils/spawner/Spawner.java
+++ /dev/null
@@ -1,438 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2011 QNX Software Systems and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *******************************************************************************/
-package org.eclipse.cdt.utils.spawner;
-
-import java.io.*;
-import java.util.StringTokenizer;
-
-import org.eclipse.cdt.utils.pty.PTY;
-import org.eclipse.core.runtime.Platform;
-import org.eclipse.osgi.util.NLS;
-
-import com.google.eclipse.cdt.core.CCorePlugin;
-
-public class Spawner extends Process {
- static final String LIBRARY_NAME = "gspawner";
-
- public int NOOP = 0;
- public int HUP = 1;
- public int KILL = 9;
- public int TERM = 15;
-
- /**
- * On Windows, what this does is far from easy to explain. Some of the logic is in the JNI code, some in the
- * spawner.exe code.
- *
- * <ul>
- * <li>If the process this is being raised against was launched by us (the Spawner)
- * <ul>
- * <li>If the process is a cygwin program (has the cygwin1.dll loaded), then issue a 'kill -SIGINT'. If the 'kill'
- * utility isn't available, send the process a CTRL-C
- * <li>If the process is <i>not</i> a cygwin program, send the process a CTRL-C
- * </ul>
- * <li>If the process this is being raised against was <i>not</i> launched by us, use DebugBreakProcess to interrupt
- * it (sending a CTRL-C is easy only if we share a console with the target process)
- * </ul>
- *
- * On non-Windows, raising this just raises a POSIX SIGINT
- *
- */
- public int INT = 2;
-
- /**
- * A fabricated signal number for use on Windows only. Tells the starter program to send a CTRL-C regardless of
- * whether the process is a Cygwin one or not.
- *
- * @since 5.2
- */
- public int CTRLC = 1000; // arbitrary high number to avoid collision
-
- int pid = 0;
- int status;
- final int[] fChannels = new int[3];
- boolean isDone;
- OutputStream out;
- InputStream in;
- InputStream err;
- private PTY fPty;
-
- public Spawner(String command, boolean bNoRedirect) throws IOException {
- StringTokenizer tokenizer = new StringTokenizer(command);
- String[] cmdarray = new String[tokenizer.countTokens()];
- for (int n = 0; tokenizer.hasMoreTokens(); n++) {
- cmdarray[n] = tokenizer.nextToken();
- }
- if (bNoRedirect) {
- exec_detached(cmdarray, new String[0], ".");
- } else {
- exec(cmdarray, new String[0], ".");
- }
- }
-
- protected Spawner(String[] command, String[] environment, File workingDirectory) throws IOException {
- String dirpath = ".";
- if (workingDirectory != null) {
- dirpath = workingDirectory.getAbsolutePath();
- }
- exec(command, environment, dirpath);
- }
-
- protected Spawner(String[] cmdarray, String[] envp, File dir, PTY pty) throws IOException {
- String dirpath = ".";
- if (dir != null) {
- dirpath = dir.getAbsolutePath();
- }
- fPty = pty;
- exec_pty(cmdarray, envp, dirpath, pty);
- }
-
- protected Spawner(String command) throws IOException {
- this(command, null);
- }
-
- protected Spawner(String[] command) throws IOException {
- this(command, null);
- }
-
- protected Spawner(String[] command, String[] environment) throws IOException {
- this(command, environment, null);
- }
-
- protected Spawner(String command, String[] environment) throws IOException {
- this(command, environment, null);
- }
-
- protected Spawner(String command, String[] environment, File workingDirectory) throws IOException {
- StringTokenizer tokenizer = new StringTokenizer(command);
- String[] cmdarray = new String[tokenizer.countTokens()];
- for (int n = 0; tokenizer.hasMoreTokens(); n++) {
- cmdarray[n] = tokenizer.nextToken();
- }
- String dirpath = ".";
- if (workingDirectory != null) {
- dirpath = workingDirectory.getAbsolutePath();
- }
- exec(cmdarray, environment, dirpath);
- }
-
- @Override protected void finalize() throws Throwable {
- closeUnusedStreams();
- }
-
- /**
- * See java.lang.Process#getInputStream (); The client is responsible for closing the stream explicitly.
- **/
- @Override public synchronized InputStream getInputStream() {
- if (null == in) {
- if (fPty != null) {
- in = fPty.getInputStream();
- } else {
- in = new SpawnerInputStream(fChannels[1]);
- }
- }
- return in;
- }
-
- /**
- * See java.lang.Process#getOutputStream (); The client is responsible for closing the stream explicitly.
- **/
- @Override public synchronized OutputStream getOutputStream() {
- if (null == out) {
- if (fPty != null) {
- out = fPty.getOutputStream();
- } else {
- out = new SpawnerOutputStream(fChannels[0]);
- }
- }
- return out;
- }
-
- /**
- * See java.lang.Process#getErrorStream (); The client is responsible for closing the stream explicitly.
- **/
- @Override public synchronized InputStream getErrorStream() {
- if (null == err) {
- if (fPty != null && !fPty.isConsole()) {
- // If PTY is used and it's not in "Console" mode, then stderr is
- // redirected to the PTY's output stream. Therefore, return a
- // dummy stream for error stream.
- err = new InputStream() {
- @Override public int read() throws IOException {
- return -1;
- }
- };
- } else {
- err = new SpawnerInputStream(fChannels[2]);
- }
- }
- return err;
- }
-
- /**
- * See java.lang.Process#waitFor ();
- **/
- @Override public synchronized int waitFor() throws InterruptedException {
- while (!isDone) {
- wait();
- }
-
- // For situations where the user does not call destroy(),
- // we try to kill the streams that were not used here.
- // We check for streams that were not created, we create
- // them to attach to the pipes, and then we close them
- // to release the pipes.
- // Streams that were created by the client need to be
- // closed by the client itself.
- //
- // But 345164
- closeUnusedStreams();
- return status;
- }
-
- /**
- * See java.lang.Process#exitValue ();
- **/
- @Override public synchronized int exitValue() {
- if (!isDone) {
- throw new IllegalThreadStateException("Process not Terminated");
- }
- return status;
- }
-
- /**
- * See java.lang.Process#destroy ();
- *
- * Clients are responsible for explicitly closing any streams that they have requested through getErrorStream(),
- * getInputStream() or getOutputStream()
- **/
- @Override public synchronized void destroy() {
- // Sends the TERM
- terminate();
-
- // Close the streams on this side.
- //
- // We only close the streams that were
- // never used by any client.
- // So, if the stream was not created yet,
- // we create it ourselves and close it
- // right away, so as to release the pipe.
- // Note that even if the stream was never
- // created, the pipe has been allocated in
- // native code, so we need to create the
- // stream and explicitly close it.
- //
- // We don't close streams the clients have
- // created because we don't know when the
- // client will be finished using them.
- // It is up to the client to close those
- // streams.
- //
- // But 345164
- closeUnusedStreams();
-
- // Grace before using the heavy gone.
- if (!isDone) {
- try {
- wait(1000);
- } catch (InterruptedException e) {
- }
- }
- if (!isDone) {
- kill();
- }
- }
-
- public int interrupt() {
- return raise(pid, INT);
- }
-
- public int interruptCTRLC() {
- if (Platform.getOS().equals(Platform.OS_WIN32)) {
- return raise(pid, CTRLC);
- }
- return interrupt();
- }
-
- public int hangup() {
- return raise(pid, HUP);
- }
-
- public int kill() {
- return raise(pid, KILL);
- }
-
- public int terminate() {
- return raise(pid, TERM);
- }
-
- public boolean isRunning() {
- return (raise(pid, NOOP) == 0);
- }
-
- private void exec(String[] cmdarray, String[] envp, String dirpath) throws IOException {
- String command = cmdarray[0];
- SecurityManager s = System.getSecurityManager();
- if (s != null) {
- s.checkExec(command);
- }
- if (envp == null) {
- envp = new String[0];
- }
- Reaper reaper = new Reaper(cmdarray, envp, dirpath);
- reaper.setDaemon(true);
- reaper.start();
- // Wait until the subprocess is started or error.
- synchronized (this) {
- while (pid == 0) {
- try {
- wait();
- } catch (InterruptedException e) {
- Thread.currentThread().interrupt();
- }
- }
- }
- // Check for errors.
- if (pid == -1) {
- throw new IOException(reaper.getErrorMessage());
- }
- }
-
- private void exec_pty(String[] command, String[] environment, String workingDirectory, PTY pty) throws IOException {
- String cmd = command[0];
- SecurityManager s = System.getSecurityManager();
- if (s != null) {
- s.checkExec(cmd);
- }
- if (environment == null) {
- environment = new String[0];
- }
- final String slaveName = pty.getSlaveName();
- final int masterFD = pty.getMasterFD().getFD();
- final boolean console = pty.isConsole();
- // int fdm = pty.get
- Reaper reaper = new Reaper(command, environment, workingDirectory) {
- @Override int execute(String[] cmd, String[] env, String dir, int[] channels) throws IOException {
- return exec2(cmd, env, dir, channels, slaveName, masterFD, console);
- }
- };
- reaper.setDaemon(true);
- reaper.start();
- // Wait until the subprocess is started or error.
- synchronized (this) {
- while (pid == 0) {
- try {
- wait();
- } catch (InterruptedException e) {
- Thread.currentThread().interrupt();
- }
- }
- }
- if (pid == -1) {
- throw new IOException("Exec_tty error:" + reaper.getErrorMessage());
- }
- }
-
- public void exec_detached(String[] cmdarray, String[] envp, String dirpath) throws IOException {
- String command = cmdarray[0];
- SecurityManager s = System.getSecurityManager();
- if (s != null) {
- s.checkExec(command);
- }
- if (envp == null) {
- envp = new String[0];
- }
- pid = exec1(cmdarray, envp, dirpath);
- if (pid == -1) {
- throw new IOException("Exec error");
- }
- fChannels[0] = -1;
- fChannels[1] = -1;
- fChannels[2] = -1;
- }
-
- private synchronized void closeUnusedStreams() {
- try {
- if (null == err) {
- getErrorStream().close();
- }
- } catch (IOException e) {}
- try {
- if (null == in) {
- getInputStream().close();
- }
- } catch (IOException e) {}
- try {
- if (null == out) {
- getOutputStream().close();
- }
- } catch (IOException e) {}
- }
-
- native int exec0(String[] cmdarray, String[] envp, String dir, int[] chan) throws IOException;
-
- native int exec1(String[] cmdarray, String[] envp, String dir) throws IOException;
-
- native int exec2(String[] cmdarray, String[] envp, String dir, int[] chan, String slaveName, int masterFD,
- boolean console) throws IOException;
-
- public native int raise(int processID, int sig);
-
- native int waitFor(int processID);
-
- static {
- System.loadLibrary(LIBRARY_NAME);
- }
-
- // Spawn a thread to handle the forking and waiting.
- // We do it this way because on linux the SIGCHLD is send to the one thread. So do the forking and then wait in the
- // same thread.
- class Reaper extends Thread {
- String[] command;
- String[] environment;
- String dirPath;
- volatile Throwable exception;
-
- public Reaper(String[] command, String[] environment, String dirPath) {
- super("Spawner Reaper");
- this.command = command;
- this.environment = environment;
- this.dirPath = dirPath;
- exception = null;
- }
-
- int execute(String[] cmdarray, String[] envp, String dir, int[] channels) throws IOException {
- return exec0(cmdarray, envp, dir, channels);
- }
-
- @Override public void run() {
- try {
- pid = execute(command, environment, dirPath, fChannels);
- } catch (Exception e) {
- pid = -1;
- exception = e;
- }
- // Tell spawner that the process started.
- synchronized (Spawner.this) {
- Spawner.this.notifyAll();
- }
- if (pid != -1) {
- // Sync with spawner and notify when done.
- status = waitFor(pid);
- synchronized (Spawner.this) {
- isDone = true;
- Spawner.this.notifyAll();
- }
- }
- }
-
- public String getErrorMessage() {
- final String reason = exception != null ? exception.getMessage() : "Unknown reason";
- return NLS.bind(CCorePlugin.getResourceString("Util.error.cannotRun"), command[0], reason);
- }
- }
-}
diff --git a/com.google.eclipse.cdt.core/utils/org/eclipse/cdt/utils/spawner/SpawnerInputStream.java b/com.google.eclipse.cdt.core/utils/org/eclipse/cdt/utils/spawner/SpawnerInputStream.java
deleted file mode 100644
index dd1e16e..0000000
--- a/com.google.eclipse.cdt.core/utils/org/eclipse/cdt/utils/spawner/SpawnerInputStream.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2011 QNX Software Systems and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *******************************************************************************/
-package org.eclipse.cdt.utils.spawner;
-
-import java.io.*;
-
-import com.google.eclipse.cdt.core.CCorePlugin;
-
-class SpawnerInputStream extends InputStream {
- private int fd;
-
- /**
- * From a Unix valid file descriptor set a Reader.
- * @param fd file descriptor.
- */
- public SpawnerInputStream(int fd) {
- this.fd = fd;
- }
-
- @Override public int read() throws IOException {
- byte b[] = new byte[1];
- if (1 != read(b, 0, 1)) {
- return -1;
- }
- return b[0];
- }
-
- @Override public int read(byte[] buf, int off, int len) throws IOException {
- if (buf == null) {
- throw new NullPointerException();
- } else if ((off < 0) || (off > buf.length) || (len < 0) || ((off + len) > buf.length) || ((off + len) < 0)) {
- throw new IndexOutOfBoundsException();
- } else if (len == 0) {
- return 0;
- }
- byte[] tmpBuf = off > 0 ? new byte[len] : buf;
-
- len = read0(fd, tmpBuf, len);
- if (len <= 0) {
- return -1;
- }
-
- if (tmpBuf != buf) {
- System.arraycopy(tmpBuf, 0, buf, off, len);
- }
- return len;
- }
-
- @Override public void close() throws IOException {
- if (fd == -1) {
- return;
- }
- int status = close0(fd);
- if (status == -1) {
- throw new IOException(CCorePlugin.getResourceString("Util.exception.closeError"));
- }
- fd = -1;
- }
-
- @Override public int available() throws IOException {
- try {
- return available0(fd);
- } catch (UnsatisfiedLinkError e) {
- // for those platforms that do not implement available0
- return super.available();
- }
- }
-
- @Override protected void finalize() throws IOException {
- close();
- }
-
- private native int read0(int fileDesc, byte[] buf, int len) throws IOException;
-
- private native int close0(int fileDesc) throws IOException;
-
- private native int available0(int fileDesc) throws IOException;
-
- static {
- System.loadLibrary(Spawner.LIBRARY_NAME);
- }
-}
diff --git a/com.google.eclipse.cdt.core/utils/org/eclipse/cdt/utils/spawner/SpawnerOutputStream.java b/com.google.eclipse.cdt.core/utils/org/eclipse/cdt/utils/spawner/SpawnerOutputStream.java
deleted file mode 100644
index 7ecc61e..0000000
--- a/com.google.eclipse.cdt.core/utils/org/eclipse/cdt/utils/spawner/SpawnerOutputStream.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2011 QNX Software Systems and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *******************************************************************************/
-package org.eclipse.cdt.utils.spawner;
-
-import java.io.*;
-
-public class SpawnerOutputStream extends OutputStream {
- private int fd;
-
- /**
- * From a Unix valid file descriptor set a Reader.
- * @param fd file descriptor.
- */
- public SpawnerOutputStream(int fd) {
- this.fd = fd;
- }
-
- @Override public void write(byte[] b, int off, int len) throws IOException {
- if (b == null) {
- throw new NullPointerException();
- }
- if ((off < 0) || (off > b.length) || (len < 0) || ((off + len) > b.length) || ((off + len) < 0)) {
- throw new IndexOutOfBoundsException();
- }
- if (len == 0) {
- return;
- }
- byte[] tmpBuf = new byte[len];
- System.arraycopy(b, off, tmpBuf, off, len);
- write0(fd, tmpBuf, len);
- }
-
- @Override public void write(int b) throws IOException {
- byte[] buf = new byte[1];
- buf[0] = (byte) b;
- write(buf, 0, 1);
- }
-
- @Override public void close() throws IOException {
- if (fd == -1) {
- return;
- }
- int status = close0(fd);
- if (status == -1) {
- throw new IOException("close error");
- }
- fd = -1;
- }
-
- @Override protected void finalize() throws IOException {
- close();
- }
-
- private native int write0(int fd, byte[] b, int len) throws IOException;
-
- private native int close0(int fd);
-
- static {
- System.loadLibrary(Spawner.LIBRARY_NAME);
- }
-}
diff --git a/com.google.eclipse.terminal.local.feature/.project b/com.google.eclipse.terminal.local.feature/.project
deleted file mode 100644
index 546fa84..0000000
--- a/com.google.eclipse.terminal.local.feature/.project
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
- <name>com.google.eclipse.terminal.local.feature</name>
- <comment></comment>
- <projects>
- </projects>
- <buildSpec>
- <buildCommand>
- <name>org.eclipse.pde.FeatureBuilder</name>
- <arguments>
- </arguments>
- </buildCommand>
- </buildSpec>
- <natures>
- <nature>org.eclipse.pde.FeatureNature</nature>
- </natures>
-</projectDescription>
diff --git a/com.google.eclipse.terminal.local.feature/build.properties b/com.google.eclipse.terminal.local.feature/build.properties
deleted file mode 100644
index b73855a..0000000
--- a/com.google.eclipse.terminal.local.feature/build.properties
+++ /dev/null
@@ -1,7 +0,0 @@
-bin.includes = feature.xml,\
- epl-v10.html,\
- feature.properties
-src.includes = feature.xml,\
- feature.properties,\
- build.properties,\
- epl-v10.html
diff --git a/com.google.eclipse.terminal.local.feature/epl-v10.html b/com.google.eclipse.terminal.local.feature/epl-v10.html
deleted file mode 100644
index 5443e16..0000000
--- a/com.google.eclipse.terminal.local.feature/epl-v10.html
+++ /dev/null
@@ -1,324 +0,0 @@
-
-<!-- saved from url=(0088)https://workspacemechanic.eclipselabs.org.codespot.com/hg/features/mechanic/epl-v10.html -->
-<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-
-<meta name="ProgId" content="Word.Document">
-<meta name="Generator" content="Microsoft Word 9">
-<meta name="Originator" content="Microsoft Word 9">
-<link rel="File-List" href="https://workspacemechanic.eclipselabs.org.codespot.com/hg/features/mechanic/Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
-<title>Eclipse Public License - Version 1.0</title>
-<!--[if gte mso 9]><xml>
- <o:DocumentProperties>
- <o:Revision>2</o:Revision>
- <o:TotalTime>3</o:TotalTime>
- <o:Created>2004-03-05T23:03:00Z</o:Created>
- <o:LastSaved>2004-03-05T23:03:00Z</o:LastSaved>
- <o:Pages>4</o:Pages>
- <o:Words>1626</o:Words>
- <o:Characters>9270</o:Characters>
- <o:Lines>77</o:Lines>
- <o:Paragraphs>18</o:Paragraphs>
- <o:CharactersWithSpaces>11384</o:CharactersWithSpaces>
- <o:Version>9.4402</o:Version>
- </o:DocumentProperties>
-</xml><![endif]--><!--[if gte mso 9]><xml>
- <w:WordDocument>
- <w:TrackRevisions/>
- </w:WordDocument>
-</xml><![endif]-->
-<style>
-<!--
- /* Font Definitions */
-@font-face
- {font-family:Tahoma;
- panose-1:2 11 6 4 3 5 4 4 2 4;
- mso-font-charset:0;
- mso-generic-font-family:swiss;
- mso-font-pitch:variable;
- mso-font-signature:553679495 -2147483648 8 0 66047 0;}
- /* Style Definitions */
-p.MsoNormal, li.MsoNormal, div.MsoNormal
- {mso-style-parent:"";
- margin:0in;
- margin-bottom:.0001pt;
- mso-pagination:widow-orphan;
- font-size:12.0pt;
- font-family:"Times New Roman";
- mso-fareast-font-family:"Times New Roman";}
-p
- {margin-right:0in;
- mso-margin-top-alt:auto;
- mso-margin-bottom-alt:auto;
- margin-left:0in;
- mso-pagination:widow-orphan;
- font-size:12.0pt;
- font-family:"Times New Roman";
- mso-fareast-font-family:"Times New Roman";}
-p.BalloonText, li.BalloonText, div.BalloonText
- {mso-style-name:"Balloon Text";
- margin:0in;
- margin-bottom:.0001pt;
- mso-pagination:widow-orphan;
- font-size:8.0pt;
- font-family:Tahoma;
- mso-fareast-font-family:"Times New Roman";}
-@page Section1
- {size:8.5in 11.0in;
- margin:1.0in 1.25in 1.0in 1.25in;
- mso-header-margin:.5in;
- mso-footer-margin:.5in;
- mso-paper-source:0;}
-div.Section1
- {page:Section1;}
--->
-</style>
-</head>
-
-<body lang="EN-US" style="tab-interval:.5in">
-
-<div class="Section1">
-
-<p align="center" style="text-align:center"><b>Eclipse Public License - v 1.0</b>
-</p>
-
-<p><span style="font-size:10.0pt">THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
-THE TERMS OF THIS ECLIPSE PUBLIC LICENSE ("AGREEMENT"). ANY USE,
-REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
-OF THIS AGREEMENT.</span> </p>
-
-<p><b><span style="font-size:10.0pt">1. DEFINITIONS</span></b> </p>
-
-<p><span style="font-size:10.0pt">"Contribution" means:</span> </p>
-
-<p class="MsoNormal" style="margin-left:.5in"><span style="font-size:10.0pt">a)
-in the case of the initial Contributor, the initial code and documentation
-distributed under this Agreement, and<br clear="left">
-b) in the case of each subsequent Contributor:</span></p>
-
-<p class="MsoNormal" style="margin-left:.5in"><span style="font-size:10.0pt">i)
-changes to the Program, and</span></p>
-
-<p class="MsoNormal" style="margin-left:.5in"><span style="font-size:10.0pt">ii)
-additions to the Program;</span></p>
-
-<p class="MsoNormal" style="margin-left:.5in"><span style="font-size:10.0pt">where
-such changes and/or additions to the Program originate from and are distributed
-by that particular Contributor. A Contribution 'originates' from a Contributor
-if it was added to the Program by such Contributor itself or anyone acting on
-such Contributor's behalf. Contributions do not include additions to the
-Program which: (i) are separate modules of software distributed in conjunction
-with the Program under their own license agreement, and (ii) are not derivative
-works of the Program. </span></p>
-
-<p><span style="font-size:10.0pt">"Contributor" means any person or
-entity that distributes the Program.</span> </p>
-
-<p><span style="font-size:10.0pt">"Licensed Patents " mean patent
-claims licensable by a Contributor which are necessarily infringed by the use
-or sale of its Contribution alone or when combined with the Program. </span></p>
-
-<p><span style="font-size:10.0pt">"Program" means the Contributions
-distributed in accordance with this Agreement.</span> </p>
-
-<p><span style="font-size:10.0pt">"Recipient" means anyone who
-receives the Program under this Agreement, including all Contributors.</span> </p>
-
-<p><b><span style="font-size:10.0pt">2. GRANT OF RIGHTS</span></b> </p>
-
-<p class="MsoNormal" style="margin-left:.5in"><span style="font-size:10.0pt">a)
-Subject to the terms of this Agreement, each Contributor hereby grants Recipient
-a non-exclusive, worldwide, royalty-free copyright license to<span style="color:red"> </span>reproduce, prepare derivative works of, publicly
-display, publicly perform, distribute and sublicense the Contribution of such
-Contributor, if any, and such derivative works, in source code and object code
-form.</span></p>
-
-<p class="MsoNormal" style="margin-left:.5in"><span style="font-size:10.0pt">b)
-Subject to the terms of this Agreement, each Contributor hereby grants
-Recipient a non-exclusive, worldwide,<span style="color:green"> </span>royalty-free
-patent license under Licensed Patents to make, use, sell, offer to sell, import
-and otherwise transfer the Contribution of such Contributor, if any, in source
-code and object code form. This patent license shall apply to the combination
-of the Contribution and the Program if, at the time the Contribution is added
-by the Contributor, such addition of the Contribution causes such combination
-to be covered by the Licensed Patents. The patent license shall not apply to
-any other combinations which include the Contribution. No hardware per se is
-licensed hereunder. </span></p>
-
-<p class="MsoNormal" style="margin-left:.5in"><span style="font-size:10.0pt">c)
-Recipient understands that although each Contributor grants the licenses to its
-Contributions set forth herein, no assurances are provided by any Contributor
-that the Program does not infringe the patent or other intellectual property
-rights of any other entity. Each Contributor disclaims any liability to Recipient
-for claims brought by any other entity based on infringement of intellectual
-property rights or otherwise. As a condition to exercising the rights and
-licenses granted hereunder, each Recipient hereby assumes sole responsibility
-to secure any other intellectual property rights needed, if any. For example,
-if a third party patent license is required to allow Recipient to distribute
-the Program, it is Recipient's responsibility to acquire that license before
-distributing the Program.</span></p>
-
-<p class="MsoNormal" style="margin-left:.5in"><span style="font-size:10.0pt">d)
-Each Contributor represents that to its knowledge it has sufficient copyright
-rights in its Contribution, if any, to grant the copyright license set forth in
-this Agreement. </span></p>
-
-<p><b><span style="font-size:10.0pt">3. REQUIREMENTS</span></b> </p>
-
-<p><span style="font-size:10.0pt">A Contributor may choose to distribute the
-Program in object code form under its own license agreement, provided that:</span>
-</p>
-
-<p class="MsoNormal" style="margin-left:.5in"><span style="font-size:10.0pt">a)
-it complies with the terms and conditions of this Agreement; and</span></p>
-
-<p class="MsoNormal" style="margin-left:.5in"><span style="font-size:10.0pt">b)
-its license agreement:</span></p>
-
-<p class="MsoNormal" style="margin-left:.5in"><span style="font-size:10.0pt">i)
-effectively disclaims on behalf of all Contributors all warranties and
-conditions, express and implied, including warranties or conditions of title
-and non-infringement, and implied warranties or conditions of merchantability
-and fitness for a particular purpose; </span></p>
-
-<p class="MsoNormal" style="margin-left:.5in"><span style="font-size:10.0pt">ii)
-effectively excludes on behalf of all Contributors all liability for damages,
-including direct, indirect, special, incidental and consequential damages, such
-as lost profits; </span></p>
-
-<p class="MsoNormal" style="margin-left:.5in"><span style="font-size:10.0pt">iii)
-states that any provisions which differ from this Agreement are offered by that
-Contributor alone and not by any other party; and</span></p>
-
-<p class="MsoNormal" style="margin-left:.5in"><span style="font-size:10.0pt">iv)
-states that source code for the Program is available from such Contributor, and
-informs licensees how to obtain it in a reasonable manner on or through a
-medium customarily used for software exchange.<span style="color:blue"> </span></span></p>
-
-<p><span style="font-size:10.0pt">When the Program is made available in source
-code form:</span> </p>
-
-<p class="MsoNormal" style="margin-left:.5in"><span style="font-size:10.0pt">a)
-it must be made available under this Agreement; and </span></p>
-
-<p class="MsoNormal" style="margin-left:.5in"><span style="font-size:10.0pt">b) a
-copy of this Agreement must be included with each copy of the Program. </span></p>
-
-<p><span style="font-size:10.0pt">Contributors may not remove or alter any
-copyright notices contained within the Program. </span></p>
-
-<p><span style="font-size:10.0pt">Each Contributor must identify itself as the
-originator of its Contribution, if any, in a manner that reasonably allows
-subsequent Recipients to identify the originator of the Contribution. </span></p>
-
-<p><b><span style="font-size:10.0pt">4. COMMERCIAL DISTRIBUTION</span></b> </p>
-
-<p><span style="font-size:10.0pt">Commercial distributors of software may
-accept certain responsibilities with respect to end users, business partners
-and the like. While this license is intended to facilitate the commercial use
-of the Program, the Contributor who includes the Program in a commercial
-product offering should do so in a manner which does not create potential
-liability for other Contributors. Therefore, if a Contributor includes the
-Program in a commercial product offering, such Contributor ("Commercial
-Contributor") hereby agrees to defend and indemnify every other
-Contributor ("Indemnified Contributor") against any losses, damages and
-costs (collectively "Losses") arising from claims, lawsuits and other
-legal actions brought by a third party against the Indemnified Contributor to
-the extent caused by the acts or omissions of such Commercial Contributor in
-connection with its distribution of the Program in a commercial product
-offering. The obligations in this section do not apply to any claims or Losses
-relating to any actual or alleged intellectual property infringement. In order
-to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
-Contributor in writing of such claim, and b) allow the Commercial Contributor
-to control, and cooperate with the Commercial Contributor in, the defense and
-any related settlement negotiations. The Indemnified Contributor may participate
-in any such claim at its own expense.</span> </p>
-
-<p><span style="font-size:10.0pt">For example, a Contributor might include the
-Program in a commercial product offering, Product X. That Contributor is then a
-Commercial Contributor. If that Commercial Contributor then makes performance
-claims, or offers warranties related to Product X, those performance claims and
-warranties are such Commercial Contributor's responsibility alone. Under this
-section, the Commercial Contributor would have to defend claims against the
-other Contributors related to those performance claims and warranties, and if a
-court requires any other Contributor to pay any damages as a result, the
-Commercial Contributor must pay those damages.</span> </p>
-
-<p><b><span style="font-size:10.0pt">5. NO WARRANTY</span></b> </p>
-
-<p><span style="font-size:10.0pt">EXCEPT AS EXPRESSLY SET FORTH IN THIS
-AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT
-WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
-WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
-MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
-responsible for determining the appropriateness of using and distributing the
-Program and assumes all risks associated with its exercise of rights under this
-Agreement , including but not limited to the risks and costs of program errors,
-compliance with applicable laws, damage to or loss of data, programs or
-equipment, and unavailability or interruption of operations. </span></p>
-
-<p><b><span style="font-size:10.0pt">6. DISCLAIMER OF LIABILITY</span></b> </p>
-
-<p><span style="font-size:10.0pt">EXCEPT AS EXPRESSLY SET FORTH IN THIS
-AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
-ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
-OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
-THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
-THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
-
-<p><b><span style="font-size:10.0pt">7. GENERAL</span></b> </p>
-
-<p><span style="font-size:10.0pt">If any provision of this Agreement is invalid
-or unenforceable under applicable law, it shall not affect the validity or
-enforceability of the remainder of the terms of this Agreement, and without
-further action by the parties hereto, such provision shall be reformed to the
-minimum extent necessary to make such provision valid and enforceable.</span> </p>
-
-<p><span style="font-size:10.0pt">If Recipient institutes patent litigation
-against any entity (including a cross-claim or counterclaim in a lawsuit)
-alleging that the Program itself (excluding combinations of the Program with
-other software or hardware) infringes such Recipient's patent(s), then such
-Recipient's rights granted under Section 2(b) shall terminate as of the date
-such litigation is filed. </span></p>
-
-<p><span style="font-size:10.0pt">All Recipient's rights under this Agreement
-shall terminate if it fails to comply with any of the material terms or
-conditions of this Agreement and does not cure such failure in a reasonable
-period of time after becoming aware of such noncompliance. If all Recipient's
-rights under this Agreement terminate, Recipient agrees to cease use and
-distribution of the Program as soon as reasonably practicable. However,
-Recipient's obligations under this Agreement and any licenses granted by
-Recipient relating to the Program shall continue and survive. </span></p>
-
-<p><span style="font-size:10.0pt">Everyone is permitted to copy and distribute
-copies of this Agreement, but in order to avoid inconsistency the Agreement is
-copyrighted and may only be modified in the following manner. The Agreement
-Steward reserves the right to publish new versions (including revisions) of
-this Agreement from time to time. No one other than the Agreement Steward has
-the right to modify this Agreement. The Eclipse Foundation is the initial
-Agreement Steward. The Eclipse Foundation may assign the responsibility to
-serve as the Agreement Steward to a suitable separate entity. Each new version
-of the Agreement will be given a distinguishing version number. The Program
-(including Contributions) may always be distributed subject to the version of
-the Agreement under which it was received. In addition, after a new version of
-the Agreement is published, Contributor may elect to distribute the Program
-(including its Contributions) under the new version. Except as expressly stated
-in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
-the intellectual property of any Contributor under this Agreement, whether
-expressly, by implication, estoppel or otherwise. All rights in the Program not
-expressly granted under this Agreement are reserved.</span> </p>
-
-<p><span style="font-size:10.0pt">This Agreement is governed by the laws of the
-State of New York and the intellectual property laws of the United States of
-America. No party to this Agreement will bring a legal action under this
-Agreement more than one year after the cause of action arose. Each party waives
-its rights to a jury trial in any resulting litigation.</span> </p>
-
-<p class="MsoNormal"><!--[if !supportEmptyParas]--> <!--[endif]--><o:p></o:p></p>
-
-</div>
-
-
-
-</body></html>
\ No newline at end of file
diff --git a/com.google.eclipse.terminal.local.feature/feature.properties b/com.google.eclipse.terminal.local.feature/feature.properties
deleted file mode 100644
index 7c9a8e4..0000000
--- a/com.google.eclipse.terminal.local.feature/feature.properties
+++ /dev/null
@@ -1,169 +0,0 @@
-###############################################################################
-# Copyright (c) 2012 Google Inc
-#
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-#
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-# Alex Ruiz - initial API and implementation
-###############################################################################
-# features.properties
-# contains externalized strings for feature.xml
-# "%foo" in feature.xml corresponds to the key "foo" in this file
-# java.io.Properties file (ISO 8859-1 with "\" escapes)
-# This file should be translated.
-
-# "featureName" property - name of the feature
-featureName=Terminal
-
-# "providerName" property - name of the company that provides the feature
-providerName=Google, Inc.
-
-# "updateSiteName" property - label for the update site
-updateSiteName=elt
-
-# "description" property - description of the feature
-description=Command-line terminal for Eclipse
-
-# copyright
-copyright=\
-Copyright (c) 2012 Google, Inc.\n\
-All rights reserved. This program and the accompanying materials\n\
-are made available under the terms of the Eclipse Public License v1.0\n\
-which accompanies this distribution, and is available at\n\
-http://www.eclipse.org/legal/epl-v10.html
-
-# "licenseURL" property - URL of the "Feature License"
-# do not translate value - just change to point to a locale-specific HTML page
-licenseURL=epl-v10.html
-
-# "license" property - text of the "Feature Update License"
-# should be plain text version of license agreement pointed to be "licenseURL"
-license=\
-Eclipse Foundation Software User Agreement\n\
-February 1, 2011\n\
-\n\
-Usage Of Content\n\
-\n\
-THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
-OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
-USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
-AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
-NOTICES INDICATED OR REFERENCED BELOW. BY USING THE CONTENT, YOU\n\
-AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
-AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
-OR NOTICES INDICATED OR REFERENCED BELOW. IF YOU DO NOT AGREE TO THE\n\
-TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
-OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
-BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
-\n\
-Applicable Licenses\n\
-\n\
-Unless otherwise indicated, all Content made available by the\n\
-Eclipse Foundation is provided to you under the terms and conditions of\n\
-the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\
-provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
-For purposes of the EPL, "Program" will mean the Content.\n\
-\n\
-Content includes, but is not limited to, source code, object code,\n\
-documentation and other files maintained in the Eclipse Foundation source code\n\
-repository ("Repository") in software modules ("Modules") and made available\n\
-as downloadable archives ("Downloads").\n\
-\n\
- - Content may be structured and packaged into modules to facilitate delivering,\n\
- extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
- plug-in fragments ("Fragments"), and features ("Features").\n\
- - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\
- in a directory named "plugins".\n\
- - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
- Each Feature may be packaged as a sub-directory in a directory named "features".\n\
- Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
- numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
- - Features may also include other Features ("Included Features"). Within a Feature, files\n\
- named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
-\n\
-The terms and conditions governing Plug-ins and Fragments should be\n\
-contained in files named "about.html" ("Abouts"). The terms and\n\
-conditions governing Features and Included Features should be contained\n\
-in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
-Licenses may be located in any directory of a Download or Module\n\
-including, but not limited to the following locations:\n\
-\n\
- - The top-level (root) directory\n\
- - Plug-in and Fragment directories\n\
- - Inside Plug-ins and Fragments packaged as JARs\n\
- - Sub-directories of the directory named "src" of certain Plug-ins\n\
- - Feature directories\n\
-\n\
-Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
-Provisioning Technology (as defined below), you must agree to a license ("Feature \n\
-Update License") during the installation process. If the Feature contains\n\
-Included Features, the Feature Update License should either provide you\n\
-with the terms and conditions governing the Included Features or inform\n\
-you where you can locate them. Feature Update Licenses may be found in\n\
-the "license" property of files named "feature.properties" found within a Feature.\n\
-Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\
-terms and conditions (or references to such terms and conditions) that\n\
-govern your use of the associated Content in that directory.\n\
-\n\
-THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\
-TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
-SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
-\n\
- - Eclipse Distribution License Version 1.0 (available at http://www.eclipse.org/licenses/edl-v1.0.html)\n\
- - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
- - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
- - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
- - Metro Link Public License 1.00 (available at http://www.opengroup.org/openmotif/supporters/metrolink/license.html)\n\
- - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
-\n\
-IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
-TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\
-is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
-govern that particular Content.\n\
-\n\
-\n\Use of Provisioning Technology\n\
-\n\
-The Eclipse Foundation makes available provisioning software, examples of which include,\n\
-but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\
-the purpose of allowing users to install software, documentation, information and/or\n\
-other materials (collectively "Installable Software"). This capability is provided with\n\
-the intent of allowing such users to install, extend and update Eclipse-based products.\n\
-Information about packaging Installable Software is available at\n\
-http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\
-\n\
-You may use Provisioning Technology to allow other parties to install Installable Software.\n\
-You shall be responsible for enabling the applicable license agreements relating to the\n\
-Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\
-in accordance with the Specification. By using Provisioning Technology in such a manner and\n\
-making it available in accordance with the Specification, you further acknowledge your\n\
-agreement to, and the acquisition of all necessary rights to permit the following:\n\
-\n\
- 1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\
- the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\
- extending or updating the functionality of an Eclipse-based product.\n\
- 2. During the Provisioning Process, the Provisioning Technology may cause third party\n\
- Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\
- 3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\
- govern the use of the Installable Software ("Installable Software Agreement") and such\n\
- Installable Software Agreement shall be accessed from the Target Machine in accordance\n\
- with the Specification. Such Installable Software Agreement must inform the user of the\n\
- terms and conditions that govern the Installable Software and must solicit acceptance by\n\
- the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\
- indication of agreement by the user, the provisioning Technology will complete installation\n\
- of the Installable Software.\n\
-\n\
-Cryptography\n\
-\n\
-Content may contain encryption software. The country in which you are\n\
-currently may have restrictions on the import, possession, and use,\n\
-and/or re-export to another country, of encryption software. BEFORE\n\
-using any encryption software, please check the country's laws,\n\
-regulations and policies concerning the import, possession, or use, and\n\
-re-export of encryption software, to see if this is permitted.\n\
-\n\
-Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n
-########### end of license property ##########################################
diff --git a/com.google.eclipse.terminal.local.feature/feature.xml b/com.google.eclipse.terminal.local.feature/feature.xml
deleted file mode 100644
index 3e9eed0..0000000
--- a/com.google.eclipse.terminal.local.feature/feature.xml
+++ /dev/null
@@ -1,84 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<feature
- id="com.google.eclipse.terminal.local"
- label="%featureName"
- version="1.1.0.qualifier"
- provider-name="%providerName">
- <description url="https://code.google.com/p/elt/"> %description
- </description>
- <copyright> %description
- </copyright>
- <license url="%licenseURL"> %license
- </license>
- <url>
- <update
- label="%updateSiteName"
- url="http://elt.googlecode.com/git/update-site" />
- </url>
- <requires>
- <import plugin="org.eclipse.core.resources" />
- <import
- plugin="org.eclipse.core.runtime"
- version="3.7.0"
- match="compatible" />
- <import
- plugin="com.ibm.icu"
- version="4.4.2"
- match="greaterOrEqual" />
- <import plugin="org.eclipse.ui" />
- <import plugin="org.eclipse.debug.core" />
- <import plugin="org.eclipse.jface.text" />
- </requires>
- <plugin
- id="com.google.eclipse.cdt.core"
- download-size="0"
- install-size="0"
- version="0.0.0"
- unpack="false" />
- <plugin
- id="com.google.eclipse.terminal.local"
- download-size="0"
- install-size="0"
- version="0.0.0"
- unpack="false" />
- <plugin
- id="com.google.eclipse.tm.terminal"
- download-size="0"
- install-size="0"
- version="0.0.0"
- unpack="false" />
- <plugin
- id="com.google.eclipse.cdt.core.macosx"
- os="macosx"
- download-size="0"
- install-size="0"
- version="0.0.0"
- fragment="true"
- unpack="false" />
- <plugin
- id="com.google.eclipse.cdt.core.linux"
- os="linux"
- download-size="0"
- install-size="0"
- version="0.0.0"
- fragment="true"
- unpack="false" />
- <plugin
- id="com.google.eclipse.cdt.core.linux.x86"
- os="linux"
- arch="x86"
- download-size="0"
- install-size="0"
- version="0.0.0"
- fragment="true"
- unpack="false" />
- <plugin
- id="com.google.eclipse.cdt.core.linux.x86_64"
- os="linux"
- arch="x86_64"
- download-size="0"
- install-size="0"
- version="0.0.0"
- fragment="true"
- unpack="false" />
-</feature>
\ No newline at end of file
diff --git a/com.google.eclipse.terminal.local/.classpath b/com.google.eclipse.terminal.local/.classpath
deleted file mode 100644
index ad32c83..0000000
--- a/com.google.eclipse.terminal.local/.classpath
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
- <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
- <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
- <classpathentry kind="src" path="src"/>
- <classpathentry kind="output" path="bin"/>
-</classpath>
diff --git a/com.google.eclipse.terminal.local/.project b/com.google.eclipse.terminal.local/.project
deleted file mode 100644
index f81b414..0000000
--- a/com.google.eclipse.terminal.local/.project
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
- <name>com.google.eclipse.terminal.local</name>
- <comment></comment>
- <projects>
- </projects>
- <buildSpec>
- <buildCommand>
- <name>org.eclipse.jdt.core.javabuilder</name>
- <arguments>
- </arguments>
- </buildCommand>
- <buildCommand>
- <name>org.eclipse.pde.ManifestBuilder</name>
- <arguments>
- </arguments>
- </buildCommand>
- <buildCommand>
- <name>org.eclipse.pde.SchemaBuilder</name>
- <arguments>
- </arguments>
- </buildCommand>
- </buildSpec>
- <natures>
- <nature>org.eclipse.pde.PluginNature</nature>
- <nature>org.eclipse.jdt.core.javanature</nature>
- </natures>
-</projectDescription>
diff --git a/com.google.eclipse.terminal.local/.settings/org.eclipse.jdt.core.prefs b/com.google.eclipse.terminal.local/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100644
index c537b63..0000000
--- a/com.google.eclipse.terminal.local/.settings/org.eclipse.jdt.core.prefs
+++ /dev/null
@@ -1,7 +0,0 @@
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
-org.eclipse.jdt.core.compiler.compliance=1.6
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.source=1.6
diff --git a/com.google.eclipse.terminal.local/META-INF/MANIFEST.MF b/com.google.eclipse.terminal.local/META-INF/MANIFEST.MF
deleted file mode 100644
index fa69e1f..0000000
--- a/com.google.eclipse.terminal.local/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,15 +0,0 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: Terminal
-Bundle-SymbolicName: com.google.eclipse.terminal.local;singleton:=true
-Bundle-Version: 1.1.0.qualifier
-Bundle-Activator: com.google.eclipse.terminal.local.Activator
-Bundle-Vendor: Google, Inc.
-Require-Bundle: org.eclipse.ui,
- org.eclipse.core.runtime,
- com.google.eclipse.tm.terminal,
- com.google.eclipse.cdt.core,
- org.eclipse.debug.core,
- org.eclipse.jface.text
-Bundle-RequiredExecutionEnvironment: JavaSE-1.6
-Bundle-ActivationPolicy: lazy
diff --git a/com.google.eclipse.terminal.local/build.properties b/com.google.eclipse.terminal.local/build.properties
deleted file mode 100644
index 6c480f3..0000000
--- a/com.google.eclipse.terminal.local/build.properties
+++ /dev/null
@@ -1,6 +0,0 @@
-source.. = src/
-output.. = bin/
-bin.includes = META-INF/,\
- .,\
- plugin.xml,\
- icons/
diff --git a/com.google.eclipse.terminal.local/icons/change_title.gif b/com.google.eclipse.terminal.local/icons/change_title.gif
deleted file mode 100644
index efc77a7..0000000
--- a/com.google.eclipse.terminal.local/icons/change_title.gif
+++ /dev/null
Binary files differ
diff --git a/com.google.eclipse.terminal.local/icons/new_terminal.gif b/com.google.eclipse.terminal.local/icons/new_terminal.gif
deleted file mode 100644
index 80201e0..0000000
--- a/com.google.eclipse.terminal.local/icons/new_terminal.gif
+++ /dev/null
Binary files differ
diff --git a/com.google.eclipse.terminal.local/icons/scroll_lock.gif b/com.google.eclipse.terminal.local/icons/scroll_lock.gif
deleted file mode 100644
index 68fd6cf..0000000
--- a/com.google.eclipse.terminal.local/icons/scroll_lock.gif
+++ /dev/null
Binary files differ
diff --git a/com.google.eclipse.terminal.local/icons/terminal.gif b/com.google.eclipse.terminal.local/icons/terminal.gif
deleted file mode 100644
index 557d001..0000000
--- a/com.google.eclipse.terminal.local/icons/terminal.gif
+++ /dev/null
Binary files differ
diff --git a/com.google.eclipse.terminal.local/plugin.xml b/com.google.eclipse.terminal.local/plugin.xml
deleted file mode 100644
index cdc5bbf..0000000
--- a/com.google.eclipse.terminal.local/plugin.xml
+++ /dev/null
@@ -1,135 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<?eclipse version="3.4"?>
-<plugin>
- <extension point="org.eclipse.ui.views">
- <view
- allowMultiple="true"
- category="org.eclipse.ui"
- class="com.google.eclipse.terminal.local.ui.view.TerminalView"
- icon="icons/terminal.gif"
- id="com.google.eclipse.terminal.local.localTerminalView"
- name="Terminal"
- restorable="true">
- </view>
- </extension>
- <extension point="org.eclipse.ui.perspectiveExtensions">
- <perspectiveExtension targetID="*">
- <view
- id="com.google.eclipse.terminal.local.localTerminalView"
- minimized="false"
- relationship="stack"
- relative="org.eclipse.ui.console.ConsoleView">
- </view>
- </perspectiveExtension>
- </extension>
- <extension point="org.eclipse.ui.preferencePages">
- <page
- category="com.google.eclipse.terminal.local.page.root"
- class="com.google.eclipse.terminal.local.ui.preferences.ColorsAndFontsPreferencePage"
- id="com.google.eclipse.terminal.local.page.colorsAndFonts"
- name="Colors and Fonts">
- </page>
- <page
- class="com.google.eclipse.terminal.local.ui.preferences.RootPreferencePage"
- id="com.google.eclipse.terminal.local.page.root"
- name="Terminal">
- </page>
- </extension>
- <extension point="org.eclipse.core.runtime.preferences">
- <initializer class="com.google.eclipse.terminal.local.ui.preferences.PreferenceInitializer">
- </initializer>
- </extension>
- <extension point="org.eclipse.ui.commands">
- <command
- categoryId="org.eclipse.ui.category.views"
- id="com.google.eclipse.terminal.local.open"
- name="Open Terminal Here">
- </command>
- </extension>
- <extension point="org.eclipse.ui.commandImages">
- <image
- commandId="com.google.eclipse.terminal.local.open"
- icon="icons/terminal.gif">
- </image>
- </extension>
- <extension point="org.eclipse.ui.menus">
- <menuContribution
- allPopups="false"
- locationURI="popup:org.eclipse.ui.popup.any?after=additions">
- <command
- commandId="com.google.eclipse.terminal.local.open"
- style="push">
- <visibleWhen checkEnabled="false">
- <and>
- <with variable="selection">
- <count value="1">
- </count>
- </with>
- <iterate>
- <adapt type="org.eclipse.core.resources.IResource">
- </adapt>
- </iterate>
- </and>
- </visibleWhen>
- </command>
- </menuContribution>
- </extension>
- <extension point="org.eclipse.ui.handlers">
- <handler
- class="com.google.eclipse.terminal.local.ui.command.OpenTerminalCommand"
- commandId="com.google.eclipse.terminal.local.open">
- </handler>
- </extension>
- <extension point="org.eclipse.ui.contexts">
- <context
- description="In Terminal"
- id="com.google.eclipse.terminal.local.context.localTerminal"
- name="Terminal"
- parentId="org.eclipse.ui.contexts.window">
- </context>
- </extension>
- <extension point="org.eclipse.ui.commands">
- <category
- id="com.google.eclipse.terminal.local.commands.category"
- name="Terminal">
- </category>
- <command
- categoryId="com.google.eclipse.terminal.local.commands.category"
- id="com.google.eclipse.terminal.local.copy"
- name="Copy">
- </command>
- <command
- categoryId="com.google.eclipse.terminal.local.commands.category"
- id="com.google.eclipse.terminal.local.paste"
- name="Paste">
- </command>
- </extension>
- <extension point="org.eclipse.ui.bindings">
- <key
- commandId="com.google.eclipse.terminal.local.copy"
- contextId="com.google.eclipse.terminal.local.context.localTerminal"
- platform="carbon"
- schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
- sequence="M1+C">
- </key>
- <key
- commandId="com.google.eclipse.terminal.local.copy"
- contextId="com.google.eclipse.terminal.local.context.localTerminal"
- schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
- sequence="M1+M2+C">
- </key>
- <key
- commandId="com.google.eclipse.terminal.local.paste"
- contextId="com.google.eclipse.terminal.local.context.localTerminal"
- platform="carbon"
- schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
- sequence="M1+V">
- </key>
- <key
- commandId="com.google.eclipse.terminal.local.paste"
- contextId="com.google.eclipse.terminal.local.context.localTerminal"
- schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
- sequence="M1+M2+V">
- </key>
- </extension>
-</plugin>
\ No newline at end of file
diff --git a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/Activator.java b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/Activator.java
deleted file mode 100644
index deab4a2..0000000
--- a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/Activator.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Copyright (c) 2012 Google Inc.
- *
- * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
- * Public License v1.0 which accompanies this distribution, and is available at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- */
-package com.google.eclipse.terminal.local;
-
-import static org.eclipse.core.runtime.IStatus.*;
-
-import static com.google.eclipse.terminal.local.ImageKeys.*;
-
-import java.net.URL;
-
-import org.eclipse.core.runtime.*;
-import org.eclipse.jface.preference.IPreferenceStore;
-import org.eclipse.jface.resource.*;
-import org.eclipse.ui.plugin.AbstractUIPlugin;
-import org.osgi.framework.BundleContext;
-
-/**
- * The activator class controls the plug-in life cycle.
- *
- * @author alruiz@google.com (Alex Ruiz)
- */
-public class Activator extends AbstractUIPlugin {
- public static final String PLUGIN_ID = "com.google.eclipse.terminal.local";
-
- private static Activator plugin;
-
- @Override public void start(BundleContext context) throws Exception {
- super.start(context);
- plugin = this;
- }
-
- @Override public void stop(BundleContext context) throws Exception {
- plugin = null;
- super.stop(context);
- }
-
- @Override protected void initializeImageRegistry(ImageRegistry registry) {
- addImage(registry, CHANGE_TITLE, "icons/change_title.gif");
- addImage(registry, NEW_TERMINAL, "icons/new_terminal.gif");
- addImage(registry, SCROLL_LOCK, "icons/scroll_lock.gif");
- }
-
- private void addImage(ImageRegistry registry, String key, String path) {
- URL imageUrl = instance().getBundle().getEntry(path);
- registry.put(key, ImageDescriptor.createFromURL(imageUrl));
-
- }
-
- public static void log(String message, Throwable cause) {
- log(new Status(ERROR, PLUGIN_ID, OK, message, cause));
- }
-
- public static void log(IStatus status) {
- instance().getLog().log(status);
- }
-
- public static ImageDescriptor imageDescriptor(String key) {
- return instance().getImageRegistry().getDescriptor(key);
- }
-
- public static Activator instance() {
- return plugin;
- }
-
- public static IPreferenceStore preferenceStore() {
- return instance().getPreferenceStore();
- }
-}
diff --git a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ImageKeys.java b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ImageKeys.java
deleted file mode 100644
index 0dfff3e..0000000
--- a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ImageKeys.java
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- * Copyright (c) 2012 Google Inc.
- *
- * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
- * Public License v1.0 which accompanies this distribution, and is available at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- */
-package com.google.eclipse.terminal.local;
-
-/**
- * @author alruiz@google.com (Alex Ruiz)
- */
-public final class ImageKeys {
- public static final String CHANGE_TITLE = "changeTitle";
- public static final String NEW_TERMINAL = "newTerminal";
- public static final String SCROLL_LOCK = "scrollLock";
-
- private ImageKeys() {}
-}
diff --git a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/core/connector/LifeCycleListener.java b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/core/connector/LifeCycleListener.java
deleted file mode 100644
index c6e396f..0000000
--- a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/core/connector/LifeCycleListener.java
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
- * Copyright (c) 2012 Google Inc.
- *
- * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
- * Public License v1.0 which accompanies this distribution, and is available at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- */
-package com.google.eclipse.terminal.local.core.connector;
-
-/**
- * Listens for events related to the life cycle of a pseudo-terminal process.
- *
- * @author alruiz@google.com (Alex Ruiz)
- */
-public interface LifeCycleListener {
- /**
- * Notification that the execution pseudo-terminal process has finished.
- */
- void executionFinished();
-}
diff --git a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/core/connector/LocalTerminalConnector.java b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/core/connector/LocalTerminalConnector.java
deleted file mode 100644
index 8d24772..0000000
--- a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/core/connector/LocalTerminalConnector.java
+++ /dev/null
@@ -1,160 +0,0 @@
-/*
- * Copyright (c) 2012 Google Inc.
- *
- * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
- * Public License v1.0 which accompanies this distribution, and is available at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- */
-package com.google.eclipse.terminal.local.core.connector;
-
-import static org.eclipse.core.runtime.IStatus.*;
-
-import static com.google.eclipse.cdt.utils.Platform.*;
-import static com.google.eclipse.terminal.local.Activator.*;
-import static com.google.eclipse.terminal.local.core.connector.Messages.*;
-import static com.google.eclipse.terminal.local.core.connector.PseudoTerminal.isPlatformSupported;
-import static com.google.eclipse.terminal.local.util.Platform.*;
-import static com.google.eclipse.tm.internal.terminal.provisional.api.TerminalState.*;
-
-import java.io.*;
-
-import org.eclipse.core.runtime.*;
-import org.eclipse.debug.core.IStreamListener;
-import org.eclipse.debug.core.model.IStreamMonitor;
-import org.eclipse.debug.internal.core.StreamsProxy;
-import org.eclipse.osgi.util.NLS;
-
-import com.google.eclipse.tm.internal.terminal.connector.TerminalConnector;
-import com.google.eclipse.tm.internal.terminal.provisional.api.*;
-import com.google.eclipse.tm.internal.terminal.provisional.api.provider.TerminalConnectorDelegate;
-
-/**
- * Connector to local terminal.
- *
- * @author alruiz@google.com (Alex Ruiz)
- */
-@SuppressWarnings("restriction") // StreamsProxy is internal API
-public class LocalTerminalConnector extends TerminalConnectorDelegate implements LifeCycleListener {
- private static final String ID = "com.google.eclipse.terminal.local.core.connector";
-
- public static ITerminalConnector createLocalTerminalConnector(final String encoding) {
- TerminalConnector.Factory factory = new TerminalConnector.Factory(){
- @Override public TerminalConnectorDelegate makeConnector() {
- return new LocalTerminalConnector(encoding);
- }
- };
- TerminalConnector connector = new TerminalConnector(factory, ID, localTerminalName);
- String errorMessage = connector.getInitializationErrorMessage();
- if (errorMessage != null) {
- throw new IllegalStateException(errorMessage);
- }
- return connector;
- }
-
- private IPath workingDirectory;
- private PseudoTerminal pseudoTerminal;
-
- private StreamsProxy streamsProxy;
- private OutputStream terminalToRemoteStream;
-
- private final String encoding;
-
- private LocalTerminalConnector(String encoding) {
- this.encoding = encoding;
- }
-
- /**
- * Verifies that PTY support is available on this platform.
- * @throws CoreException if PTY support is <strong>not</strong> available on this platform.
- * @see TerminalConnectorDelegate#initialize()
- */
- @Override public void initialize() throws CoreException {
- if (!isPlatformSupported()) {
- String message = NLS.bind(errorNoPseudoTerminalSupport, getOS(), getOSArch());
- throw new CoreException(new Status(WARNING, PLUGIN_ID, message));
- }
- }
-
- @Override protected void connect() {
- terminalControl.setState(CONNECTING);
- File workingDirectory = workingDirectory();
- pseudoTerminal = new PseudoTerminal(workingDirectory);
- pseudoTerminal.addLifeCycleListener(this);
- try {
- pseudoTerminal.launch();
- streamsProxy = new StreamsProxy(pseudoTerminal.systemProcess(), encoding);
- terminalToRemoteStream = new BufferedOutputStream(new TerminalOutputStream(streamsProxy, encoding), 1024);
- addListeners(terminalControl, streamsProxy.getOutputStreamMonitor(), streamsProxy.getErrorStreamMonitor());
- if (streamsProxy != null) {
- terminalControl.setState(CONNECTED);
- return;
- }
- } catch (Throwable t) {
- log(new Status(INFO, PLUGIN_ID, OK, "Unable to start terminal", t));
- }
- terminalControl.setState(CLOSED);
- }
-
- private File workingDirectory() {
- IPath path = (workingDirectory != null) ? workingDirectory : userHomeDirectory();
- if (path == null) {
- return null;
- }
- File file = path.toFile();
- return (file.isDirectory()) ? file : null;
- }
-
- private void addListeners(ITerminalControl control, IStreamMonitor...monitors) throws UnsupportedEncodingException {
- for (IStreamMonitor monitor : monitors) {
- addListener(monitor, new TerminalOutputListener(control, encoding));
- }
- }
-
- private void addListener(IStreamMonitor monitor, IStreamListener listener) {
- monitor.addListener(listener);
- listener.streamAppended(monitor.getContents(), monitor);
- }
-
- @Override public OutputStream getTerminalToRemoteStream() {
- return terminalToRemoteStream;
- }
-
- /**
- * Returns the system's default shell location as the settings summary.
- * @return the system's default shell location as the settings summary.
- */
- @Override public String getSettingsSummary() {
- return defaultShell().toString();
- }
-
- /**
- * Notifies the pseudo-terminal that the size of the terminal has changed.
- * @param newWidth the new terminal width (in columns.)
- * @param newHeight the new terminal height (in lines.)
- */
- @Override public void setTerminalSize(int newWidth, int newHeight) {
- if (pseudoTerminal != null) {
- pseudoTerminal.updateSize(newWidth, newHeight);
- }
- }
-
- public void setWorkingDirectory(IPath workingDirectory) {
- this.workingDirectory = workingDirectory;
- }
-
- @Override protected void onDisconnect() {
- pseudoTerminal.disconnect();
- }
-
- @Override public void executionFinished() {
- terminalControl.setState(CLOSED);
- if (streamsProxy != null) {
- streamsProxy.close();
- }
- }
-
- public void addLifeCycleListener(LifeCycleListener listener) {
- pseudoTerminal.addLifeCycleListener(listener);
- }
-}
diff --git a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/core/connector/Messages.java b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/core/connector/Messages.java
deleted file mode 100644
index 04b8e36..0000000
--- a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/core/connector/Messages.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Copyright (c) 2012 Google Inc.
- *
- * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
- * Public License v1.0 which accompanies this distribution, and is available at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- */
-package com.google.eclipse.terminal.local.core.connector;
-
-import org.eclipse.osgi.util.NLS;
-
-/**
- * @author alruiz@google.com (Alex Ruiz)
- */
-public class Messages extends NLS {
- public static String localTerminalName;
- public static String errorNoPseudoTerminalSupport;
-
- static {
- Class<Messages> type = Messages.class;
- NLS.initializeMessages(type.getName(), type);
- }
-
- private Messages() {}
-}
diff --git a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/core/connector/Messages.properties b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/core/connector/Messages.properties
deleted file mode 100644
index e9586a6..0000000
--- a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/core/connector/Messages.properties
+++ /dev/null
@@ -1,2 +0,0 @@
-localTerminalName=Terminal
-errorNoPseudoTerminalSupport=Pseudo-terminal support is not available on your host ({0}.{1})
diff --git a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/core/connector/PseudoTerminal.java b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/core/connector/PseudoTerminal.java
deleted file mode 100644
index 9620626..0000000
--- a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/core/connector/PseudoTerminal.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * Copyright (c) 2012 Google Inc.
- *
- * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
- * Public License v1.0 which accompanies this distribution, and is available at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- */
-package com.google.eclipse.terminal.local.core.connector;
-
-import static java.lang.Thread.currentThread;
-import static java.util.concurrent.Executors.newSingleThreadExecutor;
-
-import static com.google.eclipse.terminal.local.util.Platform.*;
-
-import java.io.*;
-import java.util.*;
-import java.util.concurrent.ExecutorService;
-
-import org.eclipse.cdt.utils.pty.PTY;
-import org.eclipse.cdt.utils.spawner.ProcessFactory;
-
-/**
- * @author alruiz@google.com (Alex Ruiz)
- */
-class PseudoTerminal {
- private final List<LifeCycleListener> lifeCycleListeners = new ArrayList<LifeCycleListener>();
- private final ExecutorService executor = newSingleThreadExecutor();
-
- private final File workingDirectory;
-
- private Process process;
- private PTY pty;
-
- private int width;
- private int height;
-
- PseudoTerminal(File workingDirectory) {
- this.workingDirectory = workingDirectory;
- }
-
- void launch() throws IOException {
- ProcessFactory factory = ProcessFactory.getFactory();
- pty = new PTY(false);
- process = factory.exec(command(), environment(), workingDirectory, pty);
- executor.execute(new Runnable() {
- @Override public void run() {
- try {
- process.waitFor();
- } catch (InterruptedException ignored) {
- currentThread().interrupt();
- } finally {
- notifyExecutionFinished();
- }
- }
- });
- }
-
- private String[] command() {
- return new String[] { defaultShell().getAbsolutePath(), "-i" };
- }
-
- private void notifyExecutionFinished() {
- for (LifeCycleListener listener : lifeCycleListeners) {
- listener.executionFinished();
- }
- }
-
- void addLifeCycleListener(LifeCycleListener listener) {
- lifeCycleListeners.add(listener);
- }
-
- Process systemProcess() {
- return process;
- }
-
- void updateSize(int newWidth, int newHeight) {
- if (pty != null && (newWidth != width || newHeight != height)) {
- pty.setTerminalSize(width, height);
- width = newWidth;
- height = newHeight;
- }
- }
-
- static boolean isPlatformSupported() {
- return PTY.isSupported();
- }
-
- void disconnect() {
- if (process != null) {
- try {
- process.exitValue();
- } catch (IllegalThreadStateException e) {
- process.destroy();
- }
- }
- }
-}
diff --git a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/core/connector/TerminalOutputListener.java b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/core/connector/TerminalOutputListener.java
deleted file mode 100644
index aafd129..0000000
--- a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/core/connector/TerminalOutputListener.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright (c) 2012 Google Inc.
- *
- * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
- * Public License v1.0 which accompanies this distribution, and is available at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- */
-package com.google.eclipse.terminal.local.core.connector;
-
-import java.io.*;
-
-import org.eclipse.debug.core.IStreamListener;
-import org.eclipse.debug.core.model.IStreamMonitor;
-
-import com.google.eclipse.tm.internal.terminal.provisional.api.ITerminalControl;
-
-/**
- * @author alruiz@google.com (Alex Ruiz)
- */
-class TerminalOutputListener implements IStreamListener {
- private final PrintStream printStream;
-
- TerminalOutputListener(ITerminalControl control, String encoding) throws UnsupportedEncodingException {
- printStream = new PrintStream(control.getRemoteToTerminalOutputStream(), true, encoding);
- }
-
- @Override public void streamAppended(String text, IStreamMonitor monitor) {
- if (text.contains("\u001b[1A\u001b[K")) {
- // clean = text.replace("\u001b[1A\u001b[K", "\u001b[K");
- // TODO(alruiz) figure out why 1+ lines deleted in blaze build.
- }
- printStream.print(text);
- }
-}
diff --git a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/core/connector/TerminalOutputStream.java b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/core/connector/TerminalOutputStream.java
deleted file mode 100644
index aff8254..0000000
--- a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/core/connector/TerminalOutputStream.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright (c) 2012 Google Inc.
- *
- * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
- * Public License v1.0 which accompanies this distribution, and is available at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- */
-package com.google.eclipse.terminal.local.core.connector;
-
-import java.io.*;
-
-import org.eclipse.debug.core.model.IStreamsProxy;
-
-/**
- * @author alruiz@google.com (Alex Ruiz)
- */
-class TerminalOutputStream extends OutputStream {
- private final IStreamsProxy streamsProxy;
- private final String encoding;
-
- TerminalOutputStream(IStreamsProxy streamsProxy, String encoding) {
- this.streamsProxy = streamsProxy;
- this.encoding = encoding;
- }
-
- @Override
- public void write(int b) throws IOException {
- streamsProxy.write(new String(new byte[] { (byte) (b & 0xFF) }, encoding));
- }
-
- @Override
- public void write(byte[] b, int off, int len) throws IOException {
- String input = new String(b, off, len, encoding);
- streamsProxy.write(input);
- }
-}
diff --git a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/command/OpenTerminalCommand.java b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/command/OpenTerminalCommand.java
deleted file mode 100644
index ba818bb..0000000
--- a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/command/OpenTerminalCommand.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright (c) 2012 Google Inc.
- *
- * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
- * Public License v1.0 which accompanies this distribution, and is available at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- */
-package com.google.eclipse.terminal.local.ui.command;
-
-import static com.google.eclipse.terminal.local.ui.view.TerminalView.openTerminalView;
-
-import org.eclipse.core.commands.*;
-import org.eclipse.core.resources.*;
-import org.eclipse.core.runtime.IAdaptable;
-import org.eclipse.jface.viewers.*;
-import org.eclipse.ui.handlers.HandlerUtil;
-
-/**
- * @author alruiz@google.com (Alex Ruiz)
- */
-public class OpenTerminalCommand extends AbstractHandler {
-
- @Override public Object execute(ExecutionEvent event) {
- ISelection selection = HandlerUtil.getCurrentSelection(event);
- IResource target = resourceFrom(selection);
- if (target != null) {
- if (!(target instanceof IContainer)) {
- target = target.getParent();
- }
- openTerminalView(target.getLocation());
- }
- return null;
- }
-
- private IResource resourceFrom(ISelection selection) {
- if (!(selection instanceof IStructuredSelection)) {
- return null;
- }
- Object o = ((IStructuredSelection) selection).getFirstElement();
- if (!(o instanceof IAdaptable)) {
- return null;
- }
- return (IResource) ((IAdaptable) o).getAdapter(IResource.class);
- }
-}
diff --git a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/preferences/AbstractPreferencesChangeListener.java b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/preferences/AbstractPreferencesChangeListener.java
deleted file mode 100644
index e0322a1..0000000
--- a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/preferences/AbstractPreferencesChangeListener.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (c) 2012 Google Inc.
- *
- * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
- * Public License v1.0 which accompanies this distribution, and is available at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- */
-package com.google.eclipse.terminal.local.ui.preferences;
-
-import static com.google.eclipse.terminal.local.ui.preferences.PreferenceNames.*;
-
-import org.eclipse.jface.util.*;
-
-/**
- * @author alruiz@google.com (Alex Ruiz)
- */
-public abstract class AbstractPreferencesChangeListener implements IPropertyChangeListener {
- @Override public final void propertyChange(PropertyChangeEvent event) {
- String property = event.getProperty();
- if (BUFFER_LINE_COUNT.equals(property)) {
- onBufferLineCountChanged();
- }
- if (BACKGROUND_COLOR.equals(property) || FOREGROUND_COLOR.equals(property)) {
- onColorChanged();
- }
- if (CUSTOM_FONT_DATA.equals(property)) {
- onFontChanged();
- }
- if (USE_BLINKING_CURSOR.equals(property)) {
- onUseBlinkingCursorChanged();
- }
- }
-
- protected abstract void onBufferLineCountChanged();
-
- protected abstract void onColorChanged();
-
- protected abstract void onFontChanged();
-
- protected abstract void onUseBlinkingCursorChanged();
-}
diff --git a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/preferences/ColorSettingPreviewText.txt b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/preferences/ColorSettingPreviewText.txt
deleted file mode 100644
index b434966..0000000
--- a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/preferences/ColorSettingPreviewText.txt
+++ /dev/null
@@ -1,8 +0,0 @@
-$ mkdir ~/Hello-World
-$ cd ~/Hello-World
-$ git init
-$ touch README
-$ git add README
-$ git commit -m 'first commit'
-$ git remote add origin https://code.google.com/p/elt/
-$ git push -u origin master
\ No newline at end of file
diff --git a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/preferences/ColorsAndFontsPreferencePage.java b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/preferences/ColorsAndFontsPreferencePage.java
deleted file mode 100644
index 766819a..0000000
--- a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/preferences/ColorsAndFontsPreferencePage.java
+++ /dev/null
@@ -1,293 +0,0 @@
-/*
- * Copyright (c) 2012 Google Inc.
- *
- * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
- * Public License v1.0 which accompanies this distribution, and is available at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- */
-package com.google.eclipse.terminal.local.ui.preferences;
-
-import static org.eclipse.jface.layout.GridDataFactory.fillDefaults;
-import static org.eclipse.jface.preference.ColorSelector.PROP_COLORCHANGE;
-import static org.eclipse.jface.preference.PreferenceConverter.*;
-import static org.eclipse.jface.resource.JFaceResources.TEXT_FONT;
-import static org.eclipse.ui.dialogs.PreferencesUtil.createPreferenceDialogOn;
-
-import static com.google.eclipse.terminal.local.Activator.*;
-import static com.google.eclipse.terminal.local.ui.preferences.Messages.*;
-import static com.google.eclipse.terminal.local.ui.preferences.PreferenceNames.*;
-
-import java.io.InputStream;
-import java.util.Scanner;
-
-import org.eclipse.jface.layout.GridDataFactory;
-import org.eclipse.jface.preference.*;
-import org.eclipse.jface.resource.*;
-import org.eclipse.jface.text.Document;
-import org.eclipse.jface.text.source.projection.ProjectionViewer;
-import org.eclipse.jface.util.*;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.custom.StyledText;
-import org.eclipse.swt.events.*;
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.widgets.*;
-import org.eclipse.ui.*;
-
-/**
- * @author alruiz@google.com (Alex Ruiz)
- */
-public class ColorsAndFontsPreferencePage extends PreferencePage implements IWorkbenchPreferencePage {
- private ProjectionViewer previewer;
- private ColorSelector foregroundColorSelector;
- private ColorSelector backgroundColorSelector;
- private Button btnUseTextFont;
- private Button btnUseCustomFont;
- private Label lblFontData;
- private Button btnChangeFont;
-
- private FontData fontData;
-
- private IPropertyChangeListener textFontChangeListener;
-
- @Override public void init(IWorkbench workbench) {
- setPreferenceStore(preferenceStore());
- }
-
- @Override protected Control createContents(Composite parent) {
- Composite contents = new Composite(parent, SWT.NONE);
- contents.setLayout(new GridLayout(1, false));
-
- Label lblDescription = new Label(contents, SWT.NONE);
- lblDescription.setText(colorsAndFontsTitle);
-
- GridDataFactory gridDataFactory = fillDefaults().align(SWT.FILL, SWT.CENTER).grab(true, false).span(1, 1);
-
- Composite controls = new Composite(contents, SWT.NONE);
- gridDataFactory.applyTo(controls);
- controls.setLayout(new GridLayout(1, false));
-
- Group grpColors = new Group(controls, SWT.NONE);
- gridDataFactory.applyTo(grpColors);
- grpColors.setLayout(new GridLayout(2, false));
-
- Label lblBackground = new Label(grpColors, SWT.NONE);
- lblBackground.setText(backgroundPrompt);
-
- backgroundColorSelector = new ColorSelector(grpColors);
-
- Label lblForeground = new Label(grpColors, SWT.NONE);
- lblForeground.setText(foregroundPrompt);
-
- foregroundColorSelector = new ColorSelector(grpColors);
-
- Group grpFont = new Group(controls, SWT.NONE);
- gridDataFactory.applyTo(grpFont);
- grpFont.setLayout(new GridLayout(2, false));
-
- SelectionListener fontButtonSelectionListener = new SelectionAdapter() {
- @Override public void widgetSelected(SelectionEvent e) {
- boolean useTextFont = btnUseTextFont.getSelection();
- btnChangeFont.setEnabled(!useTextFont);
- if (useTextFont) {
- updateFontDataWithTextFont();
- }
- }
- };
-
- btnUseTextFont = new Button(grpFont, SWT.RADIO);
- gridDataFactory.span(2, 1).applyTo(btnUseTextFont);
- btnUseTextFont.setText(useTextFont);
- btnUseTextFont.addSelectionListener(fontButtonSelectionListener);
-
- Link changeTextFontLink = new Link(grpFont, SWT.NONE);
- changeTextFontLink.setText(textFontLink);
- GridData gridData = new GridData(SWT.FILL, SWT.BEGINNING, true, false);
- gridData.widthHint = 150; // only expand further if anyone else requires it
- gridData.horizontalSpan = 2;
- changeTextFontLink.setLayoutData(gridData);
- changeTextFontLink.addSelectionListener(new SelectionAdapter() {
- @Override public void widgetSelected(SelectionEvent e) {
- if ("org.eclipse.ui.preferencePages.ColorsAndFonts".equals(e.text)) {
- createPreferenceDialogOn(getShell(), e.text, null, TEXT_FONT);
- }
- }
- });
-
- btnUseCustomFont = new Button(grpFont, SWT.RADIO);
- gridDataFactory.applyTo(btnUseCustomFont);
- btnUseCustomFont.setText(useCustomFont);
- btnUseCustomFont.addSelectionListener(fontButtonSelectionListener);
-
- lblFontData = new Label(grpFont, SWT.NONE);
- gridDataFactory.span(1, 1).applyTo(lblFontData);
- lblFontData.setText("");
-
- btnChangeFont = new Button(grpFont, SWT.NONE);
- btnChangeFont.setText(change);
- btnChangeFont.addSelectionListener(new SelectionAdapter() {
- @Override public void widgetSelected(SelectionEvent e) {
- FontDialog fontDialog = new FontDialog(getShell());
- fontDialog.setFontList(new FontData[] { fontData });
- FontData newFontData = fontDialog.open();
- if (newFontData != null) {
- updateFontData(newFontData);
- }
- }
- });
-
- Label lblPreview = new Label(contents, SWT.NONE);
- lblPreview.setText(previewPrompt);
-
- previewer = new ProjectionViewer(contents, null, null, false, SWT.V_SCROLL | SWT.H_SCROLL);
- previewer.setEditable(false);
- previewer.setDocument(new Document(loadContentsFrom("ColorSettingPreviewText.txt")));
-
- StyledText previewerText = previewer.getTextWidget();
- gridDataFactory.align(SWT.FILL, SWT.FILL).grab(true, true);
- gridDataFactory.applyTo(previewerText);
- Cursor arrowCursor = previewerText.getDisplay().getSystemCursor(SWT.CURSOR_ARROW);
- previewerText.setCursor(arrowCursor);
-
- backgroundColorSelector.addListener(new ColorChangeListener() {
- @Override void onColorChanged(RGB newValue) {
- validateInput();
- if (isValid()) {
- previewer.getTextWidget().setBackground(newColor(newValue));
- }
- }
- });
-
- foregroundColorSelector.addListener(new ColorChangeListener() {
- @Override void onColorChanged(RGB newValue) {
- validateInput();
- if (isValid()) {
- previewer.setTextColor(newColor(newValue));
- }
- }
- });
-
- textFontChangeListener = new IPropertyChangeListener() {
- @Override public void propertyChange(PropertyChangeEvent event) {
- if (TEXT_FONT.equals(event.getProperty()) && btnUseTextFont.getSelection()) {
- updateFontDataWithTextFont();
- }
- }
- };
- JFaceResources.getFontRegistry().addListener(textFontChangeListener);
-
- updateContents();
- return contents;
- }
-
- private String loadContentsFrom(String fileName) {
- String lineSeparator = System.getProperty("line.separator");
- StringBuilder buffer = new StringBuilder();
- Scanner scanner = null;
- try {
- InputStream inputStream = getClass().getResourceAsStream(fileName);
- scanner = new Scanner(inputStream);
- while (scanner.hasNextLine()) {
- String line = scanner.nextLine();
- buffer.append(line).append(lineSeparator);
- }
- } catch (RuntimeException e) {
- log(unableToLoadPreviewContent, e);
- } finally {
- if (scanner != null) {
- scanner.close();
- }
- }
- return buffer.toString();
- }
-
- private void validateInput() {
- if (backgroundColorSelector.getColorValue().equals(foregroundColorSelector.getColorValue())) {
- setErrorMessage(backgroundAndForegroundCannotBeTheSame);
- setValid(false);
- return;
- }
- pageIsValid();
- }
-
- private void pageIsValid() {
- setErrorMessage(null);
- setValid(true);
- }
-
- private void updateFontDataWithTextFont() {
- updateFontData(JFaceResources.getTextFont().getFontData()[0]);
- }
-
- private void updateFontData(FontData newValue) {
- fontData = newValue;
- displayFont();
- }
-
- private void updateContents() {
- RGB background = getColor(getPreferenceStore(), BACKGROUND_COLOR);
- RGB foreground = getColor(getPreferenceStore(), FOREGROUND_COLOR);
- fontData = getFontData(getPreferenceStore(), CUSTOM_FONT_DATA);
- boolean useCustomFont = getPreferenceStore().getBoolean(USE_CUSTOM_FONT);
- updateContents(background, foreground, useCustomFont);
- }
-
- @Override public boolean performOk() {
- setValue(getPreferenceStore(), BACKGROUND_COLOR, backgroundColorSelector.getColorValue());
- setValue(getPreferenceStore(), FOREGROUND_COLOR, foregroundColorSelector.getColorValue());
- preferenceStore().setValue(USE_CUSTOM_FONT, btnUseCustomFont.getSelection());
- setValue(getPreferenceStore(), CUSTOM_FONT_DATA, fontData);
- return true;
- }
-
- @Override protected void performDefaults() {
- RGB background = getDefaultColor(getPreferenceStore(), BACKGROUND_COLOR);
- RGB foreground = getDefaultColor(getPreferenceStore(), FOREGROUND_COLOR);
- fontData = getDefaultFontData(getPreferenceStore(), CUSTOM_FONT_DATA);
- boolean useCustomFont = getPreferenceStore().getDefaultBoolean(USE_CUSTOM_FONT);
- updateContents(background, foreground, useCustomFont);
- }
-
- private void updateContents(RGB background, RGB foreground, boolean useCustomFont) {
- backgroundColorSelector.setColorValue(background);
- foregroundColorSelector.setColorValue(foreground);
- btnUseTextFont.setSelection(!useCustomFont);
- btnUseCustomFont.setSelection(useCustomFont);
- btnChangeFont.setEnabled(useCustomFont);
- previewer.getTextWidget().setBackground(newColor(background));
- previewer.setTextColor(newColor(foreground));
- displayFont();
- }
-
- private void displayFont() {
- lblFontData.setText(StringConverter.asString(fontData));
- previewer.getTextWidget().setFont(new Font(display(), fontData));
- }
-
- private Color newColor(RGB rgb) {
- return new Color(display(), rgb);
- }
-
- private Display display() {
- return getShell().getDisplay();
- }
-
- @Override public void dispose() {
- if (textFontChangeListener != null) {
- JFaceResources.getFontRegistry().removeListener(textFontChangeListener);
- }
- super.dispose();
- }
-
- private static abstract class ColorChangeListener implements IPropertyChangeListener {
- @Override public final void propertyChange(PropertyChangeEvent event) {
- if (PROP_COLORCHANGE.equals(event.getProperty())) {
- RGB rgb = (RGB) event.getNewValue();
- onColorChanged(rgb);
- }
- }
-
- abstract void onColorChanged(RGB newValue);
- }
-}
diff --git a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/preferences/ColorsAndFontsPreferences.java b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/preferences/ColorsAndFontsPreferences.java
deleted file mode 100644
index 7dca06a..0000000
--- a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/preferences/ColorsAndFontsPreferences.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (c) 2012 Google Inc.
- *
- * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
- * Public License v1.0 which accompanies this distribution, and is available at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- */
-package com.google.eclipse.terminal.local.ui.preferences;
-
-import static org.eclipse.jface.preference.PreferenceConverter.*;
-
-import static com.google.eclipse.terminal.local.Activator.preferenceStore;
-import static com.google.eclipse.terminal.local.ui.preferences.PreferenceNames.*;
-
-import org.eclipse.swt.graphics.*;
-
-/**
- * @author alruiz@google.com (Alex Ruiz)
- */
-public class ColorsAndFontsPreferences {
- public static RGB background() {
- return getColor(preferenceStore(), BACKGROUND_COLOR);
- }
-
- public static RGB foreground() {
- return getColor(preferenceStore(), FOREGROUND_COLOR);
- }
-
- public static boolean useCustomFont() {
- return preferenceStore().getBoolean(USE_CUSTOM_FONT);
- }
-
- public static FontData customFontData() {
- return getFontData(preferenceStore(), CUSTOM_FONT_DATA);
- }
-
- public static boolean useBlinkingCursor() {
- return preferenceStore().getBoolean(USE_BLINKING_CURSOR);
- }
-}
diff --git a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/preferences/GeneralPreferences.java b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/preferences/GeneralPreferences.java
deleted file mode 100644
index 4e70760..0000000
--- a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/preferences/GeneralPreferences.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright (c) 2012 Google Inc.
- *
- * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
- * Public License v1.0 which accompanies this distribution, and is available at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- */
-package com.google.eclipse.terminal.local.ui.preferences;
-
-import static com.google.eclipse.terminal.local.Activator.preferenceStore;
-import static com.google.eclipse.terminal.local.ui.preferences.PreferenceNames.*;
-
-/**
- * @author alruiz@google.com (Alex Ruiz)
- */
-public final class GeneralPreferences {
- public static int bufferLineCount() {
- return preferenceStore().getInt(BUFFER_LINE_COUNT);
- }
-
- public static boolean closeViewOnExit() {
- return preferenceStore().getBoolean(CLOSE_VIEW_ON_EXIT);
- }
-
- public static boolean warnOnClose() {
- return preferenceStore().getBoolean(WARN_ON_CLOSE);
- }
-
- public static void warnOnClose(boolean newValue) {
- preferenceStore().setValue(WARN_ON_CLOSE, newValue);
- }
-
- private GeneralPreferences() {}
-}
diff --git a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/preferences/Messages.java b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/preferences/Messages.java
deleted file mode 100644
index 213eb09..0000000
--- a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/preferences/Messages.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (c) 2012 Google Inc.
- *
- * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
- * Public License v1.0 which accompanies this distribution, and is available at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- */
-package com.google.eclipse.terminal.local.ui.preferences;
-
-import org.eclipse.osgi.util.NLS;
-
-/**
- * @author alruiz@google.com (Alex Ruiz)
- */
-public class Messages extends NLS {
- public static String backgroundAndForegroundCannotBeTheSame;
- public static String backgroundPrompt;
- public static String bufferLineCount;
- public static String change;
- public static String closeViewOnExit;
- public static String colorsAndFontsTitle;
- public static String foregroundPrompt;
- public static String generalPreferencesTitle;
- public static String invalidBufferLineCount;
- public static String previewPrompt;
- public static String textFontLink;
- public static String unableToLoadPreviewContent;
- public static String useBlinkingCursor;
- public static String useCustomFont;
- public static String useTextFont;
- public static String warnOnClose;
-
- static {
- Class<Messages> type = Messages.class;
- NLS.initializeMessages(type.getName(), type);
- }
-
- private Messages() {}
-}
diff --git a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/preferences/Messages.properties b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/preferences/Messages.properties
deleted file mode 100644
index 55d4de9..0000000
--- a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/preferences/Messages.properties
+++ /dev/null
@@ -1,17 +0,0 @@
-backgroundAndForegroundCannotBeTheSame=Background and foreground colors cannot be the same
-backgroundPrompt=Background:
-bufferLineCount=Terminal buffer lines:
-change=Change...
-closeViewOnExit=Close view when terminal exits
-colorsAndFontsTitle=Terminal colors and fonts preferences.
-foregroundPrompt=Foreground:
-generalPreferencesTitle=General preferences.
-invalidBufferLineCount=Value should be an integer between {0} and {1}
-previewPrompt=Preview:
-textFontLink=Eclipse's "Text Font" can be configured on the <a href=\"org.eclipse.ui.preferencePages.ColorsAndFonts\">'Colors and Fonts'</a> preference page.
-unableToLoadPreviewContent=Unable to load preview content
-useBlinkingCursor=Use blinking cursor
-useCustomFont=Use custom font
-useTextFont=Use Eclipse's "Text Font"
-warnOnClose=Warn on close
-
diff --git a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/preferences/PreferenceInitializer.java b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/preferences/PreferenceInitializer.java
deleted file mode 100644
index 8b045e5..0000000
--- a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/preferences/PreferenceInitializer.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright (c) 2012 Google Inc.
- *
- * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
- * Public License v1.0 which accompanies this distribution, and is available at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- */
-package com.google.eclipse.terminal.local.ui.preferences;
-
-import static com.google.eclipse.terminal.local.Activator.preferenceStore;
-import static com.google.eclipse.terminal.local.ui.preferences.PreferenceNames.*;
-
-import org.eclipse.core.runtime.preferences.AbstractPreferenceInitializer;
-import org.eclipse.jface.preference.PreferenceConverter;
-import org.eclipse.jface.resource.JFaceResources;
-import org.eclipse.swt.graphics.RGB;
-
-/**
- * @author alruiz@google.com (Alex Ruiz)
- */
-public class PreferenceInitializer extends AbstractPreferenceInitializer {
- @Override public void initializeDefaultPreferences() {
- preferenceStore().setDefault(BUFFER_LINE_COUNT, 1000);
- preferenceStore().setDefault(CLOSE_VIEW_ON_EXIT, true);
- preferenceStore().setDefault(WARN_ON_CLOSE, true);
- setDefault(BACKGROUND_COLOR, new RGB(0, 0, 0));
- setDefault(FOREGROUND_COLOR, new RGB(229, 229, 229));
- preferenceStore().setDefault(USE_CUSTOM_FONT, false);
- preferenceStore().setDefault(USE_BLINKING_CURSOR, true);
- PreferenceConverter.setDefault(preferenceStore(), CUSTOM_FONT_DATA, JFaceResources.getTextFont().getFontData());
- }
-
- private void setDefault(String name, RGB value) {
- PreferenceConverter.setDefault(preferenceStore(), name, value);
- }
-}
diff --git a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/preferences/PreferenceNames.java b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/preferences/PreferenceNames.java
deleted file mode 100644
index 541a43f..0000000
--- a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/preferences/PreferenceNames.java
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Copyright (c) 2012 Google Inc.
- *
- * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
- * Public License v1.0 which accompanies this distribution, and is available at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- */
-package com.google.eclipse.terminal.local.ui.preferences;
-
-/**
- * @author alruiz@google.com (Alex Ruiz)
- */
-final class PreferenceNames {
- static final String BUFFER_LINE_COUNT = "bufferLineCount";
- static final String CLOSE_VIEW_ON_EXIT = "exitViewOnExit";
- static final String WARN_ON_CLOSE = "warnOnClose";
- static final String BACKGROUND_COLOR = "backgroundColor";
- static final String FOREGROUND_COLOR = "foregroundColor";
- static final String USE_CUSTOM_FONT = "useCustomFont";
- static final String CUSTOM_FONT_DATA = "customFontData";
- static final String USE_BLINKING_CURSOR = "useBlinkingCursor";
-
- private PreferenceNames() {}
-}
diff --git a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/preferences/RootPreferencePage.java b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/preferences/RootPreferencePage.java
deleted file mode 100644
index f72217e..0000000
--- a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/preferences/RootPreferencePage.java
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- * Copyright (c) 2012 Google Inc.
- *
- * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
- * Public License v1.0 which accompanies this distribution, and is available at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- */
-package com.google.eclipse.terminal.local.ui.preferences;
-
-import static com.google.eclipse.terminal.local.Activator.preferenceStore;
-import static com.google.eclipse.terminal.local.ui.preferences.Messages.*;
-import static com.google.eclipse.terminal.local.ui.preferences.PreferenceNames.*;
-
-import org.eclipse.jface.preference.PreferencePage;
-import org.eclipse.osgi.util.NLS;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.widgets.*;
-import org.eclipse.ui.*;
-
-/**
- * @author alruiz@google.com (Alex Ruiz)
- */
-public class RootPreferencePage extends PreferencePage implements IWorkbenchPreferencePage {
- public RootPreferencePage() {
- }
- private static final int MINIMUM_BUFFER_LINE_COUNT = 100;
- private static final int MAXIMUM_BUFFER_LINE_COUNT = 50000;
- private static final String INVALID_BUFFER_LINE_COUNT_MESSAGE =
- NLS.bind(invalidBufferLineCount, MINIMUM_BUFFER_LINE_COUNT, MAXIMUM_BUFFER_LINE_COUNT);
-
- private Text txtBufferLineCount;
- private Button btnCloseViewOnExit;
- private Button btnWarnOnClose;
- private Button btnUseBlinkingCursor;
-
- private int newBufferLineCount;
-
- @Override public void init(IWorkbench workbench) {
- setPreferenceStore(preferenceStore());
- }
-
- @Override protected Control createContents(Composite parent) {
- Composite contents = new Composite(parent, SWT.NONE);
- contents.setLayout(new GridLayout(2, false));
-
- Label lblGeneralPreferences = new Label(contents, SWT.NONE);
- lblGeneralPreferences.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, true, false, 2, 1));
- lblGeneralPreferences.setText(generalPreferencesTitle);
-
- Label filler = new Label(contents, SWT.NONE);
- filler.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 2, 1));
-
- Label lblBufferLineCount = new Label(contents, SWT.NONE);
- lblBufferLineCount.setText(bufferLineCount);
-
- txtBufferLineCount = new Text(contents, SWT.BORDER);
- txtBufferLineCount.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
- txtBufferLineCount.addModifyListener(new ModifyListener() {
- @Override public void modifyText(ModifyEvent event) {
- try {
- newBufferLineCount = Integer.parseInt(txtBufferLineCount.getText());
- } catch (NumberFormatException e) {
- setInvalid(INVALID_BUFFER_LINE_COUNT_MESSAGE);
- return;
- }
- if (newBufferLineCount < MINIMUM_BUFFER_LINE_COUNT || newBufferLineCount > MAXIMUM_BUFFER_LINE_COUNT) {
- setInvalid(INVALID_BUFFER_LINE_COUNT_MESSAGE);
- return;
- }
- setErrorMessage(null);
- setValid(true);
- }
- });
-
- btnCloseViewOnExit = new Button(contents, SWT.CHECK);
- btnCloseViewOnExit.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 2, 1));
- btnCloseViewOnExit.setText(closeViewOnExit);
-
- btnWarnOnClose = new Button(contents, SWT.CHECK);
- btnWarnOnClose.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 2, 1));
- btnWarnOnClose.setText(warnOnClose);
-
- btnUseBlinkingCursor = new Button(contents, SWT.CHECK);
- btnUseBlinkingCursor.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 2, 1));
- btnUseBlinkingCursor.setText(useBlinkingCursor);
-
- updateContents();
- return contents;
- }
-
- private void setInvalid(String errorMessage) {
- setErrorMessage(errorMessage);
- setValid(false);
- }
-
- private void updateContents() {
- txtBufferLineCount.setText(getPreferenceStore().getString(BUFFER_LINE_COUNT));
- btnCloseViewOnExit.setSelection(getPreferenceStore().getBoolean(CLOSE_VIEW_ON_EXIT));
- btnWarnOnClose.setSelection(getPreferenceStore().getBoolean(WARN_ON_CLOSE));
- btnUseBlinkingCursor.setSelection(getPreferenceStore().getBoolean(USE_BLINKING_CURSOR));
- }
-
- @Override public boolean performOk() {
- getPreferenceStore().setValue(BUFFER_LINE_COUNT, newBufferLineCount);
- getPreferenceStore().setValue(CLOSE_VIEW_ON_EXIT, btnCloseViewOnExit.getSelection());
- getPreferenceStore().setValue(WARN_ON_CLOSE, btnWarnOnClose.getSelection());
- getPreferenceStore().setValue(USE_BLINKING_CURSOR, btnUseBlinkingCursor.getSelection());
- return true;
- }
-
- @Override protected void performDefaults() {
- txtBufferLineCount.setText(getPreferenceStore().getDefaultString(BUFFER_LINE_COUNT));
- btnCloseViewOnExit.setSelection(getPreferenceStore().getDefaultBoolean(CLOSE_VIEW_ON_EXIT));
- btnWarnOnClose.setSelection(getPreferenceStore().getDefaultBoolean(WARN_ON_CLOSE));
- btnUseBlinkingCursor.setSelection(getPreferenceStore().getDefaultBoolean(USE_BLINKING_CURSOR));
- }
-}
diff --git a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/view/Messages.java b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/view/Messages.java
deleted file mode 100644
index a9c5cee..0000000
--- a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/view/Messages.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (c) 2012 Google Inc.
- *
- * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
- * Public License v1.0 which accompanies this distribution, and is available at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- */
-package com.google.eclipse.terminal.local.ui.view;
-
-import org.eclipse.osgi.util.NLS;
-
-/**
- * @author alruiz@google.com (Alex Ruiz)
- */
-public class Messages extends NLS {
- public static String alwaysCloseWithoutWarn;
- public static String changeTerminalTitle;
- public static String closeTerminalQuestion;
- public static String confirmCloseDialogTitle;
- public static String defaultViewTitle;
- public static String enterTerminalTitleDialogTitle;
- public static String enterTerminalTitlePrompt;
- public static String newLocalTerminal;
- public static String scrollLock;
-
- static {
- Class<Messages> type = Messages.class;
- NLS.initializeMessages(type.getName(), type);
- }
-
- private Messages() {}
-}
diff --git a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/view/Messages.properties b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/view/Messages.properties
deleted file mode 100644
index a2ebc48..0000000
--- a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/view/Messages.properties
+++ /dev/null
@@ -1,9 +0,0 @@
-alwaysCloseWithoutWarn=Always close without warn
-changeTerminalTitle=Change Title
-closeTerminalQuestion=Close terminal?
-confirmCloseDialogTitle=Confirm Close
-defaultViewTitle=Terminal
-enterTerminalTitleDialogTitle=Terminal Title
-enterTerminalTitlePrompt=Enter the new title for the terminal:
-newLocalTerminal=New Terminal
-scrollLock=Scroll Lock
diff --git a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/view/PopupMenu.java b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/view/PopupMenu.java
deleted file mode 100644
index 53c2e03..0000000
--- a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/view/PopupMenu.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * Copyright (c) 2012 Google Inc.
- *
- * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
- * Public License v1.0 which accompanies this distribution, and is available at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- */
-package com.google.eclipse.terminal.local.ui.view;
-
-import static org.eclipse.ui.actions.ActionFactory.*;
-
-import org.eclipse.jface.action.*;
-import org.eclipse.swt.events.*;
-import org.eclipse.swt.widgets.*;
-import org.eclipse.ui.*;
-
-import com.google.eclipse.tm.internal.terminal.control.actions.*;
-import com.google.eclipse.tm.internal.terminal.emulator.VT100TerminalControl;
-
-/**
- * @author alruiz@google.com (Alex Ruiz)
- */
-class PopupMenu {
- private final AbstractTerminalAction copy;
- private final AbstractTerminalAction paste;
- private final AbstractTerminalAction selectAll;
- private final AbstractTerminalAction clearAll;
-
- @SuppressWarnings("deprecation")
- PopupMenu(IViewSite viewSite, VT100TerminalControl terminalControl) {
- PopupMenuManager menuManager = new PopupMenuManager();
- copy = menuManager.add(new TerminalActionCopy(terminalControl));
- copy.setActionDefinitionId("com.google.eclipse.terminal.local.copy");
- paste = menuManager.add(new TerminalActionPaste(terminalControl));
- paste.setActionDefinitionId("com.google.eclipse.terminal.local.paste");
- menuManager.add(new Separator());
- selectAll = menuManager.add(new TerminalActionSelectAll(terminalControl));
- clearAll = menuManager.add(new TerminalActionClearAll(terminalControl));
- IActionBars actionBars = viewSite.getActionBars();
- actionBars.setGlobalActionHandler(COPY.getId(), copy);
- actionBars.setGlobalActionHandler(PASTE.getId(), paste);
- actionBars.setGlobalActionHandler(SELECT_ALL.getId(), selectAll);
- IKeyBindingService keyBindingService = viewSite.getKeyBindingService();
- keyBindingService.registerAction(copy);
- keyBindingService.registerAction(paste);
- menuManager.addMenuListener(new IMenuListener() {
- @Override public void menuAboutToShow(IMenuManager manager) {
- update();
- }
- });
- Control control = terminalControl.getControl();
- Menu menu = menuManager.createContextMenu(control);
- control.setMenu(menu);
- menu.addMenuListener(new MenuAdapter() {
- @Override public void menuHidden(MenuEvent e) {
- copy.updateAction(false);
- }
- });
- }
-
- void update() {
- update(copy, paste, selectAll, clearAll);
- }
-
- private void update(AbstractTerminalAction...actions) {
- for (AbstractTerminalAction action : actions) {
- action.updateAction(true);
- }
- }
-
- private static class PopupMenuManager extends MenuManager {
- PopupMenuManager() {
- super("#PopupMenu");
- }
-
- AbstractTerminalAction add(AbstractTerminalAction action) {
- super.add(action);
- return action;
- }
- }
-}
\ No newline at end of file
diff --git a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/view/TerminalView.java b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/view/TerminalView.java
deleted file mode 100644
index 00c7d4c..0000000
--- a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/view/TerminalView.java
+++ /dev/null
@@ -1,368 +0,0 @@
-/*
- * Copyright (c) 2012 Google Inc.
- *
- * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
- * Public License v1.0 which accompanies this distribution, and is available at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- */
-package com.google.eclipse.terminal.local.ui.view;
-
-import static org.eclipse.core.runtime.Path.fromOSString;
-import static org.eclipse.core.runtime.Status.OK_STATUS;
-import static org.eclipse.jface.resource.JFaceResources.TEXT_FONT;
-import static org.eclipse.jface.window.Window.OK;
-import static org.eclipse.ui.IWorkbenchPage.VIEW_ACTIVATE;
-
-import static com.google.eclipse.terminal.local.Activator.*;
-import static com.google.eclipse.terminal.local.ImageKeys.*;
-import static com.google.eclipse.terminal.local.ui.preferences.ColorsAndFontsPreferences.*;
-import static com.google.eclipse.terminal.local.ui.preferences.GeneralPreferences.*;
-import static com.google.eclipse.terminal.local.ui.view.Messages.*;
-import static com.google.eclipse.terminal.local.util.Platform.userHomeDirectory;
-
-import java.util.UUID;
-
-import org.eclipse.core.runtime.*;
-import org.eclipse.jface.action.*;
-import org.eclipse.jface.dialogs.*;
-import org.eclipse.jface.resource.JFaceResources;
-import org.eclipse.jface.util.*;
-import org.eclipse.swt.graphics.Font;
-import org.eclipse.swt.widgets.*;
-import org.eclipse.ui.*;
-import org.eclipse.ui.contexts.*;
-import org.eclipse.ui.part.ViewPart;
-import org.eclipse.ui.progress.UIJob;
-
-import com.google.eclipse.terminal.local.core.connector.LifeCycleListener;
-import com.google.eclipse.terminal.local.ui.preferences.AbstractPreferencesChangeListener;
-import com.google.eclipse.tm.internal.terminal.control.ITerminalListener;
-import com.google.eclipse.tm.internal.terminal.provisional.api.TerminalState;
-
-/**
- * @author alruiz@google.com (Alex Ruiz)
- */
-public class TerminalView extends ViewPart implements ISaveablePart2 {
- private static final String SCROLL_LOCK_ENABLED = "scrollLock";
- private static final String TITLE_STATE_TYPE = "title";
- private static final String WORKING_DIRECTORY_STATE_TYPE = "workingDirectory";
-
- private static final String VIEW_ID = "com.google.eclipse.terminal.local.localTerminalView";
-
- private IPropertyChangeListener preferencesChangeListener;
- private IPropertyChangeListener textFontChangeListener;
- private IMemento savedState;
- private TerminalWidget terminalWidget;
- private IPath workingDirectory;
-
- private Action newTerminalAction;
- private Action scrollLockAction;
-
- private boolean checkCanBeClosed;
- private boolean forceClose;
-
- private IContextActivation contextActivation;
-
- public static void openTerminalView(IPath workingDirectory) {
- openTerminalView(null, workingDirectory);
- }
-
- private static void openTerminalView(String id, IPath workingDirectory) {
- IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
- IPath safeWorkingDirectory = (workingDirectory != null) ? workingDirectory : userHomeDirectory();
- try {
- String directoryName = safeWorkingDirectory.lastSegment();
- String secondaryId = (id != null) ? id : directoryName;
- TerminalView view = (TerminalView) page.showView(VIEW_ID, secondaryId, VIEW_ACTIVATE);
- view.setPartName(directoryName);
- view.open(safeWorkingDirectory);
- } catch (PartInitException e) {
- log("Unable to create Terminal View", e);
- }
- }
-
- @Override public void init(IViewSite site, IMemento memento) throws PartInitException {
- super.init(site, memento);
- savedState = memento;
- }
-
- @Override public void saveState(IMemento memento) {
- saveState(memento, SCROLL_LOCK_ENABLED, String.valueOf(terminalWidget.isScrollLockEnabled()));
- saveState(memento, TITLE_STATE_TYPE, getPartName());
- saveState(memento, WORKING_DIRECTORY_STATE_TYPE, workingDirectory.toOSString());
- }
-
- private void saveState(IMemento memento, String type, String data) {
- IMemento child = memento.createChild(type);
- child.putTextData(data);
- }
-
- @Override public void createPartControl(Composite parent) {
- terminalWidget = new TerminalWidget(parent, getViewSite());
- terminalWidget.setLifeCycleListener(new LifeCycleListener() {
- @Override public void executionFinished() {
- closeViewOnExitIfPossible();
- }
- });
- terminalWidget.setTerminalListener(new ITerminalListener() {
- @Override public void setTerminalTitle(final String title) {
- updatePartName(title);
- }
-
- @Override public void setState(TerminalState state) {}
- });
- IViewSite viewSite = getViewSite();
- preferencesChangeListener = new AbstractPreferencesChangeListener() {
- @Override protected void onBufferLineCountChanged() {
- updateBufferLineCount();
- }
-
- @Override protected void onColorChanged() {
- updateColors();
- }
-
- @Override protected void onFontChanged() {
- updateFont();
- }
-
- @Override protected void onUseBlinkingCursorChanged() {
- updateUsageOfBlinkingCursor();
- }
- };
- preferenceStore().addPropertyChangeListener(preferencesChangeListener);
- updateBufferLineCount();
- updateColors();
- updateUsageOfBlinkingCursor();
- textFontChangeListener = new IPropertyChangeListener() {
- @Override public void propertyChange(PropertyChangeEvent event) {
- if (TEXT_FONT.equals(event.getProperty())) {
- if (!useCustomFont()) {
- setFont(JFaceResources.getTextFont());
- }
- }
- }
- };
- JFaceResources.getFontRegistry().addListener(textFontChangeListener);
- updateFont();
- setupToolBarActions();
- IContextService contextService = contextService();
- if (contextService != null) {
- contextActivation = contextService.activateContext("com.google.eclipse.terminal.local.context.localTerminal");
- }
- if (savedState != null) {
- updateScrollLockUsingSavedState();
- connectUsingSavedState();
- return;
- }
- if (viewSite.getSecondaryId() == null) {
- setPartName(defaultViewTitle);
- open(userHomeDirectory());
- }
- enableScrollLock(scrollLockAction.isChecked());
- }
-
- private void closeViewOnExitIfPossible() {
- if (closeViewOnExit() && terminalWidget != null && !terminalWidget.isDisposed()) {
- // must run in UI thread.
- forceClose = true;
- terminalWidget.getDisplay().asyncExec(new Runnable() {
- @Override public void run() {
- IWorkbenchPartSite site = getSite();
- site.getPage().hideView((IViewPart) site.getPart());
- }
- });
- }
- }
-
- private void updateColors() {
- terminalWidget.setColors(background(), foreground());
- }
-
- private void updateFont() {
- setFont(terminalFont());
- }
-
- private void updateUsageOfBlinkingCursor() {
- terminalWidget.setBlinkingCursor(useBlinkingCursor());
- }
-
- private Font terminalFont() {
- if (useCustomFont()) {
- return new Font(Display.getDefault(), customFontData());
- }
- return JFaceResources.getTextFont();
- }
-
- private void setFont(Font font) {
- terminalWidget.setFont(font);
- }
-
- private void updateBufferLineCount() {
- terminalWidget.setBufferLineCount(bufferLineCount());
- }
-
- private void setupToolBarActions() {
- IToolBarManager toolBarManager = getViewSite().getActionBars().getToolBarManager();
- toolBarManager.add(new ChangeViewNameAction());
- toolBarManager.add(new Separator());
- newTerminalAction = new NewTerminalAction();
- toolBarManager.add(newTerminalAction);
- scrollLockAction = new ScrollLockAction();
- toolBarManager.add(scrollLockAction);
- }
-
- private void updateScrollLockUsingSavedState() {
- boolean newValue = Boolean.valueOf(savedState(SCROLL_LOCK_ENABLED));
- enableScrollLockAndUpdateAction(newValue);
- }
-
- private void enableScrollLockAndUpdateAction(boolean enabled) {
- enableScrollLock(enabled);
- scrollLockAction.setChecked(enabled);
- }
-
- private void enableScrollLock(boolean enabled) {
- terminalWidget.enableScrollLock(enabled);
- }
-
- private void connectUsingSavedState() {
- String title = savedState(TITLE_STATE_TYPE);
- setPartName(title);
- String savedWorkingDirectory = savedState(WORKING_DIRECTORY_STATE_TYPE);
- if (savedWorkingDirectory != null) {
- open(fromOSString(savedWorkingDirectory));
- }
- }
-
- private String savedState(String type) {
- IMemento child = savedState.getChild(type);
- return (child != null) ? child.getTextData() : null;
- }
-
- private void open(IPath workingDirectory) {
- if (terminalWidget.isConnected()) {
- return;
- }
- this.workingDirectory = workingDirectory;
- terminalWidget.setWorkingDirectory(workingDirectory);
- terminalWidget.connect();
- }
-
- private void updatePartName(final String value) {
- UIJob job = new UIJob("Update terminal view title") {
- @Override public IStatus runInUIThread(IProgressMonitor monitor) {
- setPartName(value);
- return OK_STATUS;
- }
- };
- job.schedule();
- }
-
- @Override public void setFocus() {
- terminalWidget.setFocus();
- }
-
- @Override public void dispose() {
- if (contextActivation != null) {
- IContextService contextService = contextService();
- if (contextService != null) {
- contextService.deactivateContext(contextActivation);
- }
- }
- if (preferencesChangeListener != null) {
- preferenceStore().removePropertyChangeListener(preferencesChangeListener);
- }
- if (textFontChangeListener != null) {
- JFaceResources.getFontRegistry().removeListener(textFontChangeListener);
- }
- super.dispose();
- }
-
- private IContextService contextService() {
- return (IContextService) getSite().getService(IContextService.class);
- }
-
- @Override public boolean isDirty() {
- if (checkCanBeClosed) {
- checkCanBeClosed = false;
- return true;
- }
- return false;
- }
-
- @Override public boolean isSaveOnCloseNeeded() {
- if (forceClose) {
- return false;
- }
- checkCanBeClosed = true;
- return true;
- }
-
- @Override public int promptToSaveOnClose() {
- if (warnOnClose()) {
- boolean close = WarnOnCloseDialog.open(terminalWidget.getShell());
- if (!close) {
- return CANCEL;
- }
- }
- return NO;
- }
-
- @Override public void doSave(IProgressMonitor monitor) {}
-
- @Override public void doSaveAs() {}
-
- @Override public boolean isSaveAsAllowed() {
- return false;
- }
-
- private class NewTerminalAction extends Action {
- NewTerminalAction() {
- setImageDescriptor(imageDescriptor(NEW_TERMINAL));
- setText(newLocalTerminal);
- }
-
- @Override public void run() {
- openTerminalView(UUID.randomUUID().toString(), workingDirectory);
- }
- }
-
- private class ScrollLockAction extends Action {
- ScrollLockAction() {
- super(scrollLock, AS_RADIO_BUTTON);
- setChecked(false);
- setImageDescriptor(imageDescriptor(SCROLL_LOCK));
- }
-
- @Override public void run() {
- boolean newValue = !terminalWidget.isScrollLockEnabled();
- enableScrollLockAndUpdateAction(newValue);
- }
- }
-
- private class ChangeViewNameAction extends Action {
- ChangeViewNameAction() {
- setImageDescriptor(imageDescriptor(CHANGE_TITLE));
- setText(changeTerminalTitle);
- }
-
- @Override public void run() {
- Shell shell = getViewSite().getShell();
- final String currentTitle = getPartName();
- InputDialog input = new InputDialog(shell, enterTerminalTitleDialogTitle, enterTerminalTitlePrompt, currentTitle,
- new IInputValidator() {
- @Override public String isValid(String newText) {
- if (newText == null || newText.isEmpty() || currentTitle.equals(newText)) {
- return "";
- }
- return null;
- }
- });
- input.setBlockOnOpen(true);
- if (input.open() == OK) {
- setPartName(input.getValue());
- }
- }
- }
-}
diff --git a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/view/TerminalWidget.java b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/view/TerminalWidget.java
deleted file mode 100644
index 7f592fe..0000000
--- a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/view/TerminalWidget.java
+++ /dev/null
@@ -1,160 +0,0 @@
-/*
- * Copyright (c) 2012 Google Inc.
- *
- * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
- * Public License v1.0 which accompanies this distribution, and is available at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- */
-package com.google.eclipse.terminal.local.ui.view;
-
-import static com.google.eclipse.terminal.local.core.connector.LocalTerminalConnector.createLocalTerminalConnector;
-import static com.google.eclipse.terminal.local.util.Encodings.DEFAULT_ENCODING;
-import static com.google.eclipse.tm.internal.terminal.provisional.api.TerminalState.CONNECTING;
-
-import java.io.UnsupportedEncodingException;
-
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.jface.layout.*;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.*;
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.widgets.*;
-import org.eclipse.ui.IViewSite;
-
-import com.google.eclipse.terminal.local.core.connector.*;
-import com.google.eclipse.tm.internal.terminal.control.ITerminalListener;
-import com.google.eclipse.tm.internal.terminal.emulator.VT100TerminalControl;
-import com.google.eclipse.tm.internal.terminal.provisional.api.*;
-
-/**
- * @author alruiz@google.com (Alex Ruiz)
- */
-class TerminalWidget extends Composite {
- private final TerminalListener terminalListener = new TerminalListener();
-
- private final VT100TerminalControl terminalControl;
-
- private LifeCycleListener lifeCycleListener;
- private final String encoding = DEFAULT_ENCODING;
-
- TerminalWidget(Composite parent, IViewSite viewSite) {
- super(parent, SWT.NONE);
- GridLayoutFactory.fillDefaults().spacing(0, 0).applyTo(this);
- ITerminalConnector terminalConnector = createLocalTerminalConnector(encoding);
- terminalControl = new VT100TerminalControl(terminalListener, this, new ITerminalConnector[] { terminalConnector });
- terminalControl.setConnector(terminalConnector);
- try {
- terminalControl.setEncoding(encoding);
- } catch (UnsupportedEncodingException e) {
- // TODO(alruiz): do something meaningful with the exception.
- e.printStackTrace();
- }
- GridDataFactory.fillDefaults().grab(true, true).applyTo(terminalControl.getRootControl());
- terminalControl.setInvertedColors(true);
- addDisposeListener(new DisposeListener() {
- @Override public void widgetDisposed(DisposeEvent e) {
- disposeTerminalControl();
- }
- });
- final PopupMenu popupMenu = new PopupMenu(viewSite, terminalControl);
- terminalTextControl().addFocusListener(new FocusAdapter() {
- @Override public void focusGained(FocusEvent e) {
- popupMenu.update();
- }
- });
- }
-
- private Control terminalTextControl() {
- return terminalControl.getControl();
- }
-
- void connect() {
- if (terminalControl.getState() == CONNECTING || terminalControl.isDisposed()) {
- return;
- }
- terminalControl.connectTerminal();
- attachLifeCycleListener();
- }
-
- private void attachLifeCycleListener() {
- LocalTerminalConnector connector = localTerminalConnector();
- if (connector != null && lifeCycleListener != null) {
- connector.addLifeCycleListener(lifeCycleListener);
- }
- }
-
- void disposeTerminalControl() {
- if (!terminalControl.isDisposed()) {
- terminalControl.disposeTerminal();
- }
- }
-
- boolean isConnected() {
- return terminalControl.isConnected();
- }
-
- void setLifeCycleListener(LifeCycleListener listener) {
- lifeCycleListener = listener;
- }
-
- void setTerminalListener(ITerminalListener listener) {
- terminalListener.delegate = listener;
- }
-
- void setWorkingDirectory(IPath workingDirectory) {
- LocalTerminalConnector connector = localTerminalConnector();
- if (connector != null) {
- connector.setWorkingDirectory(workingDirectory);
- }
- }
-
- private LocalTerminalConnector localTerminalConnector() {
- Object connector = terminalControl.getTerminalConnector().getAdapter(LocalTerminalConnector.class);
- return (LocalTerminalConnector) connector;
- }
-
- void setColors(RGB background, RGB foreground) {
- terminalControl.setColors(background, foreground);
- }
-
- @Override public void setFont(Font font) {
- terminalControl.setFont(font);
- }
-
- void setBufferLineCount(int lineCount) {
- terminalControl.setBufferLineLimit(lineCount);
- }
-
- @Override public boolean setFocus() {
- return terminalControl.setFocus();
- }
-
- boolean isScrollLockEnabled() {
- return terminalControl.isScrollLockOn();
- }
-
- void enableScrollLock(boolean enabled) {
- terminalControl.setScrollLockOn(enabled);
- }
-
- void setBlinkingCursor(boolean useBlinkingCursor) {
- terminalControl.setBlinkingCursor(useBlinkingCursor);
- }
-
- private static class TerminalListener implements ITerminalListener {
- ITerminalListener delegate;
-
- @Override public void setState(TerminalState state) {
- if (delegate != null) {
- delegate.setState(state);
- }
- }
-
- @Override public void setTerminalTitle(String title) {
- if (delegate != null) {
- delegate.setTerminalTitle(title);
- }
- }
- }
-}
diff --git a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/view/WarnOnCloseDialog.java b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/view/WarnOnCloseDialog.java
deleted file mode 100644
index 5ac9d11..0000000
--- a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/view/WarnOnCloseDialog.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright (c) 2012 Google Inc.
- *
- * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
- * Public License v1.0 which accompanies this distribution, and is available at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- */
-package com.google.eclipse.terminal.local.ui.view;
-
-import static org.eclipse.jface.dialogs.IDialogConstants.*;
-
-import static com.google.eclipse.terminal.local.ui.preferences.GeneralPreferences.warnOnClose;
-import static com.google.eclipse.terminal.local.ui.view.Messages.*;
-
-import org.eclipse.jface.dialogs.MessageDialog;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.*;
-
-/**
- * @author alruiz@google.com (Alex Ruiz)
- */
-class WarnOnCloseDialog extends MessageDialog {
- private static final String[] BUTTON_LABELS = { YES_LABEL, NO_LABEL };
-
- private Button btnCloseWithoutWarn;
-
- static boolean open(Shell parent) {
- WarnOnCloseDialog dialog = new WarnOnCloseDialog(parent);
- return dialog.open() == OK;
- }
-
- private WarnOnCloseDialog(Shell parentShell) {
- super(parentShell, confirmCloseDialogTitle, null, closeTerminalQuestion, QUESTION, BUTTON_LABELS, 0);
- }
-
- @Override protected Control createCustomArea(Composite parent) {
- btnCloseWithoutWarn = new Button(parent, SWT.CHECK);
- btnCloseWithoutWarn.setText(alwaysCloseWithoutWarn);
- btnCloseWithoutWarn.setSelection(!warnOnClose());
- return btnCloseWithoutWarn;
- }
-
- @Override protected void buttonPressed(int buttonId) {
- boolean closeWithoutWarn = btnCloseWithoutWarn.getSelection();
- warnOnClose(!closeWithoutWarn);
- super.buttonPressed(buttonId);
- }
-}
diff --git a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/util/Encodings.java b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/util/Encodings.java
deleted file mode 100644
index f897dbe..0000000
--- a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/util/Encodings.java
+++ /dev/null
@@ -1,18 +0,0 @@
-/*
- * Copyright (c) 2012 Google Inc.
- *
- * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
- * Public License v1.0 which accompanies this distribution, and is available at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- */
-package com.google.eclipse.terminal.local.util;
-
-/**
- * @author alruiz@google.com (Alex Ruiz)
- */
-public final class Encodings {
- public static final String DEFAULT_ENCODING = "UTF-8";
-
- private Encodings() {}
-}
diff --git a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/util/Platform.java b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/util/Platform.java
deleted file mode 100644
index 4463895..0000000
--- a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/util/Platform.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * Copyright (c) 2012 Google Inc.
- *
- * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
- * Public License v1.0 which accompanies this distribution, and is available at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- */
-package com.google.eclipse.terminal.local.util;
-
-import static java.util.Collections.singletonMap;
-
-import static org.eclipse.core.runtime.Platform.*;
-
-import java.io.File;
-import java.util.*;
-
-import org.eclipse.core.runtime.*;
-import org.eclipse.debug.core.*;
-
-/**
- * Utility methods related to the underlying platform.
- *
- * @author alruiz@google.com (Alex Ruiz)
- */
-public final class Platform {
- // TODO investigate if "TERM" should be "xterm-color"
- private static final Map<String, String> TERM_ANSI = singletonMap("TERM", "ansi");
- private static final String ENVIRONMENT_VARIABLE_FORMAT = "%s=%s";
-
- /**
- * Returns the system's default shell.
- * @return the system's default shell.
- */
- public static File defaultShell() {
- String shell = System.getenv("SHELL");
- if (shell == null) {
- shell = (runningOnWindows()) ? "C:\\Windows\\System32\\cmd.exe" : "/bin/sh";
- }
- return new File(shell);
- }
-
- private static boolean runningOnWindows() {
- return OS_WIN32.equals(getOS());
- }
-
- /**
- * Returns an array of environment variables. Each entry is of the form "<code>name=value</code>".
- * @return an array of environment variables.
- */
- public static String[] environment() {
- Map<String, String> environment = new HashMap<String, String>();
- environment.putAll(TERM_ANSI);
- environment.putAll(nativeEnvironment());
- List<String> variables = new ArrayList<String>(environment.size());
- for (Map.Entry<String, String> entry : environment.entrySet()) {
- String variable = String.format(ENVIRONMENT_VARIABLE_FORMAT, entry.getKey(), entry.getValue());
- variables.add(variable);
- }
- return variables.toArray(new String[variables.size()]);
- }
-
- @SuppressWarnings("unchecked")
- private static Map<String, String> nativeEnvironment() {
- ILaunchManager launchManager = DebugPlugin.getDefault().getLaunchManager();
- return launchManager.getNativeEnvironmentCasePreserved();
- }
-
- /**
- * Returns the path of the user home directory.
- * @return the path of the user home directory or {@code null} if it cannot be found.
- */
- public static IPath userHomeDirectory() {
- String path = System.getProperty("user.home", "/");
- File userHome = new File(path);
- return (userHome.isDirectory()) ? new Path(path) : null;
- }
-
- private Platform() {}
-}
diff --git a/com.google.eclipse.tm.terminal/.classpath b/com.google.eclipse.tm.terminal/.classpath
deleted file mode 100644
index deb6736..0000000
--- a/com.google.eclipse.tm.terminal/.classpath
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
- <classpathentry kind="src" path="src"/>
- <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
- <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
- <classpathentry kind="output" path="bin"/>
-</classpath>
diff --git a/com.google.eclipse.tm.terminal/.gitignore b/com.google.eclipse.tm.terminal/.gitignore
deleted file mode 100644
index 5e56e04..0000000
--- a/com.google.eclipse.tm.terminal/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-/bin
diff --git a/com.google.eclipse.tm.terminal/.project b/com.google.eclipse.tm.terminal/.project
deleted file mode 100644
index d8cdded..0000000
--- a/com.google.eclipse.tm.terminal/.project
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
- <name>com.google.eclipse.tm.terminal</name>
- <comment></comment>
- <projects>
- </projects>
- <buildSpec>
- <buildCommand>
- <name>org.eclipse.jdt.core.javabuilder</name>
- <arguments>
- </arguments>
- </buildCommand>
- <buildCommand>
- <name>org.eclipse.pde.ManifestBuilder</name>
- <arguments>
- </arguments>
- </buildCommand>
- <buildCommand>
- <name>org.eclipse.pde.SchemaBuilder</name>
- <arguments>
- </arguments>
- </buildCommand>
- </buildSpec>
- <natures>
- <nature>org.eclipse.pde.PluginNature</nature>
- <nature>org.eclipse.jdt.core.javanature</nature>
- </natures>
-</projectDescription>
diff --git a/com.google.eclipse.tm.terminal/.settings/org.eclipse.jdt.core.prefs b/com.google.eclipse.tm.terminal/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100644
index 468cbfa..0000000
--- a/com.google.eclipse.tm.terminal/.settings/org.eclipse.jdt.core.prefs
+++ /dev/null
@@ -1,14 +0,0 @@
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.doc.comment.support=enabled
-org.eclipse.jdt.core.compiler.problem.invalidJavadoc=warning
-org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=enabled
-org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=enabled
-org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=disabled
-org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=protected
-org.eclipse.jdt.core.compiler.problem.missingJavadocComments=ignore
-org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=enabled
-org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public
-org.eclipse.jdt.core.compiler.problem.missingJavadocTagDescription=all_standard_tags
-org.eclipse.jdt.core.compiler.problem.missingJavadocTags=ignore
-org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=disabled
-org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=public
diff --git a/com.google.eclipse.tm.terminal/META-INF/MANIFEST.MF b/com.google.eclipse.tm.terminal/META-INF/MANIFEST.MF
deleted file mode 100644
index 7f47e81..0000000
--- a/com.google.eclipse.tm.terminal/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,21 +0,0 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: %pluginName
-Bundle-SymbolicName: com.google.eclipse.tm.terminal;singleton:=true
-Bundle-Version: 1.1.0.qualifier
-Bundle-Activator: com.google.eclipse.tm.internal.terminal.control.impl.TerminalPlugin
-Bundle-Vendor: %providerName
-Bundle-Localization: plugin
-Require-Bundle: org.eclipse.core.runtime,
- org.eclipse.ui,
- org.eclipse.jface.text
-Bundle-ActivationPolicy: lazy
-Eclipse-LazyStart: true
-Bundle-RequiredExecutionEnvironment: JavaSE-1.6
-Bundle-ClassPath: .
-Export-Package: com.google.eclipse.tm.internal.terminal.connector;x-friends:="com.google.eclipse.terminal.local",
- com.google.eclipse.tm.internal.terminal.control;x-friends:="com.google.eclipse.terminal.local",
- com.google.eclipse.tm.internal.terminal.control.actions;x-friends:="com.google.eclipse.terminal.local",
- com.google.eclipse.tm.internal.terminal.emulator;x-friends:="com.google.eclipse.terminal.local",
- com.google.eclipse.tm.internal.terminal.provisional.api;x-friends:="com.google.eclipse.terminal.local",
- com.google.eclipse.tm.internal.terminal.provisional.api.provider;x-friends:="com.google.eclipse.terminal.local"
diff --git a/com.google.eclipse.tm.terminal/build.properties b/com.google.eclipse.tm.terminal/build.properties
deleted file mode 100644
index c46bda7..0000000
--- a/com.google.eclipse.tm.terminal/build.properties
+++ /dev/null
@@ -1,26 +0,0 @@
-###############################################################################
-# Copyright (c) 2003, 2011 Wind River Systems, Inc. and others.
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Initial Contributors:
-# The following Wind River employees contributed to the Terminal component
-# that contains this file: Chris Thew, Fran Litterio, Stephen Lamb,
-# Helmut Haigermoser and Ted Williams.
-#
-# Contributors:
-# Michael Scharf (Wind River) - split into core, view and connector plugins
-# Martin Oberhuber (Wind River) - fixed copyright headers and beautified
-# Anna Dushistova (MontaVista) - added icons
-###############################################################################
-bin.includes = .,\
- META-INF/,\
- plugin.xml,\
- plugin.properties,\
- icons/
-source.. = src/
-output.. = bin/
-javacSource=1.6
-javacTarget=1.6
diff --git a/com.google.eclipse.tm.terminal/icons/clcl16/clear_co.gif b/com.google.eclipse.tm.terminal/icons/clcl16/clear_co.gif
deleted file mode 100644
index af30a42..0000000
--- a/com.google.eclipse.tm.terminal/icons/clcl16/clear_co.gif
+++ /dev/null
Binary files differ
diff --git a/com.google.eclipse.tm.terminal/icons/dlcl16/clear_co.gif b/com.google.eclipse.tm.terminal/icons/dlcl16/clear_co.gif
deleted file mode 100644
index 6775edf..0000000
--- a/com.google.eclipse.tm.terminal/icons/dlcl16/clear_co.gif
+++ /dev/null
Binary files differ
diff --git a/com.google.eclipse.tm.terminal/icons/elcl16/clear_co.gif b/com.google.eclipse.tm.terminal/icons/elcl16/clear_co.gif
deleted file mode 100644
index af30a42..0000000
--- a/com.google.eclipse.tm.terminal/icons/elcl16/clear_co.gif
+++ /dev/null
Binary files differ
diff --git a/com.google.eclipse.tm.terminal/plugin.properties b/com.google.eclipse.tm.terminal/plugin.properties
deleted file mode 100644
index 26ccbac..0000000
--- a/com.google.eclipse.tm.terminal/plugin.properties
+++ /dev/null
@@ -1,28 +0,0 @@
-###############################################################################
-# Copyright (c) 2003, 2011 Wind River Systems, Inc. and others.
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Initial Contributors:
-# The following Wind River employees contributed to the Terminal component
-# that contains this file: Chris Thew, Fran Litterio, Stephen Lamb,
-# Helmut Haigermoser and Ted Williams.
-#
-# Contributors:
-# Michael Scharf (Wind River) - split into core, view and connector plugins
-# Martin Oberhuber (Wind River) - fixed copyright headers and beautified
-###############################################################################
-
-# NLS_MESSAGEFORMAT_NONE
-
-pluginName = Target Management Terminal Widget
-providerName = Eclipse TM Project
-
-terminal.context.name=Terminal Widget
-terminal.context.description=Override ALT+x menu access keys
-
-terminal.insertion.description=Terminal view insertion
-terminal.insertion.name=Terminal view insert
-terminal.insertion.category.name=Terminal Widget
diff --git a/com.google.eclipse.tm.terminal/plugin.xml b/com.google.eclipse.tm.terminal/plugin.xml
deleted file mode 100644
index 90b888a..0000000
--- a/com.google.eclipse.tm.terminal/plugin.xml
+++ /dev/null
@@ -1,93 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<?eclipse version="3.0"?>
-<!--
-# Copyright (c) 2006, 2008 Wind River Systems, Inc. and others.
-# All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
-# Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html
--->
-<plugin>
- <extension point="org.eclipse.ui.contexts">
- <context
- name="%terminal.context.name"
- description="%terminal.context.description"
- id="org.eclipse.tm.terminal.TerminalContext" />
- </extension>
- <extension point="org.eclipse.ui.commands">
- <!-- Dummy commands for bindings, see below -->
- <command
- categoryId="org.eclipse.tm.terminal.category1"
- id="org.eclipse.tm.terminal.command1"
- name="%terminal.insertion.name" />
- <category
- description="%terminal.view.insertion.description"
- id="org.eclipse.tm.terminal.category1"
- name="%terminal.insertion.category.name" />
- </extension>
- <extension point="org.eclipse.ui.bindings">
- <!--
- These keybindings are needed to disable the menu-activation keys (e.g., Alt-F for the File menu, etc.). The code
- in method TerminalControl.TerminalFocusListener.focusGained() disables the Eclipse key binding service, but it
- doesn't disable the global menu-activation keys.
- -->
- <key
- commandId="org.eclipse.tm.terminal.command1"
- contextId="org.eclipse.tm.terminal.TerminalContext"
- schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
- sequence="Alt+A" /> <!-- Search -->
- <key
- commandId="org.eclipse.tm.terminal.command1"
- contextId="org.eclipse.tm.terminal.TerminalContext"
- schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
- sequence="Alt+E" /> <!-- Edit -->
- <key
- commandId="org.eclipse.tm.terminal.command1"
- contextId="org.eclipse.tm.terminal.TerminalContext"
- schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
- sequence="Alt+F" /> <!-- File -->
- <key
- commandId="org.eclipse.tm.terminal.command1"
- contextId="org.eclipse.tm.terminal.TerminalContext"
- schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
- sequence="Alt+G" />
- <key
- commandId="org.eclipse.tm.terminal.command1"
- contextId="org.eclipse.tm.terminal.TerminalContext"
- schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
- sequence="Alt+H" /> <!-- Help -->
- <key
- commandId="org.eclipse.tm.terminal.command1"
- contextId="org.eclipse.tm.terminal.TerminalContext"
- schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
- sequence="Alt+N" /> <!-- Navigate -->
- <key
- commandId="org.eclipse.tm.terminal.command1"
- contextId="org.eclipse.tm.terminal.TerminalContext"
- schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
- sequence="Alt+P" /> <!-- Project -->
- <key
- commandId="org.eclipse.tm.terminal.command1"
- contextId="org.eclipse.tm.terminal.TerminalContext"
- schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
- sequence="Alt+R" /> <!-- Run -->
- <key
- commandId="org.eclipse.tm.terminal.command1"
- contextId="org.eclipse.tm.terminal.TerminalContext"
- schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
- sequence="Alt+S" /> <!-- Source -->
- <key
- commandId="org.eclipse.tm.terminal.command1"
- contextId="org.eclipse.tm.terminal.TerminalContext"
- schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
- sequence="Alt+T" /> <!-- Refactor -->
- <key
- commandId="org.eclipse.tm.terminal.command1"
- contextId="org.eclipse.tm.terminal.TerminalContext"
- schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
- sequence="Alt+V" /> <!-- CVS -->
- <key
- commandId="org.eclipse.tm.terminal.command1"
- contextId="org.eclipse.tm.terminal.TerminalContext"
- schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
- sequence="Alt+W" /> <!-- Window -->
- </extension>
-</plugin>
\ No newline at end of file
diff --git a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/connector/TerminalConnector.java b/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/connector/TerminalConnector.java
deleted file mode 100644
index e9ddae1..0000000
--- a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/connector/TerminalConnector.java
+++ /dev/null
@@ -1,176 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Wind River Systems, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Michael Scharf (Wind River) - initial API and implementation
- * Michael Scharf (Wind River) - [200541] Extract from TerminalConnectorExtension.TerminalConnectorProxy
- * Martin Oberhuber (Wind River) - [225853][api] Provide more default functionality in TerminalConnectorImpl
- * Uwe Stieber (Wind River) - [282996] [terminal][api] Add "hidden" attribute to terminal connector extension point
- *******************************************************************************/
-package com.google.eclipse.tm.internal.terminal.connector;
-
-import static com.google.eclipse.tm.internal.terminal.provisional.api.TerminalState.CLOSED;
-
-import java.io.OutputStream;
-
-import org.eclipse.core.runtime.*;
-
-import com.google.eclipse.tm.internal.terminal.control.impl.TerminalMessages;
-import com.google.eclipse.tm.internal.terminal.provisional.api.*;
-import com.google.eclipse.tm.internal.terminal.provisional.api.provider.TerminalConnectorDelegate;
-
-/**
- * An {@link ITerminalConnector} instance, also known as terminal connection type, for maintaining a single terminal
- * connection.
- *
- * It provides all terminal connector functions that can be provided by static markup without loading the actual
- * implementation class. The actual {@link TerminalConnectorDelegate} implementation class is lazily loaded by the provided
- * {@link TerminalConnector.Factory} interface when needed. class, and delegates to the actual implementation when
- * needed. The following methods can be called without initializing the contributed implementation class:
- * {@link #getId()}, {@link #getName()}, {@link #getSettingsSummary()}, {@link #setTerminalSize(int, int)},
- * {@link #getAdapter(Class)}.
- */
-public class TerminalConnector implements ITerminalConnector {
- /**
- * Creates an instance of TerminalConnectorImpl. This is used to lazily load classed defined in extensions.
- */
- public interface Factory {
- TerminalConnectorDelegate makeConnector() throws Exception;
- }
-
- private final TerminalConnector.Factory terminalConnectorFactory;
- private final String name;
- private final String id;
-
- private TerminalConnectorDelegate connector;
-
- //If the initialization of the class specified in the extension fails, this variable contains the error.
- private Exception initializationException;
-
- /**
- * Constructor for the terminal connector.
- *
- * @param terminalConnectorFactory Factory for lazily instantiating the TerminalConnectorImpl when needed.
- * @param id terminal connector ID. The connector is publicly known under this ID.
- * @param name translatable name to display the connector in the UI.
- */
- public TerminalConnector(TerminalConnector.Factory terminalConnectorFactory, String id, String name) {
- this.terminalConnectorFactory = terminalConnectorFactory;
- this.id = id;
- this.name = name;
- }
-
- @Override public String getInitializationErrorMessage() {
- getConnectorDelegate();
- if (initializationException != null) {
- return initializationException.getLocalizedMessage();
- }
- return null;
- }
-
- @Override public String getId() {
- return id;
- }
-
- @Override public String getName() {
- return name;
- }
-
- private TerminalConnectorDelegate getConnectorDelegate() {
- if (!isInitialized()) {
- initializeConnector();
- }
- return connector;
- }
-
- private void initializeConnector() {
- try {
- connector = terminalConnectorFactory.makeConnector();
- connector.initialize();
- } catch (Exception e) {
- initializationException = e;
- connector = new TerminalConnectorDelegate() {
- @Override protected void connect() {
- terminalControl.setState(CLOSED);
- terminalControl.setErrorMessage(getInitializationErrorMessage());
- }
-
- @Override public OutputStream getTerminalToRemoteStream() {
- return null;
- }
-
- @Override public String getSettingsSummary() {
- return null;
- }
- };
- Logger.logException(e);
- }
- }
-
- @Override public boolean isInitialized() {
- return connector != null || initializationException != null;
- }
-
- @Override public void connect(ITerminalControl control) {
- getConnectorDelegate().connect(control);
- }
-
- @Override public void disconnect() {
- getConnectorDelegate().disconnect();
- }
-
- @Override public OutputStream getTerminalToRemoteStream() {
- return getConnectorDelegate().getTerminalToRemoteStream();
- }
-
- @Override public String getSettingsSummary() {
- if (connector != null) {
- return getConnectorDelegate().getSettingsSummary();
- }
- return TerminalMessages.notInitialized;
- }
-
- @Override public boolean isLocalEcho() {
- return getConnectorDelegate().isLocalEcho();
- }
-
- @Override public void setTerminalSize(int newWidth, int newHeight) {
- // We assume that setTerminalSize is called also after the terminal has been initialized, otherwise we would have to
- // cache the values.
- if (connector != null) {
- connector.setTerminalSize(newWidth, newHeight);
- }
- }
-
- @Override public Object getAdapter(@SuppressWarnings("rawtypes") Class adapter) {
- TerminalConnectorDelegate connector = null;
- if (isInitialized()) {
- connector = getConnectorDelegate();
- }
- // If we cannot create the connector then we cannot adapt.
- if (connector != null) {
- // Maybe the connector is adaptable.
- if (connector instanceof IAdaptable) {
- Object result = ((IAdaptable) connector).getAdapter(adapter);
- // Not sure if the next block is needed.
- if (result == null) {
- // Defer to the platform.
- result = Platform.getAdapterManager().getAdapter(connector, adapter);
- }
- if (result != null) {
- return result;
- }
- }
- // Maybe the real adapter is what we need.
- if (adapter.isInstance(connector)) {
- return connector;
- }
- }
- // Maybe we have to be adapted.
- return Platform.getAdapterManager().getAdapter(this, adapter);
- }
-}
\ No newline at end of file
diff --git a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/connector/TerminalToRemoteInjectionOutputStream.java b/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/connector/TerminalToRemoteInjectionOutputStream.java
deleted file mode 100644
index 54f1de2..0000000
--- a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/connector/TerminalToRemoteInjectionOutputStream.java
+++ /dev/null
@@ -1,161 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008 Wind River Systems, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *******************************************************************************/
-package com.google.eclipse.tm.internal.terminal.connector;
-
-import java.io.*;
-
-class TerminalToRemoteInjectionOutputStream extends FilterOutputStream {
- /**
- * This class handles bytes written to the {@link TerminalToRemoteInjectionOutputStream}.
- */
- static public abstract class Interceptor {
- protected OutputStream original;
-
- public void begin(OutputStream original) throws IOException {
- this.original = original;
- }
-
- public void write(int b) throws IOException {}
-
- public void write(byte[] b, int off, int len) throws IOException {}
-
- public void close() throws IOException {}
-
- public void flush() {}
- }
-
- public static class BufferInterceptor extends Interceptor {
- private final ByteArrayOutputStream fBuffer = new ByteArrayOutputStream();
-
- @Override public void close() throws IOException {
- original.write(fBuffer.toByteArray());
- }
-
- @Override public void write(byte[] b, int off, int len) throws IOException {
- fBuffer.write(b, off, len);
- }
-
- @Override public void write(int b) throws IOException {
- fBuffer.write(b);
- }
- }
-
- private class TerminalFilterOutputStream extends OutputStream {
- final private Object lock = TerminalToRemoteInjectionOutputStream.this;
-
- @Override public void close() throws IOException {
- synchronized (lock) {
- if (injection == this) {
- flush();
- ungrabOutput();
- }
- }
- }
-
- @Override public void write(byte[] b, int off, int len) throws IOException {
- synchronized (lock) {
- checkStream();
- out.write(b, off, len);
- }
- }
-
- @Override public void write(byte[] b) throws IOException {
- synchronized (lock) {
- checkStream();
- out.write(b);
- }
- }
-
- @Override public void flush() throws IOException {
- synchronized (lock) {
- checkStream();
- out.flush();
- }
- }
-
- @Override public void write(int b) throws IOException {
- synchronized (lock) {
- checkStream();
- out.write(b);
- }
- }
-
- private void checkStream() throws IOException {
- if (injection != this)
- {
- throw new IOException("Stream is closed");
- }
- }
- }
-
- private Interceptor interceptor;
- private TerminalFilterOutputStream injection;
-
- public TerminalToRemoteInjectionOutputStream(OutputStream out) {
- super(out);
- }
-
- synchronized protected void ungrabOutput() throws IOException {
- if (interceptor != null) {
- interceptor.close();
- interceptor = null;
- }
- injection = null;
- }
-
- /**
- * There can only be one injection stream active at a time. You must call close on the returned output stream to end
- * the injection.
- * @param interceptor This is used handle bytes sent while the injection stream is active.
- * @return a output stream that can be used to write to the decorated stream.
- * @throws IOException if something goes wrong.
- */
- public synchronized OutputStream grabOutput(Interceptor interceptor) throws IOException {
- if (injection != null) {
- throw new IOException("Buffer in use");
- }
- this.interceptor = interceptor;
- this.interceptor.begin(out);
- injection = new TerminalFilterOutputStream();
- return injection;
- }
-
- public synchronized OutputStream grabOutput() throws IOException {
- return grabOutput(new BufferInterceptor());
- }
-
- @Override synchronized public void close() throws IOException {
- if (injection != null) {
- injection.close();
- }
- super.close();
- }
-
- @Override synchronized public void flush() throws IOException {
- if (interceptor != null) {
- interceptor.flush();
- }
- out.flush();
- }
-
- @Override synchronized public void write(byte[] b, int off, int len) throws IOException {
- if (interceptor != null) {
- interceptor.write(b, off, len);
- } else {
- out.write(b, off, len);
- }
- }
-
- @Override synchronized public void write(int b) throws IOException {
- if (interceptor != null) {
- interceptor.write(b);
- } else {
- out.write(b);
- }
- }
-}
diff --git a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/control/CommandInputFieldWithHistory.java b/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/control/CommandInputFieldWithHistory.java
deleted file mode 100644
index eec3746..0000000
--- a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/control/CommandInputFieldWithHistory.java
+++ /dev/null
@@ -1,287 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2011 Wind River Systems, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *******************************************************************************/
-package com.google.eclipse.tm.internal.terminal.control;
-
-import static java.util.Arrays.asList;
-
-import java.util.*;
-import java.util.List;
-
-import org.eclipse.jface.fieldassist.*;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.*;
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.widgets.*;
-import org.eclipse.ui.fieldassist.ContentAssistCommandAdapter;
-
-/**
- * Manages the Command History for the command line input of the terminal control.
- *
- * <p>
- * <ul>
- * <li>Navigate with ARROW_UP,ARROW_DOWN,PAGE_UP,PAGE_DOWN</li>
- * <li>ESC to cancel history editing</li>
- * <li>History can be edited (by moving up and edit) but changes are not persistent (like in bash)</li>
- * <li>If the same command is entered multiple times in a row, only one entry is kept in the history</li>
- * </ul>
- * </p>
- */
-public class CommandInputFieldWithHistory implements ICommandInputField {
- final List<String> allHistory = new ArrayList<String>();
-
- // Keeps a modifiable history while in history editing mode.
- List<String> editedHistory;
-
- // The current position in the edit history.
- private int editHistoryPosition = 0;
-
- // The limit of the history.
- private final int maxHistorySize;
-
- private Text inputField;
- private Sash sash;
-
- public CommandInputFieldWithHistory(int maxHistorySize) {
- this.maxHistorySize = maxHistorySize;
- }
-
- /**
- * Add a line to the history.
- * @param line The line to be added to the history.
- */
- protected void pushLine(String line) {
- endHistoryMode();
- // Anything to remember?
- if (line == null || line.trim().length() == 0) {
- return;
- }
- allHistory.add(0, line);
- // Ignore if the same as last/
- if (allHistory.size() > 1 && line.equals(allHistory.get(1))) {
- allHistory.remove(0);
- }
- // Limit the history size.
- if (allHistory.size() >= maxHistorySize) {
- allHistory.remove(allHistory.size() - 1);
- }
- }
-
- public void setHistory(String history) {
- endHistoryMode();
- allHistory.clear();
- if (history == null) {
- return;
- }
- allHistory.addAll(asList(history.split("\n")));
- }
-
- public String getHistory() {
- StringBuilder buffer = new StringBuilder();
- boolean separate = false;
- for (String line : allHistory) {
- if (line.length() > 0) {
- if (separate) {
- buffer.append("\n");
- } else {
- separate = true;
- }
- buffer.append(line);
- }
- }
- return buffer.toString();
- }
-
- /**
- * Moves a line of text in history.
- * @param lineToBeMoved the line of text to be moved.
- * @param count (+1 or -1) for forward and backward movement (-1 goes back.)
- * @return the new string to be displayed in the command line or {@code null}, if the limit is reached.
- */
- public String move(String lineToBeMoved, int count) {
- if (!inHistoryMode()) {
- editedHistory = new ArrayList<String>(allHistory.size() + 1);
- editedHistory.add(lineToBeMoved);
- editedHistory.addAll(allHistory);
- editHistoryPosition = 0;
- }
- editedHistory.set(editHistoryPosition, lineToBeMoved);
- if (editHistoryPosition + count >= editedHistory.size()) {
- return null;
- }
- if (editHistoryPosition + count < 0) {
- return null;
- }
- editHistoryPosition += count;
- return editedHistory.get(editHistoryPosition);
- }
-
- private boolean inHistoryMode() {
- return editedHistory != null;
- }
-
- /**
- * Exit the history movements and go to position 0;
- * @return the string to be shown in the command line
- */
- protected String escape() {
- if (!inHistoryMode()) {
- return null;
- }
- String line = editedHistory.get(0);
- endHistoryMode();
- return line;
- }
-
- private void endHistoryMode() {
- editedHistory = null;
- editHistoryPosition = 0;
- }
-
- @Override public void createControl(final Composite parent, final ITerminalViewControl terminal) {
- sash = new Sash(parent, SWT.HORIZONTAL);
- final GridData sashLayoutData = new GridData(SWT.FILL, SWT.CENTER, true, false);
- sashLayoutData.heightHint = 5;
- sash.setLayoutData(sashLayoutData);
- sash.addListener(SWT.Selection, new Listener() {
- @Override public void handleEvent(Event e) {
- if (e.detail == SWT.DRAG) {
- // Don't redraw during drag, it causes paint errors - bug 220971.
- return;
- }
- // No idea why this is needed.
- GridData inputFieldLayoutData = (GridData) inputField.getLayoutData();
- Rectangle sashRect = sash.getBounds();
- Rectangle containerRect = parent.getClientArea();
-
- int h = inputField.getLineHeight();
- // Make sure the input filed height is a multiple of the line height.
- inputFieldLayoutData.heightHint = Math.max(((containerRect.height - e.y - sashRect.height) / h) * h, h);
- // Do not show less then one line.
- e.y = Math.min(e.y, containerRect.height - h);
- inputField.setLayoutData(inputFieldLayoutData);
- parent.layout();
- // else the content assist icon will be replicated
- parent.redraw();
- }
- });
- inputField = new Text(parent, SWT.MULTI | SWT.BORDER | SWT.WRAP | SWT.V_SCROLL);
- GridData inputFieldLayoutData = new GridData(SWT.FILL, SWT.FILL, true, false);
- boolean installDecoration = true;
- if (installDecoration) {
- // The ContentAssistCommandAdapter says: "The client is responsible for ensuring that adequate space is reserved
- // for the decoration."
- // TODO: What is the "adequate space"?
- inputFieldLayoutData.horizontalIndent = 6;
- }
- inputField.setLayoutData(inputFieldLayoutData);
- inputField.setFont(terminal.getFont());
- // Register field assist *before* the key listener.
- // Otherwise the ENTER key is sent *first* to the input field and then to the field assist pop-up.
- // (https://bugs.eclipse.org/bugs/show_bug.cgi?id=211659)
- new ContentAssistCommandAdapter(
- inputField, new TextContentAdapter(), new FieldAssist(), null, null, installDecoration);
- inputField.addKeyListener(new KeyListener() {
- @Override public void keyPressed(KeyEvent e) {
- // If the field assist has handled the key already then ignore it.
- // (https://bugs.eclipse.org/bugs/show_bug.cgi?id=211659)
- if (!e.doit) {
- return;
- }
- if (e.keyCode == '\n' || e.keyCode == '\r') {
- e.doit = false;
- String line = inputField.getText();
- if (!terminal.pasteString(line + "\n")) {
- return;
- }
- pushLine(line);
- setCommand("");
- }
- if (e.keyCode == SWT.ARROW_UP || e.keyCode == SWT.PAGE_UP) {
- e.doit = false;
- setCommand(move(inputField.getText(), 1));
- }
- if (e.keyCode == SWT.ARROW_DOWN || e.keyCode == SWT.PAGE_DOWN) {
- e.doit = false;
- setCommand(move(inputField.getText(), -1));
- }
- if (e.keyCode == SWT.ESC) {
- e.doit = false;
- setCommand(escape());
- }
- }
-
- private void setCommand(String line) {
- if (line == null) {
- return;
- }
- inputField.setText(line);
- inputField.setSelection(inputField.getCharCount());
- }
-
- @Override public void keyReleased(KeyEvent e) {
- }
- });
- }
-
- @Override public void setFont(Font font) {
- inputField.setFont(font);
- inputField.getParent().layout(true);
- }
-
- @Override public void dispose() {
- sash.dispose();
- sash = null;
- inputField.dispose();
- inputField = null;
- }
-
- private class FieldAssist implements IContentProposalProvider {
- @Override public IContentProposal[] getProposals(String contents, int position) {
- String prefix = contents.substring(0, position);
- List<IContentProposal> result = new ArrayList<IContentProposal>();
- Collection<String> seen = new HashSet<String>();
- for (String history : allHistory) {
- if (history.startsWith(prefix) && !seen.contains(history)) {
- // The content is the rest of the history item.
- String content = history.substring(prefix.length());
- result.add(new Proposal(content, history));
- // Don't add this proposal again.
- seen.add(history);
- }
- }
- return result.toArray(new IContentProposal[result.size()]);
- }
- }
-
- private static class Proposal implements IContentProposal {
- private final String content;
- private final String label;
-
- Proposal(String content, String label) {
- this.content = content;
- this.label = label;
- }
-
- @Override public String getContent() {
- return content;
- }
-
- @Override public int getCursorPosition() {
- return content.length();
- }
-
- @Override public String getDescription() {
- return null;
- }
-
- @Override public String getLabel() {
- return label;
- }
- }
-}
\ No newline at end of file
diff --git a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/control/ICommandInputField.java b/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/control/ICommandInputField.java
deleted file mode 100644
index 8b9dd2a..0000000
--- a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/control/ICommandInputField.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007 Wind River Systems, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *******************************************************************************/
-package com.google.eclipse.tm.internal.terminal.control;
-
-import org.eclipse.swt.graphics.Font;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- * Interface to create a command input control.
- */
-public interface ICommandInputField {
- void createControl(Composite parent, ITerminalViewControl terminal);
-
- void dispose();
-
- /**
- * Sets the font of a control created with {@link #createControl(Composite, ITerminalViewControl)}.
- * @param font the new text font.
- */
- void setFont(Font font);
-}
\ No newline at end of file
diff --git a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/control/ITerminalListener.java b/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/control/ITerminalListener.java
deleted file mode 100644
index b7817ca..0000000
--- a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/control/ITerminalListener.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006, 2007 Wind River Systems, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *******************************************************************************/
-package com.google.eclipse.tm.internal.terminal.control;
-
-import com.google.eclipse.tm.internal.terminal.provisional.api.TerminalState;
-
-/**
- * Provided by a view implementation.
- */
-public interface ITerminalListener {
- /**
- * Called when the state of the connection has changed.
- * @param state the state of the connection.
- */
- void setState(TerminalState state);
-
- /**
- * Set the title of the terminal.
- * @param title the new title.
- */
- void setTerminalTitle(String title);
-}
diff --git a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/control/ITerminalViewControl.java b/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/control/ITerminalViewControl.java
deleted file mode 100644
index 5f4f68f..0000000
--- a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/control/ITerminalViewControl.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006, 2008 Wind River Systems, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- ******************************************************************************/
-package com.google.eclipse.tm.internal.terminal.control;
-
-import java.io.UnsupportedEncodingException;
-
-import org.eclipse.swt.dnd.Clipboard;
-import org.eclipse.swt.graphics.Font;
-import org.eclipse.swt.widgets.Control;
-
-import com.google.eclipse.tm.internal.terminal.provisional.api.*;
-
-public interface ITerminalViewControl {
- void setEncoding(String encoding) throws UnsupportedEncodingException;
-
- String getEncoding();
-
- boolean isEmpty();
-
- void setFont(Font font);
-
- void setInvertedColors(boolean invert);
-
- Font getFont();
-
- Control getControl();
-
- Control getRootControl();
-
- boolean isDisposed();
-
- void selectAll();
-
- void clearTerminal();
-
- void copy();
-
- void paste();
-
- String getSelection();
-
- TerminalState getState();
-
- Clipboard getClipboard();
-
- void connectTerminal();
-
- void disconnectTerminal();
-
- void disposeTerminal();
-
- boolean isConnected();
-
- String getSettingsSummary();
-
- boolean setFocus();
-
- ITerminalConnector getTerminalConnector();
-
- void setConnector(ITerminalConnector connector);
-
- ITerminalConnector[] getConnectors();
-
- void sendKey(char arg0);
-
- public boolean pasteString(String string);
-
- void setCommandInputField(ICommandInputField inputField);
-
- ICommandInputField getCommandInputField();
-
- public int getBufferLineLimit();
-
- public void setBufferLineLimit(int bufferLineLimit);
-
- boolean isScrollLockOn();
-
- void setScrollLockOn(boolean on);
-}
diff --git a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/control/actions/AbstractTerminalAction.java b/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/control/actions/AbstractTerminalAction.java
deleted file mode 100644
index 289b768..0000000
--- a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/control/actions/AbstractTerminalAction.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 2008 Wind River Systems, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *******************************************************************************/
-package com.google.eclipse.tm.internal.terminal.control.actions;
-
-import org.eclipse.jface.action.Action;
-import org.eclipse.jface.resource.*;
-
-import com.google.eclipse.tm.internal.terminal.control.ITerminalViewControl;
-import com.google.eclipse.tm.internal.terminal.control.impl.TerminalPlugin;
-
-public abstract class AbstractTerminalAction extends Action {
- private final ITerminalViewControl target;
-
- public AbstractTerminalAction(String id) {
- this(null, id, 0);
- }
-
- public AbstractTerminalAction(ITerminalViewControl target, String id) {
- this(target, id, 0);
- }
-
- public AbstractTerminalAction(ITerminalViewControl target, String id, int style) {
- super("", style);
- this.target = target;
- setId(id);
- }
-
- @Override public abstract void run();
-
- protected void setUpAction(
- String text, String toolTip, String image, String enabledImage, String disabledImage, boolean enabled) {
- setUpAction(
- text, toolTip, image, enabledImage, disabledImage, enabled, TerminalPlugin.getDefault().getImageRegistry());
- }
-
- protected void setUpAction(
- String text, String toolTip, String hoverImage, String enabledImage, String disabledImage, boolean enabled,
- ImageRegistry imageRegistry) {
- setUpAction(
- text, toolTip, imageRegistry.getDescriptor(hoverImage), imageRegistry.getDescriptor(enabledImage),
- imageRegistry.getDescriptor(disabledImage), enabled);
- }
-
- protected void setUpAction(
- String text, String toolTip, ImageDescriptor hoverImage, ImageDescriptor enabledImage,
- ImageDescriptor disabledImage, boolean enabled) {
- setText(text);
- setToolTipText(toolTip);
- setEnabled(enabled);
- if (enabledImage != null) {
- setImageDescriptor(enabledImage);
- }
- if (disabledImage != null) {
- setDisabledImageDescriptor(disabledImage);
- }
- if (hoverImage != null) {
- setHoverImageDescriptor(hoverImage);
- }
- }
-
- /**
- * Returns the terminal instance on which the action should operate.
- *
- * @return the terminal instance on which the action should operate.
- */
- protected ITerminalViewControl getTarget() {
- return target;
- }
-
- /**
- * Subclasses can update their action.
- *
- * @param aboutToShow {@code true} before the menu is shown, {@code false} when the menu gets hidden.
- */
- public void updateAction(boolean aboutToShow) {}
-}
diff --git a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/control/actions/ActionMessages.java b/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/control/actions/ActionMessages.java
deleted file mode 100644
index 066af2b..0000000
--- a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/control/actions/ActionMessages.java
+++ /dev/null
@@ -1,23 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 2008 Wind River Systems, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *******************************************************************************/
-package com.google.eclipse.tm.internal.terminal.control.actions;
-
-import org.eclipse.osgi.util.NLS;
-
-public class ActionMessages extends NLS {
- public static String copy;
- public static String cut;
- public static String paste;
- public static String selectAll;
- public static String clearAll;
-
- static {
- Class<?> clazz = ActionMessages.class;
- NLS.initializeMessages(clazz.getName(), clazz);
- }
-}
diff --git a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/control/actions/ActionMessages.properties b/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/control/actions/ActionMessages.properties
deleted file mode 100644
index 881315b..0000000
--- a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/control/actions/ActionMessages.properties
+++ /dev/null
@@ -1,15 +0,0 @@
-###############################################################################
-# Copyright (c) 2003, 2009 Wind River Systems, Inc. and others.
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-###############################################################################
-
-# NLS_MESSAGEFORMAT_NONE
-
-copy = Copy
-cut = Cut
-paste = Paste
-selectAll = Select All
-clearAll = Clear Terminal
diff --git a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/control/actions/Images.java b/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/control/actions/Images.java
deleted file mode 100644
index 68c1b8e..0000000
--- a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/control/actions/Images.java
+++ /dev/null
@@ -1,18 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 2008 Wind River Systems, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *******************************************************************************/
-package com.google.eclipse.tm.internal.terminal.control.actions;
-
-public interface Images {
- String IMAGE_DIR_ROOT = "icons/";
- String IMAGE_DIR_LOCALTOOL = IMAGE_DIR_ROOT + "clcl16/";
- String IMAGE_DIR_DLCL = IMAGE_DIR_ROOT + "dlcl16/";
- String IMAGE_DIR_ELCL = IMAGE_DIR_ROOT + "elcl16/";
- String IMAGE_CLCL_CLEAR_ALL = "ImageClclClearAll";
- String IMAGE_DLCL_CLEAR_ALL = "ImageDlclClearAll";
- String IMAGE_ELCL_CLEAR_ALL = "ImageElclClearAll";
-}
diff --git a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/control/actions/TerminalActionClearAll.java b/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/control/actions/TerminalActionClearAll.java
deleted file mode 100644
index 652b5c4..0000000
--- a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/control/actions/TerminalActionClearAll.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 2009 Wind River Systems, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- ********************************************************************************/
-package com.google.eclipse.tm.internal.terminal.control.actions;
-
-import static com.google.eclipse.tm.internal.terminal.control.actions.ActionMessages.clearAll;
-import static com.google.eclipse.tm.internal.terminal.control.actions.Images.*;
-
-import com.google.eclipse.tm.internal.terminal.control.ITerminalViewControl;
-
-public class TerminalActionClearAll extends AbstractTerminalAction {
- public TerminalActionClearAll() {
- super(TerminalActionClearAll.class.getName());
- setupAction();
- }
-
- public TerminalActionClearAll(ITerminalViewControl target) {
- super(target, TerminalActionClearAll.class.getName());
- setupAction();
- }
-
- private void setupAction() {
- setUpAction(clearAll, clearAll, IMAGE_CLCL_CLEAR_ALL, IMAGE_ELCL_CLEAR_ALL, IMAGE_DLCL_CLEAR_ALL, false);
- }
-
- @Override public void run() {
- ITerminalViewControl target = getTarget();
- if (target != null) {
- target.clearTerminal();
- }
- }
-
- @Override public void updateAction(boolean aboutToShow) {
- ITerminalViewControl target = getTarget();
- setEnabled(target != null && !target.isEmpty());
- }
-}
diff --git a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/control/actions/TerminalActionCopy.java b/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/control/actions/TerminalActionCopy.java
deleted file mode 100644
index 575487e..0000000
--- a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/control/actions/TerminalActionCopy.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 2009 Wind River Systems, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *******************************************************************************/
-package com.google.eclipse.tm.internal.terminal.control.actions;
-
-import static org.eclipse.ui.ISharedImages.*;
-
-import static com.google.eclipse.tm.internal.terminal.control.actions.ActionMessages.copy;
-
-import org.eclipse.ui.*;
-
-import com.google.eclipse.tm.internal.terminal.control.ITerminalViewControl;
-
-public class TerminalActionCopy extends AbstractTerminalAction {
- public TerminalActionCopy() {
- super(TerminalActionCopy.class.getName());
- setUpAction();
- }
-
- public TerminalActionCopy(ITerminalViewControl target) {
- super(target, TerminalActionCopy.class.getName());
- setUpAction();
- }
-
- private void setUpAction() {
- ISharedImages shared = PlatformUI.getWorkbench().getSharedImages();
- setUpAction(
- copy, copy, shared.getImageDescriptor(IMG_TOOL_COPY), shared.getImageDescriptor(IMG_TOOL_COPY),
- shared.getImageDescriptor(IMG_TOOL_COPY_DISABLED), true);
- }
-
- @Override public void run() {
- ITerminalViewControl target = getTarget();
- if (target != null) {
- String selection = target.getSelection();
- if (!selection.isEmpty()) {
- target.copy();
- } else {
- target.sendKey('\u0003');
- }
- }
- }
-
- @Override public void updateAction(boolean aboutToShow) {
- ITerminalViewControl target = getTarget();
- boolean enabled = target != null;
- if (aboutToShow && enabled) {
- enabled = target.getSelection().length() > 0;
- }
- setEnabled(enabled);
- }
-}
diff --git a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/control/actions/TerminalActionCut.java b/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/control/actions/TerminalActionCut.java
deleted file mode 100644
index 37ed070..0000000
--- a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/control/actions/TerminalActionCut.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 2009 Wind River Systems, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *******************************************************************************/
-package com.google.eclipse.tm.internal.terminal.control.actions;
-
-import static org.eclipse.ui.ISharedImages.*;
-
-import static com.google.eclipse.tm.internal.terminal.control.actions.ActionMessages.cut;
-
-import org.eclipse.ui.*;
-
-import com.google.eclipse.tm.internal.terminal.control.ITerminalViewControl;
-
-public class TerminalActionCut extends AbstractTerminalAction {
- public TerminalActionCut() {
- super(TerminalActionCut.class.getName());
- setUpAction();
- }
-
- public TerminalActionCut(ITerminalViewControl target) {
- super(target, TerminalActionCut.class.getName());
- setUpAction();
- }
-
- private void setUpAction() {
- ISharedImages shared = PlatformUI.getWorkbench().getSharedImages();
- setUpAction(
- cut, cut, shared.getImageDescriptor(IMG_TOOL_CUT), shared.getImageDescriptor(IMG_TOOL_CUT),
- shared.getImageDescriptor(IMG_TOOL_CUT_DISABLED), true);
- }
-
- @Override public void run() {
- ITerminalViewControl target = getTarget();
- if (target != null) {
- target.sendKey('\u0018');
- }
- }
-
- @Override public void updateAction(boolean aboutToShow) {
- // Cut is always disabled
- setEnabled(false);
- }
-}
diff --git a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/control/actions/TerminalActionPaste.java b/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/control/actions/TerminalActionPaste.java
deleted file mode 100644
index 057c79c..0000000
--- a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/control/actions/TerminalActionPaste.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 2010 Wind River Systems, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Initial Contributors:
- * The following Wind River employees contributed to the Terminal component
- * that contains this file: Chris Thew, Fran Litterio, Stephen Lamb,
- * Helmut Haigermoser and Ted Williams.
- *
- * Contributors:
- * Michael Scharf (Wind River) - split into core, view and connector plugins
- * Martin Oberhuber (Wind River) - fixed copyright headers and beautified
- * Anna Dushistova (MontaVista) - [227537] moved actions from terminal.view to terminal plugin
- * Uwe Stieber (Wind River) - [260372] [terminal] Certain terminal actions are enabled if no target terminal control is available
- * Uwe Stieber (Wind River) - [294719] [terminal] SWT Widget disposed in TerminalActionPaste
- * Martin Oberhuber (Wind River) - [296212] Cannot paste text into terminal on some Linux hosts
- *******************************************************************************/
-package com.google.eclipse.tm.internal.terminal.control.actions;
-
-import static org.eclipse.ui.ISharedImages.*;
-
-import static com.google.eclipse.tm.internal.terminal.control.actions.ActionMessages.paste;
-import static com.google.eclipse.tm.internal.terminal.provisional.api.TerminalState.CONNECTED;
-
-import org.eclipse.swt.dnd.TextTransfer;
-import org.eclipse.ui.*;
-
-import com.google.eclipse.tm.internal.terminal.control.ITerminalViewControl;
-
-public class TerminalActionPaste extends AbstractTerminalAction {
- public TerminalActionPaste() {
- super(TerminalActionPaste.class.getName());
- setUpAction();
- }
-
- public TerminalActionPaste(ITerminalViewControl target) {
- super(target, TerminalActionPaste.class.getName());
- setUpAction();
- }
-
- private void setUpAction() {
- ISharedImages shared = PlatformUI.getWorkbench().getSharedImages();
- setUpAction(
- paste, paste, shared.getImageDescriptor(IMG_TOOL_PASTE), shared.getImageDescriptor(IMG_TOOL_PASTE_DISABLED),
- shared.getImageDescriptor(IMG_TOOL_PASTE), false);
- }
-
- @Override public void run() {
- ITerminalViewControl target = getTarget();
- if (target != null) {
- target.paste();
- }
- }
-
- @Override public void updateAction(boolean aboutToShow) {
- ITerminalViewControl target = getTarget();
- boolean enabled = target != null && target.getClipboard() != null && !target.getClipboard().isDisposed();
- if (enabled) {
- String text = (String) target.getClipboard().getContents(TextTransfer.getInstance());
- enabled = text != null && !text.isEmpty() && target.getState() == CONNECTED;
- }
- setEnabled(enabled);
- }
-}
diff --git a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/control/actions/TerminalActionSelectAll.java b/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/control/actions/TerminalActionSelectAll.java
deleted file mode 100644
index 468eabe..0000000
--- a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/control/actions/TerminalActionSelectAll.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 2009 Wind River Systems, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *******************************************************************************/
-package com.google.eclipse.tm.internal.terminal.control.actions;
-
-import static com.google.eclipse.tm.internal.terminal.control.actions.ActionMessages.selectAll;
-
-import org.eclipse.jface.resource.ImageDescriptor;
-
-import com.google.eclipse.tm.internal.terminal.control.ITerminalViewControl;
-
-public class TerminalActionSelectAll extends AbstractTerminalAction {
- public TerminalActionSelectAll() {
- super(TerminalActionSelectAll.class.getName());
- setUpAction();
- }
-
- public TerminalActionSelectAll(ITerminalViewControl target) {
- super(target, TerminalActionSelectAll.class.getName());
- setUpAction();
- }
-
- private void setUpAction() {
- setUpAction(selectAll, selectAll, (ImageDescriptor) null, null, null, false);
- }
-
- @Override public void run() {
- ITerminalViewControl target = getTarget();
- if (target != null) {
- target.selectAll();
- }
- }
-
- @Override public void updateAction(boolean aboutToShow) {
- ITerminalViewControl target = getTarget();
- setEnabled(target != null && !target.isEmpty());
- }
-}
diff --git a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/control/impl/ITerminalControlForText.java b/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/control/impl/ITerminalControlForText.java
deleted file mode 100644
index 53ede0a..0000000
--- a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/control/impl/ITerminalControlForText.java
+++ /dev/null
@@ -1,25 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006, 2008 Wind River Systems, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *******************************************************************************/
-package com.google.eclipse.tm.internal.terminal.control.impl;
-
-import java.io.OutputStream;
-
-import com.google.eclipse.tm.internal.terminal.provisional.api.*;
-
-public interface ITerminalControlForText {
-
- TerminalState getState();
-
- void setState(TerminalState state);
-
- void setTerminalTitle(String title);
-
- ITerminalConnector getTerminalConnector();
-
- OutputStream getOutputStream();
-}
diff --git a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/control/impl/TerminalInputStream.java b/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/control/impl/TerminalInputStream.java
deleted file mode 100644
index 42765f2..0000000
--- a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/control/impl/TerminalInputStream.java
+++ /dev/null
@@ -1,232 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 1996, 2008 Wind River Systems, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Michael Scharf (Wind River)
- * Douglas Lea (Addison Wesley) - [cq:1552] BoundedBufferWithStateTracking adapted to BoundedByteBuffer
- *******************************************************************************/
-
-package com.google.eclipse.tm.internal.terminal.control.impl;
-
-import java.io.*;
-import java.util.*;
-
-import org.eclipse.swt.widgets.Display;
-
-import com.google.eclipse.tm.internal.terminal.util.BoundedByteBuffer;
-
-/**
- * The main purpose of this class is to start a {@code Runnable} in the display thread when data is available and to
- * pretend no data is available after a given amount of time the {@code Runnable} is running.
- */
-public class TerminalInputStream extends InputStream {
- // The maximum time in milliseconds the 'notifyChange' runs until 'ready()' returns false.
- private final int uiTimeout;
-
- // The output stream used by the terminal backend to write to the terminal.
- protected final OutputStream outputStream;
-
- // This runnable is called every time some characters are available from.
- private final Runnable notifyChange;
-
- // A shared timer for all terminals. This times is used to limit the time used in the display thread.
- static Timer timer = new Timer(false);
-
- // A blocking byte queue.
- private final BoundedByteBuffer queue;
-
- // The maximum amount of data read and written in one shot. The timer cannot interrupt reading this amount of data.
- // This is used as optimization, because reading single characters can be very inefficient, because each call is
- // synchronized.
- // Block size must be smaller than the Queue capacity!
- final int BLOCK_SIZE = 64;
-
- // The runnable that is scheduled in the display tread. Takes care of the timeout management. It calls the
- // 'notifyChange'.
- // Synchronized with 'queue'.
- private Runnable runnable;
-
- // Used as flag to indicate that the current runnable has used enough time in the display thread. This variable is set
- // by a timer thread after the Runnable starts to run in the Display thread after 'uiTimeout'.
- // Synchronized with 'queue'.
- private boolean enoughDisplayTime;
-
- /**
- * Constructor.
- *
- * @param bufferSize the size of the buffer of the output stream
- * @param uiTimeout the maximum time the {@code notifyChange} {@code Runnable} runs. It will be rescheduled after
- * {@code uiTimeout} if input data is still available.
- * @param notifyChange a {@code Runnable} that is posted to the display thread via {@link Display#asyncExec}. The
- * {@code Runnable} is posted several times!
- */
- public TerminalInputStream(int bufferSize, int uiTimeout, Runnable notifyChange) {
- outputStream = new TerminalOutputStream();
- this.notifyChange = notifyChange;
- int capacity = bufferSize;
- if (capacity < BLOCK_SIZE) {
- capacity = 2 * BLOCK_SIZE;
- }
- queue = new BoundedByteBuffer(capacity);
- this.uiTimeout = uiTimeout;
- }
-
- /**
- * Posts the {@code Runnable} {@link #notifyChange} to the display thread, unless the {@code Runnable} is already
- * scheduled. It will make {@link #ready} return {@code false} after {@link #uiTimeout} milliseconds.
- */
- void bytesAreAvailable() {
- // synchronize on the queue to reduce the locks
- synchronized (queue) {
- if (runnable == null) {
- runnable = new Runnable() {
- @Override public void run() {
- synchronized (queue) {
- runnable = null;
- }
- startTimer(uiTimeout);
- notifyChange.run();
- }
- };
- // TODO: Make sure we don't create a display if the display is disposed.
- Display.getDefault().asyncExec(runnable);
- }
- }
- }
-
- /**
- * Starts a timer that sets {@link #enoughDisplayTime} to {@code true} after the given milliseconds.
- *
- * @param milliseconds the time after which {@code enoughDisplayTime} is set to {@code true}.
- */
- void startTimer(int milliseconds) {
- synchronized (queue) {
- enoughDisplayTime = false;
- }
- timer.schedule(new TimerTask() {
- @Override public void run() {
- synchronized (queue) {
- enoughDisplayTime = true;
- // there is some data available
- if (queue.size() > 0) {
- // schedule a new runnable to do the work
- bytesAreAvailable();
- }
- }
- }
- }, milliseconds);
- }
-
- /**
- * Returns the output stream used by the back-end to write to the terminal.
- *
- * @return the output stream used by the back-end to write to the terminal.
- */
- public OutputStream getOutputStream() {
- return outputStream;
- }
-
- /**
- * Indicate whether a character is available for the terminal to show. Must be called in the display thread.
- * @return {@code true} if a character is available for the terminal to show, {@code false} otherwise.
- */
- @Override public int available() {
- int available;
- synchronized (queue) {
- if (enoughDisplayTime) {
- return 0;
- }
- available = queue.size();
- }
- // Limit the available amount of data. Otherwise our trick of limiting the time spend reading might not work.
- if (available > BLOCK_SIZE) {
- available = BLOCK_SIZE;
- }
- return available;
- }
-
- /**
- * Returns the next available byte. Checks with {@link #available} if characters are available.
- *
- * @return the next available byte.
- */
- @Override public int read() throws IOException {
- try {
- return queue.read();
- } catch (InterruptedException e) {
- Thread.currentThread().interrupt();
- return -1;
- }
- }
-
- /**
- * Closing a {@code ByteArrayInputStream} has no effect. The methods in this class can be called after the stream has
- * been closed without generating an {@code IOException}.
- */
- @Override public void close() {}
-
- @Override public int read(byte[] b, int off, int len) throws IOException {
- int n = 0;
- // Read as much as we can using a single synchronized statement.
- synchronized (queue) {
- try {
- // Make sure that not more than BLOCK_SIZE is read in one call.
- while (queue.size() > 0 && n < len && n < BLOCK_SIZE) {
- b[off + n] = queue.read();
- n++;
- }
- } catch (InterruptedException e) {
- Thread.currentThread().interrupt();
- }
- }
- return n;
- }
-
- /**
- * An output stream that calls {@link TerminalInputStream#textAvailable} every time data is written to the stream. The
- * data is written to {@link TerminalInputStream#queue}.
- *
- */
- class TerminalOutputStream extends OutputStream {
- @Override public void write(byte[] b, int off, int len) throws IOException {
- try {
- // optimization to avoid many synchronized sections: put the data in junks into the queue.
- int newOff = off;
- int end = off + len;
- while (newOff < end) {
- int n = newOff + BLOCK_SIZE;
- if (n > end) {
- n = end;
- }
- // now block the queue for the time we need to
- // add some characters
- synchronized (queue) {
- for (int i = newOff; i < n; i++) {
- queue.write(b[i]);
- }
- bytesAreAvailable();
- }
- newOff += BLOCK_SIZE;
- }
- } catch (InterruptedException e) {
- Thread.currentThread().interrupt();
- }
- }
-
- @Override public void write(int b) throws IOException {
- try {
- // A kind of optimization, because both calls use the queue lock.
- synchronized (queue) {
- queue.write((byte) b);
- bytesAreAvailable();
- }
- } catch (InterruptedException e) {
- Thread.currentThread().interrupt();
- }
- }
- }
-}
diff --git a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/control/impl/TerminalMessages.java b/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/control/impl/TerminalMessages.java
deleted file mode 100644
index 3856d90..0000000
--- a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/control/impl/TerminalMessages.java
+++ /dev/null
@@ -1,23 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006, 2008 Wind River Systems, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *******************************************************************************/
-package com.google.eclipse.tm.internal.terminal.control.impl;
-
-import org.eclipse.osgi.util.NLS;
-
-public class TerminalMessages extends NLS {
- public static String terminalError;
- public static String socketError;
- public static String ioError;
- public static String cannotConnectTo;
- public static String notInitialized;
-
- static {
- Class<?> clazz = TerminalMessages.class;
- NLS.initializeMessages(clazz.getName(), clazz);
- }
-}
diff --git a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/control/impl/TerminalMessages.properties b/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/control/impl/TerminalMessages.properties
deleted file mode 100644
index 1fecdb3..0000000
--- a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/control/impl/TerminalMessages.properties
+++ /dev/null
@@ -1,15 +0,0 @@
-###############################################################################
-# Copyright (c) 2003, 2009 Wind River Systems, Inc. and others.
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-###############################################################################
-
-# NLS_MESSAGEFORMAT_VAR
-
-terminalError = Terminal Error
-socketError = Socket Error
-ioError = IO Error
-cannotConnectTo = Cannot initialize {0}:\n{1}
-notInitialized = Not Initialized
diff --git a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/control/impl/TerminalPlugin.java b/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/control/impl/TerminalPlugin.java
deleted file mode 100644
index d1470ea..0000000
--- a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/control/impl/TerminalPlugin.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 2008 Wind River Systems, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *******************************************************************************/
-package com.google.eclipse.tm.internal.terminal.control.impl;
-
-import static org.eclipse.core.runtime.IStatus.ERROR;
-
-import static com.google.eclipse.tm.internal.terminal.control.actions.Images.*;
-
-import java.net.*;
-
-import org.eclipse.core.runtime.*;
-import org.eclipse.jface.resource.*;
-import org.eclipse.ui.plugin.AbstractUIPlugin;
-
-public class TerminalPlugin extends AbstractUIPlugin {
- public static final String PLUGIN_ID = "org.eclipse.tm.terminal";
- public static final String HELP_VIEW = PLUGIN_ID + ".terminal_view";
-
- protected static TerminalPlugin plugin;
-
- public TerminalPlugin() {
- plugin = this;
- }
-
- public static TerminalPlugin getDefault() {
- return plugin;
- }
-
- public static boolean isOptionEnabled(String option) {
- String enabled = Platform.getDebugOption(option);
- if (enabled == null) {
- return false;
- }
- return Boolean.parseBoolean(enabled);
- }
-
- @Override protected void initializeImageRegistry(ImageRegistry imageRegistry) {
- try {
- // Local tool-bars
- putImageInRegistry(imageRegistry, IMAGE_CLCL_CLEAR_ALL, IMAGE_DIR_LOCALTOOL + "clear_co.gif");
- // Enabled local tool-bars
- putImageInRegistry(imageRegistry, IMAGE_ELCL_CLEAR_ALL, IMAGE_DIR_ELCL + "clear_co.gif");
- // Disabled local tool-bars
- putImageInRegistry(imageRegistry, IMAGE_DLCL_CLEAR_ALL, IMAGE_DIR_DLCL + "clear_co.gif");
- } catch (MalformedURLException malformedURLException) {
- malformedURLException.printStackTrace();
- }
- }
-
- protected void putImageInRegistry(
- ImageRegistry imageRegistry, String strKey, String relativePath) throws MalformedURLException {
- URL url = TerminalPlugin.getDefault().getBundle().getEntry(relativePath);
- ImageDescriptor imageDescriptor = ImageDescriptor.createFromURL(url);
- imageRegistry.put(strKey, imageDescriptor);
- }
-
- public static void log(String message, Exception error) {
- getDefault().getLog().log(new Status(ERROR, PLUGIN_ID, message, error));
- }
-}
diff --git a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/emulator/EditActionAccelerators.java b/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/emulator/EditActionAccelerators.java
deleted file mode 100644
index 7567292..0000000
--- a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/emulator/EditActionAccelerators.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Copyright (c) 2012 Google Inc.
- *
- * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
- * Public License v1.0 which accompanies this distribution, and is available at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- */
-package com.google.eclipse.tm.internal.terminal.emulator;
-
-import static org.eclipse.jface.bindings.keys.SWTKeySupport.convertKeyStrokeToAccelerator;
-
-import java.util.*;
-
-import org.eclipse.jface.bindings.TriggerSequence;
-import org.eclipse.jface.bindings.keys.*;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.keys.IBindingService;
-
-/**
- * @author alruiz@google.com (Alex Ruiz)
- */
-class EditActionAccelerators {
- private static final String COPY_COMMAND_ID = "com.google.eclipse.terminal.local.copy";
- private static final String PASTE_COMMAND_ID = "com.google.eclipse.terminal.local.paste";
-
- private final Map<Integer, String> commandIdsByAccelerator = new HashMap<Integer, String>();
-
- private void load() {
- addAccelerator(COPY_COMMAND_ID);
- addAccelerator(PASTE_COMMAND_ID);
- }
-
- private void addAccelerator(String commandId) {
- KeySequence keySequence = bindingFor(commandId);
- if (keySequence == null) {
- return;
- }
- KeyStroke[] keyStrokes = keySequence.getKeyStrokes();
- if (keyStrokes.length != 0) {
- int accelerator = convertKeyStrokeToAccelerator(keyStrokes[0]);
- commandIdsByAccelerator.put(new Integer(accelerator), commandId);
- }
- }
-
- private static KeySequence bindingFor(String commandId) {
- IBindingService bindingService = bindingService();
- TriggerSequence binding = bindingService.getBestActiveBindingFor(commandId);
- if (binding instanceof KeySequence) {
- KeySequence keySequence = (KeySequence) binding;
- return keySequence;
- }
- return null;
- }
-
- private static IBindingService bindingService() {
- return (IBindingService) PlatformUI.getWorkbench().getAdapter(IBindingService.class);
- }
-
- boolean isCopyAction(int accelerator) {
- return isMatchingAction(accelerator, COPY_COMMAND_ID);
- }
-
- boolean isPasteAction(int accelerator) {
- return isMatchingAction(accelerator, PASTE_COMMAND_ID);
- }
-
- private boolean isMatchingAction(int accelerator, String commandId) {
- if (commandIdsByAccelerator.isEmpty()) {
- load();
- }
- return commandId.equals(commandIdsByAccelerator.get(new Integer(accelerator)));
- }
-}
diff --git a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/emulator/IVT100EmulatorBackend.java b/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/emulator/IVT100EmulatorBackend.java
deleted file mode 100644
index 07cfe95..0000000
--- a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/emulator/IVT100EmulatorBackend.java
+++ /dev/null
@@ -1,166 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007 Wind River Systems, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *******************************************************************************/
-package com.google.eclipse.tm.internal.terminal.emulator;
-
-import java.util.List;
-
-import org.eclipse.jface.text.hyperlink.IHyperlink;
-
-import com.google.eclipse.tm.terminal.model.Style;
-
-public interface IVT100EmulatorBackend {
- /**
- * Erases all text from the terminal view. Including the history.
- */
- void clearAll();
-
- /**
- * Sets the dimensions of the addressable scroll space of the screen. Keeps the cursor position relative to the bottom
- * of the screen.
- *
- * @param lines the number of lines.
- * @param columns the number of columns.
- */
- void setDimensions(int lines, int columns);
-
- /**
- * Makes room for N characters on the current line at the cursor position. Text under the cursor moves right
- * without wrapping at the end of the line.
- *
- * @param charactersToInsert the number of characters to insert.
- */
- void insertCharacters(int charactersToInsert);
-
- /**
- * Erases from the cursor position (inclusive) to the end of screen. The cursor does not move.
- */
- void eraseToEndOfScreen();
-
- /**
- * Erases from the beginning of screen to the cursor position (inclusive). The cursor does not move.
- */
- void eraseToCursor();
-
- /**
- * Erases the complete display. All lines are erased and changed to single-width. The cursor does not move.
- */
- void eraseAll();
-
- /**
- * Erases the complete line.
- */
- void eraseLine();
-
- /**
- * Erases from the cursor position (inclusive) to the end of line.
- */
- void eraseLineToEnd();
-
- /**
- * Erases from beginning of line to the cursor position (inclusive).
- */
- void eraseLineToCursor();
-
- /**
- * Inserts n lines at line with cursor. Lines displayed below cursor are moved down. Lines moved past the bottom
- * margin are lost. This sequence is ignored when cursor is outside scrolling region.
- *
- * @param lineCount the number of lines to insert.
- */
- void insertLines(int lineCount);
-
- /**
- * Deletes n characters, starting with the character at the cursor position. When a character is deleted, all
- * characters to the right of cursor move left. This creates a space character at right margin. This character has
- * same character attribute as the last character moved left.
- *
- * @param charCount the number of characters to delete.
- */
- void deleteCharacters(int charCount);
-
- /**
- * Deletes n lines, starting at line with cursor. As lines are deleted, the lines displayed below cursor move up.
- * The lines added to bottom of screen have spaces with the same character attributes as the last line moved up.
- * This sequence is ignored when cursor is outside scrolling region.
- *
- * @param lineCount the number of lines to delete.
- */
- void deleteLines(int lineCount);
-
- Style getDefaultStyle();
-
- void setDefaultStyle(Style defaultStyle);
-
- Style getStyle();
-
- /**
- * Sets the style to use.
- *
- * @param style the new style.
- */
- void setStyle(Style style);
-
- /**
- * Displays a subset of the newly-received text in the terminal view, wrapping text at the right edge of the screen
- * and overwriting text when the cursor is not at the very end of the screen's text.
- *
- * <p>
- * There are never any ANSI control characters or escape sequences in the text being displayed by this method (this
- * includes newlines, carriage returns, and tabs.)
- * </p>
- *
- * @param buffer the text to append.
- */
- void appendString(String buffer);
-
- /**
- * Process a newline (Control-J) character. A newline (NL) character just moves the cursor to the same column on the
- * next line, creating new lines when the cursor reaches the bottom edge of the terminal. This is counter-intuitive,
- * especially to UNIX programmers who are taught that writing a single NL to a terminal is sufficient to move the
- * cursor to the first column of the next line, as if a carriage return (CR) and a NL were written.
- *
- * <p>
- * UNIX terminals typically display a NL character as a CR followed by a NL because the terminal device typically has
- * the ONLCR attribute bit set (see the termios(4) man page for details), which causes the terminal device driver to
- * translate NL to CR + NL on output. The terminal itself (i.e., a hardware terminal or a terminal emulator, like
- * xterm or this code) _always_ interprets a CR to mean "move the cursor to the beginning of the current
- * line" and a NL to mean "move the cursor to the same column on the next line".
- * </p>
- */
- void processNewline();
-
- /**
- * Returns the relative line number of the line containing the cursor. The returned line number is relative to the
- * top-most visible line, which has relative line number 0.
- *
- * @return the relative line number of the line containing the cursor.
- */
- int getCursorLine();
-
- int getCursorColumn();
-
- /**
- * Moves the cursor to the specified line and column.
- *
- * @param targetLine is the line number of a screen line, so it has a minimum value of 0 (the topmost screen line) and
- * a maximum value of heightInLines - 1 (the bottom-most screen line). A line does not have to contain any text to
- * move the cursor to any column in that line.
- * @param targetColumn the given column.
- */
- void setCursor(int targetLine, int targetColumn);
-
- void setCursorColumn(int targetColumn);
-
- void setCursorLine(int targetLine);
-
- int getLines();
-
- int getColumns();
-
- List<IHyperlink> hyperlinksAt(int line);
-}
\ No newline at end of file
diff --git a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/emulator/LoggingOutputStream.java b/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/emulator/LoggingOutputStream.java
deleted file mode 100644
index 7ac101a..0000000
--- a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/emulator/LoggingOutputStream.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007 Wind River Systems, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *******************************************************************************/
-package com.google.eclipse.tm.internal.terminal.emulator;
-
-import java.io.*;
-
-import com.google.eclipse.tm.internal.terminal.provisional.api.Logger;
-
-public class LoggingOutputStream extends FilterOutputStream {
- public LoggingOutputStream(OutputStream out) {
- super(out);
- }
-
- @Override public void write(byte[] b, int off, int len) throws IOException {
- if (Logger.isLogEnabled()) {
- Logger.log("Received " + len + " bytes: '" + Logger.encode(new String(b, 0, len)) + "'");
- }
- if ((off | len | (b.length - (len + off)) | (off + len)) < 0) {
- throw new IndexOutOfBoundsException();
- }
- for (int i = 0; i < len; i++) {
- super.write(b[off + i]);
- }
- }
-
- @Override public void write(int b) throws IOException {
- if (Logger.isLogEnabled()) {
- Logger.log("Received " + 1 + " bytes: '" + Logger.encode(new String(new byte[] { (byte) b }, 0, 1)) + "'");
- }
- super.write(b);
- }
-}
diff --git a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/emulator/VT100BackendTraceDecorator.java b/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/emulator/VT100BackendTraceDecorator.java
deleted file mode 100644
index 44ad103..0000000
--- a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/emulator/VT100BackendTraceDecorator.java
+++ /dev/null
@@ -1,148 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007 Wind River Systems, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *******************************************************************************/
-package com.google.eclipse.tm.internal.terminal.emulator;
-
-import java.io.PrintStream;
-import java.util.List;
-
-import org.eclipse.jface.text.hyperlink.IHyperlink;
-
-import com.google.eclipse.tm.terminal.model.Style;
-
-public class VT100BackendTraceDecorator implements IVT100EmulatorBackend {
- final IVT100EmulatorBackend backend;
- final PrintStream out;
-
- public VT100BackendTraceDecorator(IVT100EmulatorBackend backend, PrintStream out) {
- this.backend = backend;
- this.out = out;
- }
-
- @Override public void appendString(String buffer) {
- out.println("appendString(\"" + buffer + "\")");
- backend.appendString(buffer);
- }
-
- @Override public void clearAll() {
- out.println("clearAll()");
- backend.clearAll();
- }
-
- @Override public void deleteCharacters(int n) {
- out.println("deleteCharacters(" + n + ")");
- backend.deleteCharacters(n);
- }
-
- @Override public void deleteLines(int n) {
- out.println("deleteLines(" + n + ")");
- backend.deleteLines(n);
- }
-
- @Override public void eraseAll() {
- out.println("eraseAll()");
- backend.eraseAll();
- }
-
- @Override public void eraseLine() {
- out.println("eraseLine()");
- backend.eraseLine();
- }
-
- @Override public void eraseLineToCursor() {
- out.println("eraseLineToCursor()");
- backend.eraseLineToCursor();
- }
-
- @Override public void eraseLineToEnd() {
- out.println("eraseLineToEnd()");
- backend.eraseLineToEnd();
- }
-
- @Override public void eraseToCursor() {
- out.println("eraseToCursor()");
- backend.eraseToCursor();
- }
-
- @Override public void eraseToEndOfScreen() {
- out.println("eraseToEndOfScreen()");
- backend.eraseToEndOfScreen();
- }
-
- @Override public int getColumns() {
- return backend.getColumns();
- }
-
- @Override public int getCursorColumn() {
- return backend.getCursorColumn();
- }
-
- @Override public int getCursorLine() {
- return backend.getCursorLine();
- }
-
- @Override public Style getDefaultStyle() {
- return backend.getDefaultStyle();
- }
-
- @Override public int getLines() {
- return backend.getLines();
- }
-
- @Override public Style getStyle() {
- return backend.getStyle();
- }
-
- @Override public void insertCharacters(int charactersToInsert) {
- out.println("insertCharacters(" + charactersToInsert + ")");
- backend.insertCharacters(charactersToInsert);
- }
-
- @Override public void insertLines(int n) {
- out.println("insertLines(" + n + ")");
- backend.insertLines(n);
- }
-
- @Override public void processNewline() {
- out.println("processNewline()");
- backend.processNewline();
- }
-
- @Override public void setCursor(int targetLine, int targetColumn) {
- out.println("setCursor(" + targetLine + ", " + targetColumn + ")");
- backend.setCursor(targetLine, targetColumn);
- }
-
- @Override public void setCursorColumn(int targetColumn) {
- out.println("setCursorColumn(" + targetColumn + ")");
- backend.setCursorColumn(targetColumn);
- }
-
- @Override public void setCursorLine(int targetLine) {
- out.println("setCursorLine(" + targetLine + ")");
- backend.setCursorLine(targetLine);
- }
-
- @Override public void setDefaultStyle(Style defaultStyle) {
- out.println("setDefaultStyle(" + defaultStyle + ")");
- backend.setDefaultStyle(defaultStyle);
- }
-
- @Override public void setDimensions(int lines, int cols) {
- out.println("setDimensions(" + lines + "," + cols + ")");
- backend.setDimensions(lines, cols);
- }
-
- @Override public void setStyle(Style style) {
- out.println("setStyle(" + style + ")");
- backend.setStyle(style);
- }
-
- @Override public List<IHyperlink> hyperlinksAt(int line) {
- return backend.hyperlinksAt(line);
- }
-}
diff --git a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/emulator/VT100Emulator.java b/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/emulator/VT100Emulator.java
deleted file mode 100644
index 305f337..0000000
--- a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/emulator/VT100Emulator.java
+++ /dev/null
@@ -1,834 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 2011 Wind River Systems, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *******************************************************************************/
-package com.google.eclipse.tm.internal.terminal.emulator;
-
-import java.io.*;
-import java.util.List;
-
-import org.eclipse.jface.text.hyperlink.IHyperlink;
-import org.eclipse.swt.events.*;
-
-import com.google.eclipse.tm.internal.terminal.control.impl.*;
-import com.google.eclipse.tm.internal.terminal.provisional.api.*;
-import com.google.eclipse.tm.terminal.model.*;
-
-/**
- * This class processes character data received from the remote host and displays it to the user using the Terminal
- * view's StyledText widget. This class processes ANSI control characters, including NUL, backspace, carriage return,
- * line-feed, and a subset of ANSI escape sequences sufficient to allow use of screen-oriented applications, such as vi,
- * Emacs, and any GNU readline-enabled application (bash, bc, ncftp, etc.).
- * <p>
- */
-public class VT100Emulator implements ControlListener {
- // This is a character processing state: Initial state.
- private static final int ANSISTATE_INITIAL = 0;
-
- // This is a character processing state: We've seen an escape character.
- private static final int ANSISTATE_ESCAPE = 1;
-
- // Character processing state: We've seen a '[' after an escape character. Expecting a parameter character or a
- // command character next.
- private static final int ANSISTATE_EXPECTING_PARAMETER_OR_COMMAND = 2;
-
- // Character processing state: We've seen a ']' after an escape character. We are now expecting an operating system
- // command that reprograms an intelligent terminal.
- private static final int ANSISTATE_EXPECTING_OS_COMMAND = 3;
-
- /**
- * This field holds the current state of the Finite Terminal State Automaton (FSA) that recognizes ANSI escape
- * sequences.
- *
- * @see #processNewText()
- */
- private int ansiState = ANSISTATE_INITIAL;
-
- // Holds a reference to the {@link TerminalControl} object that instantiates this class.
- private final ITerminalControlForText terminal;
-
- // Holds a reference to the StyledText widget that is used to display text to the user.
- private final IVT100EmulatorBackend text;
-
- // Holds the saved absolute line number of the cursor when processing the "ESC 7" and "ESC 8" command sequences.
- private int savedCursorLine = 0;
-
- // Holds the saved column number of the cursor when processing the "ESC 7" and "ESC 8" command sequences.
- private int savedCursorColumn = 0;
-
- // Holds an array of StringBuffer objects, each of which is one parameter from the current ANSI escape
- // sequence. For example, when parsing the escape sequence "\e[20;10H", this array holds the strings "20" and "10".
- private final StringBuffer[] parameters = new StringBuffer[16];
-
- // Holds the OS-specific command found in an escape sequence of the form "\e]...\u0007".
- private final StringBuffer ansiOsCommand = new StringBuffer(128);
-
- // Holds the index of the next unused element of the array stored in field 'parameters'.
- private int nextAnsiParameter = 0;
-
- private int nextChar = -1;
-
- private Reader reader;
-
- private boolean crAfterNewLine;
-
- /**
- * The constructor.
- */
- public VT100Emulator(ITerminalTextData data, ITerminalControlForText terminal, Reader reader) {
- super();
- this.terminal = terminal;
- for (int i = 0; i < parameters.length; ++i) {
- parameters[i] = new StringBuffer();
- }
- setInputStreamReader(reader);
- if (TerminalPlugin.isOptionEnabled("com.google.eclipse.tm.terminal/debug/log/VT100Backend")) {
- text = new VT100BackendTraceDecorator(new VT100EmulatorBackend(data), System.out);
- } else {
- text = new VT100EmulatorBackend(data);
- }
- }
-
- /**
- * Set the reader that this terminal gets its input from.
- *
- * The reader can be changed while the Terminal is running, but a change of the reader likely loses some characters
- * which have not yet been fully read. Changing the reader can be done in order to change the selected Encoding,
- * though. This is typically done when the Terminal is constructed, i.e. before it really starts operation; or, when
- * the user manually selects a different encoding and thus doesn't care about losing old characters.
- *
- * @param reader the new reader.
- */
- public void setInputStreamReader(Reader reader) {
- this.reader = reader;
- }
-
- public void setDimensions(int lines, int cols) {
- text.setDimensions(lines, cols);
- ITerminalConnector telnetConnection = getConnector();
- if (telnetConnection != null) {
- telnetConnection.setTerminalSize(text.getColumns(), text.getLines());
- }
- }
-
- public void dispose() {
- }
-
- @Override public void controlMoved(ControlEvent event) {
- }
-
- @Override public void controlResized(ControlEvent event) {
- adjustTerminalDimensions();
- }
-
- public void clearTerminal() {
- text.clearAll();
- }
-
- public void fontChanged() {
- if (text != null) {
- adjustTerminalDimensions();
- }
- }
-
- public void processText() {
- try {
- // Find the width and height of the terminal, and resize it to display an integral number of lines and columns.
- adjustTerminalDimensions();
- // Restore the caret offset, process and display the new text, then save
- // the caret offset. See the documentation for field caretOffset for
- // details.
- // ISSUE: Is this causing the scroll-to-bottom-on-output behavior?
- try {
- processNewText();
- } catch (IOException e) {
- Logger.logException(e);
- }
- } catch (RuntimeException e) {
- Logger.logException(e);
- }
- }
-
- /**
- * This method scans the newly received text, processing ANSI control characters and escape sequences and displaying
- * normal text.
- *
- * @throws IOException if something goes wrong.
- */
- private void processNewText() throws IOException {
- // Scan the newly received text.
- while (hasNextChar()) {
- char character = getNextChar();
- switch (ansiState) {
- case ANSISTATE_INITIAL:
- switch (character) {
- case '\u0000':
- break; // NUL character. Ignore it.
- case '\u0007':
- processBEL(); // BEL (Control-G)
- break;
- case '\b':
- processBackspace(); // Backspace
- break;
- case '\t':
- processTab(); // Tab.
- break;
- case '\n':
- processNewline(); // Newline (Control-J)
- if (crAfterNewLine) {
- processCarriageReturn(); // Carriage Return (Control-M)
- }
- break;
- case '\r':
- processCarriageReturn(); // Carriage Return (Control-M)
- break;
- case '\u001b':
- ansiState = ANSISTATE_ESCAPE; // Escape.
- break;
- default:
- processNonControlCharacters(character);
- break;
- }
- break;
- case ANSISTATE_ESCAPE:
- // We've seen an escape character. Here, we process the character immediately following the escape.
- switch (character) {
- case '[':
- ansiState = ANSISTATE_EXPECTING_PARAMETER_OR_COMMAND;
- nextAnsiParameter = 0;
- // Erase the parameter strings in preparation for optional parameter characters.
- for (int i = 0; i < parameters.length; ++i) {
- parameters[i].delete(0, parameters[i].length());
- }
- break;
- case ']':
- ansiState = ANSISTATE_EXPECTING_OS_COMMAND;
- ansiOsCommand.delete(0, ansiOsCommand.length());
- break;
- case '7':
- // Save cursor position and character attributes.
- ansiState = ANSISTATE_INITIAL;
- savedCursorLine = relativeCursorLine();
- savedCursorColumn = getCursorColumn();
- break;
- case '8':
- // Restore cursor and attributes to previously saved position.
- ansiState = ANSISTATE_INITIAL;
- moveCursor(savedCursorLine, savedCursorColumn);
- break;
- case 'c':
- // Reset the terminal.
- ansiState = ANSISTATE_INITIAL;
- resetTerminal();
- break;
- default:
- Logger.log("Unsupported escape sequence: escape '" + character + "'");
- ansiState = ANSISTATE_INITIAL;
- break;
- }
- break;
- case ANSISTATE_EXPECTING_PARAMETER_OR_COMMAND:
- // Parameters can appear after the '[' in an escape sequence, but they are optional.
- if (character == '@' || (character >= 'A' && character <= 'Z') || (character >= 'a' && character <= 'z')) {
- ansiState = ANSISTATE_INITIAL;
- processAnsiCommandCharacter(character);
- } else {
- processAnsiParameterCharacter(character);
- }
- break;
- case ANSISTATE_EXPECTING_OS_COMMAND:
- // A BEL (\u0007) character marks the end of the OSC sequence.
- if (character == '\u0007') {
- ansiState = ANSISTATE_INITIAL;
- processAnsiOsCommand();
- } else {
- ansiOsCommand.append(character);
- }
- break;
- default:
- // This should never happen! If it does happen, it means there is a bug in the FSA. For robustness, we return to
- // the initial state.
- Logger.log("INVALID ANSI FSA STATE: " + ansiState);
- ansiState = ANSISTATE_INITIAL;
- break;
- }
- }
- }
-
- private void resetTerminal() {
- text.eraseAll();
- text.setCursor(0, 0);
- text.setStyle(text.getDefaultStyle());
- }
-
- // This method is called when we have parsed an OS Command escape sequence. The only one we support is
- // "\e]0;...\u0007", which sets the terminal title.
- private void processAnsiOsCommand() {
- if (ansiOsCommand.charAt(0) != '0' || ansiOsCommand.charAt(1) != ';') {
- Logger.log("Ignoring unsupported ANSI OSC sequence: '" + ansiOsCommand + "'");
- return;
- }
- terminal.setTerminalTitle(ansiOsCommand.substring(2));
- }
-
- // Dispatches control to various processing methods based on the command character found in the most recently received
- // ANSI escape sequence. This method only handles command characters that follow the ANSI standard Control Sequence
- // Introducer (CSI), which is "\e[...", where "..." is an optional ';'-separated sequence of numeric parameters.
- private void processAnsiCommandCharacter(char ansiCommandCharacter) {
- // If the width or height of the terminal is ridiculously small (one line or column or less), don't even try to
- // process the escape sequence. This avoids throwing an exception (SPR 107450). The display will be messed up, but
- // what did you user expect by making the terminal so small?
- switch (ansiCommandCharacter) {
- case '@':
- // Insert character(s).
- processAnsiCommand_atsign();
- break;
- case 'A':
- // Move cursor up N lines (default 1).
- processAnsiCommand_A();
- break;
- case 'B':
- // Move cursor down N lines (default 1).
- processAnsiCommand_B();
- break;
- case 'C':
- // Move cursor forward N columns (default 1).
- processAnsiCommand_C();
- break;
- case 'D':
- // Move cursor backward N columns (default 1).
- processAnsiCommand_D();
- break;
- case 'E':
- // Move cursor to first column of Nth next line (default 1).
- processAnsiCommand_E();
- break;
- case 'F':
- // Move cursor to first column of Nth previous line (default 1).
- processAnsiCommand_F();
- break;
- case 'G':
- // Move to column N of current line (default 1).
- processAnsiCommand_G();
- break;
- case 'H':
- // Set cursor Position.
- processAnsiCommand_H();
- break;
- case 'J':
- // Erase part or all of display. Cursor does not move.
- processAnsiCommand_J();
- break;
- case 'K':
- // Erase in line (cursor does not move).
- processAnsiCommand_K();
- break;
- case 'L':
- // Insert line(s) (current line moves down).
- processAnsiCommand_L();
- break;
- case 'M':
- // Delete line(s).
- processAnsiCommand_M();
- break;
- case 'm':
- // Set Graphics Rendition (SGR).
- processAnsiCommand_m();
- break;
- case 'n':
- // Device Status Report (DSR).
- processAnsiCommand_n();
- break;
- case 'P':
- // Delete character(s).
- processAnsiCommand_P();
- break;
- case 'S':
- // Scroll up.
- // Emacs, vi, and GNU readline don't seem to use this command, so we ignore it for now.
- break;
- case 'T':
- // Scroll down.
- // Emacs, vi, and GNU readline don't seem to use this command, so we ignore it for now.
- break;
- case 'X':
- // Erase character.
- // Emacs, vi, and GNU readline don't seem to use this command, so we ignore it for now.
- break;
- case 'Z':
- // Cursor back tab.
- // Emacs, vi, and GNU readline don't seem to use this command, so we ignore it for now.
- break;
-
- default:
- Logger.log("Ignoring unsupported ANSI command character: '" + ansiCommandCharacter + "'");
- break;
- }
- }
-
- // Makes room for N characters on the current line at the cursor position. Text under the cursor moves right without
- // wrapping at the end of the line.
- private void processAnsiCommand_atsign() {
- int charactersToInsert = getAnsiParameter(0);
- text.insertCharacters(charactersToInsert);
- }
-
- // Moves the cursor up by the number of lines specified by the escape sequence parameter (default 1).
- private void processAnsiCommand_A() {
- moveCursorUp(getAnsiParameter(0));
- }
-
- // Moves the cursor down by the number of lines specified by the escape sequence parameter (default 1).
- private void processAnsiCommand_B() {
- moveCursorDown(getAnsiParameter(0));
- }
-
- // Moves the cursor forward by the number of columns specified by the escape sequence parameter (default 1).
- private void processAnsiCommand_C() {
- moveCursorForward(getAnsiParameter(0));
- }
-
- // Moves the cursor backward by the number of columns specified by the escape sequence parameter (default 1).
- private void processAnsiCommand_D() {
- moveCursorBackward(getAnsiParameter(0));
- }
-
- // Moves the cursor to the first column of the Nth next line, where N is specified by the ANSI parameter (default 1).
- private void processAnsiCommand_E() {
- int linesToMove = getAnsiParameter(0);
- moveCursor(relativeCursorLine() + linesToMove, 0);
- }
-
- // Moves the cursor to the first column of the Nth previous line, where N is specified by the ANSI parameter
- // (default 1).
- private void processAnsiCommand_F() {
- int linesToMove = getAnsiParameter(0);
- moveCursor(relativeCursorLine() - linesToMove, 0);
- }
-
- // Moves the cursor within the current line to the column specified by the ANSI parameter (default is column 1).
- private void processAnsiCommand_G() {
- int targetColumn = 1;
- if (parameters[0].length() > 0) {
- targetColumn = getAnsiParameter(0) - 1;
- }
- moveCursor(relativeCursorLine(), targetColumn);
- }
-
- // Sets the cursor to a position specified by the escape sequence parameters (default is the upper left corner of the
- // screen).
- private void processAnsiCommand_H() {
- moveCursor(getAnsiParameter(0) - 1, getAnsiParameter(1) - 1);
- }
-
- // Deletes some (or all) of the text on the screen without moving the cursor.
- private void processAnsiCommand_J() {
- int parameter;
- if (parameters[0].length() == 0) {
- parameter = 0;
- } else {
- parameter = getAnsiParameter(0);
- }
- switch (parameter) {
- case 0:
- text.eraseToEndOfScreen();
- break;
- case 1:
- // Erase from beginning to current position (inclusive).
- text.eraseToCursor();
- break;
- case 2:
- // Erase entire display.
- text.eraseAll();
- break;
- default:
- Logger.log("Unexpected J-command parameter: " + parameter);
- break;
- }
- }
-
- // Deletes some (or all) of the text in the current line without moving the cursor.
- private void processAnsiCommand_K() {
- int parameter = getAnsiParameter(0);
- switch (parameter) {
- case 0:
- // Erase from beginning to current position (inclusive).
- text.eraseLineToCursor();
- break;
- case 1:
- // Erase from current position to end (inclusive).
- text.eraseLineToEnd();
- break;
- case 2:
- // Erase entire line.
- text.eraseLine();
- break;
- default:
- Logger.log("Unexpected K-command parameter: " + parameter);
- break;
- }
- }
-
- // Inserts one or more blank lines. The current line of text moves down. Text that falls off the bottom of the screen
- // is deleted.
- private void processAnsiCommand_L() {
- text.insertLines(getAnsiParameter(0));
- }
-
- // Deletes one or more lines of text. Any lines below the deleted lines move up, which we implement by appending
- // new lines to the end of the text.
- private void processAnsiCommand_M() {
- text.deleteLines(getAnsiParameter(0));
- }
-
- // Sets a new graphics rendition mode, such as foreground/background color, bold/normal text, and reverse video.
- private void processAnsiCommand_m() {
- if (parameters[0].length() == 0) {
- // This a special case: when no ANSI parameter is specified, act like a single parameter equal to 0 was specified.
- parameters[0].append('0');
- }
- Style style = text.getStyle();
- // There are a non-zero number of ANSI parameters. Process each one in order.
- int parameterCount = parameters.length;
- int parameterIndex = 0;
- while (parameterIndex < parameterCount && parameters[parameterIndex].length() > 0) {
- int parameter = getAnsiParameter(parameterIndex);
- switch (parameter) {
- case 0:
- // Reset all graphics modes.
- style = text.getDefaultStyle();
- break;
- case 1:
- style = style.setBold(true);
- break;
- case 4:
- style = style.setUnderline(true);
- break;
- case 5:
- style = style.setBlink(true);
- break;
- case 7:
- style = style.setReverse(true);
- break;
- case 10: // Set primary font. Ignored.
- break;
- case 21:
- case 22:
- style = style.setBold(false);
- break;
- case 24:
- style = style.setUnderline(false);
- break;
- case 25:
- style = style.setBlink(false);
- break;
- case 27:
- style = style.setReverse(false);
- break;
- case 30:
- style = style.setForground("BLACK");
- break;
- case 31:
- style = style.setForground("RED");
- break;
- case 32:
- style = style.setForground("GREEN");
- break;
- case 33:
- style = style.setForground("YELLOW");
- break;
- case 34:
- style = style.setForground("BLUE");
- break;
- case 35:
- style = style.setForground("MAGENTA");
- break;
- case 36:
- style = style.setForground("CYAN");
- break;
- case 37:
- style = style.setForground("WHITE_FOREGROUND");
- break;
- case 40:
- style = style.setBackground("BLACK");
- break;
- case 41:
- style = style.setBackground("RED");
- break;
- case 42:
- style = style.setBackground("GREEN");
- break;
- case 43:
- style = style.setBackground("YELLOW");
- break;
- case 44:
- style = style.setBackground("BLUE");
- break;
- case 45:
- style = style.setBackground("MAGENTA");
- break;
- case 46:
- style = style.setBackground("CYAN");
- break;
- case 47:
- style = style.setBackground("WHITE");
- break;
- default:
- Logger.log("Unsupported graphics rendition parameter: " + parameter);
- break;
- }
- ++parameterIndex;
- }
- text.setStyle(style);
- }
-
- // Responds to an ANSI Device Status Report (DSR) command from the remote endpoint requesting the cursor position.
- // Requests for other kinds of status are ignored.
- private void processAnsiCommand_n() {
- // Do nothing if the numeric parameter was not 6 (which means report cursor position).
- if (getAnsiParameter(0) != 6) {
- return;
- }
- // Send the ANSI cursor position (which is 1-based) to the remote endpoint.
- String positionReport = "\u001b[" + (relativeCursorLine() + 1) + ";" + (getCursorColumn() + 1) + "R";
- try {
- // TODO(alruiz): use same encoding as terminal.
- OutputStreamWriter streamWriter = new OutputStreamWriter(terminal.getOutputStream(), "ISO-8859-1");
- streamWriter.write(positionReport, 0, positionReport.length());
- streamWriter.flush();
- } catch (IOException ex) {
- Logger.log("Caught IOException!");
- }
- }
-
- // Deletes one or more characters starting at the current cursor position. Characters on the same line and to the
- // right of the deleted characters move left. If there are no characters on the current line at or to the right of the
- // cursor column, no text is deleted.
- private void processAnsiCommand_P() {
- text.deleteCharacters(getAnsiParameter(0));
- }
-
- // Returns one of the numeric ANSI parameters received in the most recent escape sequence.
- private int getAnsiParameter(int parameterIndex) {
- if (parameterIndex < 0 || parameterIndex >= parameters.length) {
- // This should never happen.
- return -1;
- }
- String parameter = parameters[parameterIndex].toString();
- if (parameter.length() == 0) {
- return 1;
- }
- int parameterValue = 1;
- // Don't trust the remote endpoint to send well formed numeric parameters.
- try {
- parameterValue = Integer.parseInt(parameter);
- } catch (NumberFormatException ex) {
- parameterValue = 1;
- }
- return parameterValue;
- }
-
- // Processes a single parameter character in an ANSI escape sequence. Parameters are the (optional) characters
- // between the leading "\e[" and the command character in an escape sequence (e.g., in the escape sequence
- // "\e[20;10H", the parameter characters are "20;10"). Parameters are integers separated by one or more ';'s.
- private void processAnsiParameterCharacter(char ch) {
- if (ch == ';') {
- ++nextAnsiParameter;
- } else {
- if (nextAnsiParameter < parameters.length) {
- parameters[nextAnsiParameter].append(ch);
- }
- }
- }
-
- // Processes a contiguous sequence of non-control characters. This is a performance optimization, so that we don't
- // have to insert or append each non-control character individually to the StyledText widget. A non-control character
- // is any character that passes the condition in the below while loop.
- private void processNonControlCharacters(char character) throws IOException {
- StringBuilder buffer = new StringBuilder();
- buffer.append(character);
- // Identify a contiguous sequence of non-control characters, starting at firstNonControlCharacterIndex in newText.
- while (hasNextChar()) {
- character = getNextChar();
- if (character == '\u0000' || character == '\b' || character == '\t' || character == '\u0007' || character == '\n'
- || character == '\r' || character == '\u001b') {
- pushBackChar(character);
- break;
- }
- buffer.append(character);
- }
- // Now insert the sequence of non-control characters in the StyledText widget
- // at the location of the cursor.
- displayNewText(buffer.toString());
- }
-
- // Displays a subset of the newly-received text in the Terminal view, wrapping text at the right edge of the screen
- // and overwriting text when the cursor is not at the very end of the screen's text.
- // There are never any ANSI control characters or escape sequences in the text being displayed by this method (this
- // includes newlines, carriage returns, and tabs).
- private void displayNewText(String buffer) {
- text.appendString(buffer);
- }
-
- // Processes a BEL (Control-G) character.
- private void processBEL() {
- // TODO
- // Display.getDefault().beep();
- }
-
- // Processes a backspace (Control-H) character.
- private void processBackspace() {
- moveCursorBackward(1);
- }
-
- // Processes a tab (Control-I) character. We don't insert a tab character into the StyledText widget. Instead, we move
- // the cursor forward to the next tab stop, without altering any of the text. Tab stops are every 8 columns. The
- // cursor will never move past the rightmost column.
- private void processTab() {
- moveCursorForward(8 - (getCursorColumn() % 8));
- }
-
- // Processes a newline (Control-J) character. A newline (NL) character just moves the cursor to the same column on the
- // next line, creating new lines when the cursor reaches the bottom edge of the terminal. This is counter-intuitive,
- // especially to UNIX programmers who are taught that writing a single NL to a terminal is sufficient to move the
- // cursor to the first column of the next line, as if a carriage return (CR) and a NL were written.
- //
- // UNIX terminals typically display a NL character as a CR followed by a NL because the terminal device typically has
- // the ONLCR attribute bit set (see the termios(4) man page for details), which causes the terminal device driver to
- // translate NL to CR + NL on output. The terminal itself (i.e., a hardware terminal or a terminal emulator, like
- // xterm or this code) _always_ interprets a CR to mean "move the cursor to the beginning of the current
- // line" and a NL to mean "move the cursor to the same column on the next line".
- private void processNewline() {
- text.processNewline();
- }
-
- // Processes a Carriage Return (Control-M).
- private void processCarriageReturn() {
- text.setCursorColumn(0);
- }
-
- // Computes the width of the terminal in columns and its height in lines, then adjusts the width and height of the
- // view's StyledText widget so that it displays an integral number of lines and columns of text. The adjustment is
- // always to shrink the widget vertically or horizontally, because if the control were to grow, it would be clipped by
- // the edges of the view window (i.e., the view window does not become larger to accommodate its contents becoming
- // larger).
- //
- // This method must be called immediately before each time text is written to the terminal so that we can properly
- // line wrap text. Because it is called so frequently, it must be fast when there is no resizing to be done.
- private void adjustTerminalDimensions() {
- // Compute how many pixels we need to shrink the StyledText control vertically to make it display an integral number
- // of lines of text.
- //
- // TODO
- // if(text.getColumns()!=80 && text.getLines()!=80) text.setDimensions(24, 80);
- ITerminalConnector connector = getConnector();
- // TODO MSA: send only if dimensions have really changed!
- if (connector != null) {
- connector.setTerminalSize(text.getColumns(), text.getLines());
- }
- }
-
- private ITerminalConnector getConnector() {
- if (terminal.getTerminalConnector() != null) {
- return terminal.getTerminalConnector();
- }
- return null;
- }
-
- // Returns the relative line number of the line containing the cursor. The returned line number is relative to the
- // top-most visible line, which has relative line number 0.
- private int relativeCursorLine() {
- return text.getCursorLine();
- }
-
- // Moves the cursor to the specified line and column. Parameter <i>targetLine</i> is the line number of a screen line,
- // so it has a minimum value of 0 (the topmost screen line) and a maximum value of heightInLines - 1 (the
- // bottom-most screen line). A line does not have to contain any text to move the cursor to any column in that line.
- private void moveCursor(int targetLine, int targetColumn) {
- text.setCursor(targetLine, targetColumn);
- }
-
- // Moves the cursor down n lines, but won't move the cursor past the bottom of the screen. This method does not cause
- // any scrolling.
- private void moveCursorDown(int lines) {
- moveCursor(relativeCursorLine() + lines, getCursorColumn());
- }
-
- // Moves the cursor up n lines, but won't move the cursor past the top of the screen. This method does not cause any
- // scrolling.
- private void moveCursorUp(int lines) {
- moveCursor(relativeCursorLine() - lines, getCursorColumn());
- }
-
- // Method moves the cursor forward n columns, but won't move the cursor past the right edge of the screen, nor will
- // it move the cursor onto the next line. This method does not cause any scrolling.
- private void moveCursorForward(int columnsToMove) {
- moveCursor(relativeCursorLine(), getCursorColumn() + columnsToMove);
- }
-
- // Moves the cursor backward n columns, but won't move the cursor past the left edge of the screen, nor will it move
- // the cursor onto the previous line. This method does not cause any scrolling.
- private void moveCursorBackward(int columnsToMove) {
- moveCursor(relativeCursorLine(), getCursorColumn() - columnsToMove);
- }
-
- /**
- * Resets the state of the terminal text (foreground color, background color, font style and other internal state). It
- * essentially makes it ready for new input.
- */
- public void resetState() {
- ansiState = ANSISTATE_INITIAL;
- text.setStyle(text.getDefaultStyle());
- }
-
- private char getNextChar() throws IOException {
- int c = -1;
- if (nextChar != -1) {
- c = nextChar;
- nextChar = -1;
- } else {
- c = reader.read();
- }
- // TODO: better end of file handling
- if (c == -1) {
- c = 0;
- }
- return (char) c;
- }
-
- private boolean hasNextChar() throws IOException {
- if (nextChar >= 0) {
- return true;
- }
- return reader.ready();
- }
-
- /**
- * Put back one character to the stream. This method can push back exactly one character. The character is the next
- * character returned by {@link #getNextChar}.
- *
- * @param c the character to be pushed back.
- */
- private void pushBackChar(char c) {
- nextChar = c;
- }
-
- private int getCursorColumn() {
- return text.getCursorColumn();
- }
-
- public boolean isCrAfterNewLine() {
- return crAfterNewLine;
- }
-
- public void setCrAfterNewLine(boolean crAfterNewLine) {
- this.crAfterNewLine = crAfterNewLine;
- }
-
- public List<IHyperlink> hyperlinksAt(int line) {
- return text.hyperlinksAt(line);
- }
-}
diff --git a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/emulator/VT100EmulatorBackend.java b/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/emulator/VT100EmulatorBackend.java
deleted file mode 100644
index bf195a5..0000000
--- a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/emulator/VT100EmulatorBackend.java
+++ /dev/null
@@ -1,368 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2011 Wind River Systems, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *******************************************************************************/
-package com.google.eclipse.tm.internal.terminal.emulator;
-
-import static java.util.Collections.emptyList;
-
-import java.util.*;
-
-import org.eclipse.core.runtime.Assert;
-import org.eclipse.jface.text.IRegion;
-import org.eclipse.jface.text.hyperlink.IHyperlink;
-
-import com.google.eclipse.tm.internal.terminal.hyperlink.*;
-import com.google.eclipse.tm.terminal.model.*;
-
-public class VT100EmulatorBackend implements IVT100EmulatorBackend {
- // This field holds the number of the column in which the cursor is logically positioned. The left-most column on the
- // screen is column 0, and column numbers increase to the right. The maximum value of this field is
- // widthInColumns - 1. We track the cursor column using this field to avoid having to recompute it repeatly using
- // StyledText method calls.
- //
- // The StyledText widget that displays text has a vertical bar (called the "caret") that appears _between_ character
- // cells, but ANSI terminals have the concept of a cursor that appears _in_ a character cell, so we need a convention
- // for which character cell the cursor logically occupies when the caret is physically between two cells. The
- // convention used in this class is that the cursor is logically in column N when the caret is physically positioned
- // immediately to the _left_ of column N.
- //
- // When cursorColumn is N, the next character output to the terminal appears in column N. When a character is output
- // to the rightmost column on a given line (column widthInColumns - 1), the cursor moves to column 0 on the next line
- // after the character is drawn (this is how line wrapping is implemented). If the cursor is in the bottom-most line
- // when line wrapping occurs, the topmost visible line is scrolled off the top edge of the screen.
- private int cursorColumn;
-
- private int cursorLine;
- private Style defaultStyle;
- private Style style;
- private int lines;
- private int columns;
-
- private final ITerminalTextData terminal;
-
- private final IHyperlinkFactory httpHyperlinkFactory = new HttpHyperlinkFactory();
- private final Map<Integer, List<IHyperlink>> hyperlinks = new HashMap<Integer, List<IHyperlink>>();
-
- public VT100EmulatorBackend(ITerminalTextData terminal) {
- this.terminal = terminal;
- }
-
- @Override public void clearAll() {
- synchronized (terminal) {
- // clear the history
- int n = terminal.getHeight();
- for (int line = 0; line < n; line++) {
- terminal.cleanLine(line);
- }
- terminal.setDimensions(lines, terminal.getWidth());
- setStyle(getDefaultStyle());
- setCursor(0, 0);
- }
- }
-
- @Override public void setDimensions(int lines, int columns) {
- synchronized (terminal) {
- if (lines == this.lines && columns == this.columns) {
- return; // nothing to do
- }
- // relative cursor line
- int cursorLine = getCursorLine();
- int cursorColumn = getCursorColumn();
- int height = terminal.getHeight();
- // absolute cursor line
- int absoluteCursorLine = cursorLine + height - this.lines;
- int newLines = Math.max(lines, height);
- if (lines < this.lines) {
- if (height == this.lines) {
- // if the terminal has no history, then resize by setting the size to the new size.
- // TODO We are assuming that cursor line points at end of text.
- newLines = Math.max(lines, cursorLine + 1);
- }
- }
- this.lines = lines;
- this.columns = columns;
- // Make the terminal at least as high as we need lines.
- terminal.setDimensions(newLines, this.columns);
- // Compute relative cursor line.
- cursorLine = absoluteCursorLine - (newLines - this.lines);
- setCursor(cursorLine, cursorColumn);
- }
- }
-
- int toAbsoluteLine(int line) {
- synchronized (terminal) {
- return terminal.getHeight() - this.lines + line;
- }
- }
-
- @Override public void insertCharacters(int charactersToInsert) {
- synchronized (terminal) {
- int line = toAbsoluteLine(cursorLine);
- int n = charactersToInsert;
- for (int column = columns - 1; column >= cursorColumn + n; column--) {
- char c = terminal.getChar(line, column - n);
- Style style = terminal.getStyle(line, column - n);
- terminal.setChar(line, column, c, style);
- }
- int last = Math.min(cursorColumn + n, columns);
- for (int col = cursorColumn; col < last; col++) {
- terminal.setChar(line, col, '\000', null);
- }
- }
- }
-
- @Override public void eraseToEndOfScreen() {
- synchronized (terminal) {
- eraseLineToEnd();
- for (int line = toAbsoluteLine(cursorLine + 1); line < toAbsoluteLine(lines); line++) {
- terminal.cleanLine(line);
- }
- }
- }
-
- @Override public void eraseToCursor() {
- synchronized (terminal) {
- for (int line = toAbsoluteLine(0); line < toAbsoluteLine(cursorLine); line++) {
- terminal.cleanLine(line);
- }
- eraseLineToCursor();
- }
- }
-
- @Override public void eraseAll() {
- synchronized (terminal) {
- for (int line = toAbsoluteLine(0); line < toAbsoluteLine(lines); line++) {
- terminal.cleanLine(line);
- }
- }
- }
-
- @Override public void eraseLine() {
- synchronized (terminal) {
- terminal.cleanLine(toAbsoluteLine(cursorLine));
- }
- }
-
- @Override public void eraseLineToEnd() {
- synchronized (terminal) {
- int line = toAbsoluteLine(cursorLine);
- for (int col = cursorColumn; col < columns; col++) {
- terminal.setChar(line, col, '\000', null);
- }
- }
- }
-
- @Override public void eraseLineToCursor() {
- synchronized (terminal) {
- int line = toAbsoluteLine(cursorLine);
- for (int col = 0; col <= cursorColumn; col++) {
- terminal.setChar(line, col, '\000', null);
- }
- }
- }
-
- @Override public void insertLines(int lineCount) {
- synchronized (terminal) {
- if (!isCursorInScrollingRegion()) {
- return;
- }
- Assert.isTrue(lineCount > 0);
- int line = toAbsoluteLine(cursorLine);
- int nLines = terminal.getHeight() - line;
- terminal.scroll(line, nLines, lineCount);
- }
- }
-
- @Override public void deleteCharacters(int charCount) {
- synchronized (terminal) {
- int line = toAbsoluteLine(cursorLine);
- for (int col = cursorColumn + charCount; col < columns; col++) {
- char c = terminal.getChar(line, col);
- Style style = terminal.getStyle(line, col);
- terminal.setChar(line, col - charCount, c, style);
- }
- int first = Math.max(cursorColumn, columns - charCount);
- for (int col = first; col < columns; col++) {
- terminal.setChar(line, col, '\000', null);
- }
- }
- }
-
- @Override public void deleteLines(int lineCount) {
- synchronized (terminal) {
- if (!isCursorInScrollingRegion()) {
- return;
- }
- Assert.isTrue(lineCount > 0);
- int line = toAbsoluteLine(cursorLine);
- int currentLineCount = terminal.getHeight() - line;
- terminal.scroll(line, currentLineCount, -lineCount);
- }
- }
-
- private boolean isCursorInScrollingRegion() {
- return true;
- }
-
- @Override public Style getDefaultStyle() {
- synchronized (terminal) {
- return defaultStyle;
- }
- }
-
- @Override public void setDefaultStyle(Style defaultStyle) {
- synchronized (terminal) {
- this.defaultStyle = defaultStyle;
- }
- }
-
- @Override public Style getStyle() {
- synchronized (terminal) {
- if (style == null) {
- return defaultStyle;
- }
- return style;
- }
- }
-
- @Override public void setStyle(Style style) {
- synchronized (terminal) {
- this.style = style;
- }
- }
-
- @Override public void appendString(String buffer) {
- synchronized (terminal) {
- char[] chars = buffer.toCharArray();
- int line = toAbsoluteLine(cursorLine);
- int originalLine = line;
- List<IHyperlink> found = emptyList();
- if (buffer != null) {
- found = httpHyperlinkFactory.hyperlinksIn(cursorColumn, buffer);
- hyperlinks.put(new Integer(line), found);
- }
- int i = 0;
- while (i < chars.length) {
- int n = Math.min(columns - cursorColumn, chars.length - i);
- terminal.setChars(line, cursorColumn, chars, i, n, style);
- int col = cursorColumn + n;
- i += n;
- // wrap needed?
- if (col >= columns) {
- doNewline();
- line = toAbsoluteLine(cursorLine);
- setCursorColumn(0);
- } else {
- setCursorColumn(col);
- }
- }
- drawHyperlinks(found, originalLine);
- }
- }
-
- private void drawHyperlinks(List<IHyperlink> hyperlinks, int line) {
- for (IHyperlink hyperlink : hyperlinks) {
- IRegion region = hyperlink.getHyperlinkRegion();
- int start = region.getOffset();
- int end = start + region.getLength();
- for (int column = start; column < end; column++) {
- Style style = terminal.getStyle(line, column);
- if (style != null) {
- style = style.setUnderline(true);
- terminal.setChar(line, column, terminal.getChar(line, column), style);
- }
- }
- }
- }
-
- // MUST be called from a synchronized block!
- private void doNewline() {
- if (cursorLine + 1 >= lines) {
- int h = terminal.getHeight();
- terminal.addLine();
- if (h != terminal.getHeight()) {
- setCursorLine(cursorLine + 1);
- }
- } else {
- setCursorLine(cursorLine + 1);
- }
- }
-
- @Override public void processNewline() {
- synchronized (terminal) {
- doNewline();
- }
- }
-
- @Override public int getCursorLine() {
- synchronized (terminal) {
- return cursorLine;
- }
- }
-
- @Override public int getCursorColumn() {
- synchronized (terminal) {
- return cursorColumn;
- }
- }
-
- @Override public void setCursor(int targetLine, int targetColumn) {
- synchronized (terminal) {
- setCursorLine(targetLine);
- setCursorColumn(targetColumn);
- }
- }
-
- @Override public void setCursorColumn(int targetColumn) {
- synchronized (terminal) {
- if (targetColumn < 0) {
- targetColumn = 0;
- } else if (targetColumn >= columns) {
- targetColumn = columns - 1;
- }
- cursorColumn = targetColumn;
- // We make the assumption that nobody is changing the
- // terminal cursor except this class!
- // This assumption gives a huge performance improvement
- terminal.setCursorColumn(targetColumn);
- }
- }
-
- @Override public void setCursorLine(int targetLine) {
- synchronized (terminal) {
- if (targetLine < 0) {
- targetLine = 0;
- } else if (targetLine >= lines) {
- targetLine = lines - 1;
- }
- cursorLine = targetLine;
- // We make the assumption that nobody is changing the terminal cursor except this class!
- // This assumption gives a huge performance improvement.
- terminal.setCursorLine(toAbsoluteLine(targetLine));
- }
- }
-
- @Override public int getLines() {
- synchronized (terminal) {
- return lines;
- }
- }
-
- @Override public int getColumns() {
- synchronized (terminal) {
- return columns;
- }
- }
-
- @Override public List<IHyperlink> hyperlinksAt(int line) {
- List<IHyperlink> found = hyperlinks.get(new Integer(line));
- if (found == null) {
- return emptyList();
- }
- return found;
- }
-}
\ No newline at end of file
diff --git a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/emulator/VT100TerminalControl.java b/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/emulator/VT100TerminalControl.java
deleted file mode 100644
index 1374e83..0000000
--- a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/emulator/VT100TerminalControl.java
+++ /dev/null
@@ -1,857 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 2011 Wind River Systems, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *******************************************************************************/
-package com.google.eclipse.tm.internal.terminal.emulator;
-
-import static org.eclipse.core.runtime.Status.OK_STATUS;
-import static org.eclipse.jface.bindings.keys.SWTKeySupport.convertEventToUnmodifiedAccelerator;
-
-import static com.google.eclipse.tm.internal.terminal.control.impl.TerminalPlugin.isOptionEnabled;
-
-import java.io.*;
-import java.net.SocketException;
-import java.util.List;
-
-import org.eclipse.core.runtime.*;
-import org.eclipse.core.runtime.jobs.Job;
-import org.eclipse.jface.resource.JFaceResources;
-import org.eclipse.jface.text.IRegion;
-import org.eclipse.jface.text.hyperlink.IHyperlink;
-import org.eclipse.osgi.util.NLS;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.dnd.*;
-import org.eclipse.swt.events.*;
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.widgets.*;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.contexts.*;
-import org.eclipse.ui.keys.IBindingService;
-
-import com.google.eclipse.tm.internal.terminal.control.*;
-import com.google.eclipse.tm.internal.terminal.control.impl.*;
-import com.google.eclipse.tm.internal.terminal.provisional.api.*;
-import com.google.eclipse.tm.internal.terminal.textcanvas.*;
-import com.google.eclipse.tm.internal.terminal.textcanvas.PipedInputStream;
-import com.google.eclipse.tm.terminal.model.*;
-
-public class VT100TerminalControl implements ITerminalControlForText, ITerminalControl, ITerminalViewControl {
- protected static final String[] LINE_DELIMITERS = { "\n" };
-
- private static final String DEFAULT_ENCODING =
- new InputStreamReader(new ByteArrayInputStream(new byte[0])).getEncoding();
-
- // This field holds a reference to a TerminalText object that performs all ANSI text processing on data received from
- // the remote host and controls how text is displayed using the view's StyledText widget.
- private final VT100Emulator terminalText;
-
- private Display display;
- private TextCanvas textControl;
- private Composite rootControl;
- private Clipboard clipboard;
- private KeyListener keyHandler;
- private final ITerminalListener terminalListener;
- private String message = "";
- private FocusListener fFocusListener;
- private ITerminalConnector connector;
- private final ITerminalConnector[] connectors;
- private final PipedInputStream inputStream;
- private String encoding = DEFAULT_ENCODING;
- private InputStreamReader inputStreamReader;
- private ICommandInputField commandInputField;
- private volatile TerminalState state;
- private final ITerminalTextData terminalModel;
-
- volatile private Job job;
-
- private final EditActionAccelerators editActionAccelerators = new EditActionAccelerators();
-
- public VT100TerminalControl(ITerminalListener target, Composite wndParent, ITerminalConnector[] connectors) {
- this.connectors = connectors;
- terminalListener = target;
- terminalModel = TerminalTextDataFactory.makeTerminalTextData();
- terminalModel.setMaxHeight(1000);
- inputStream = new PipedInputStream(8 * 1024);
- terminalText = new VT100Emulator(terminalModel, this, null);
- try {
- // Use default Encoding as start, until setEncoding() is called.
- setEncoding(null);
- } catch (UnsupportedEncodingException e) {
- e.printStackTrace();
- // Fall back to local platform default encoding
- encoding = DEFAULT_ENCODING;
- inputStreamReader = new InputStreamReader(inputStream);
- terminalText.setInputStreamReader(inputStreamReader);
- }
- setUpTerminal(wndParent);
- }
-
- @Override public void setEncoding(String encoding) throws UnsupportedEncodingException {
- if (encoding == null) {
- encoding = "ISO-8859-1";
- }
- inputStreamReader = new InputStreamReader(inputStream, encoding);
- // remember encoding if above didn't throw an exception
- this.encoding = encoding;
- terminalText.setInputStreamReader(inputStreamReader);
- }
-
- @Override public String getEncoding() {
- return encoding;
- }
-
- @Override public ITerminalConnector[] getConnectors() {
- return connectors;
- }
-
- @Override public void copy() {
- copy(DND.CLIPBOARD);
- }
-
- private void copy(int clipboardType) {
- String selection = getSelection();
- if (selection == null || selection.isEmpty()) {
- return;
- }
- Object[] data = new Object[] { selection };
- Transfer[] types = new Transfer[] { TextTransfer.getInstance() };
- clipboard.setContents(data, types, clipboardType);
- }
-
- @Override public void paste() {
- paste(DND.CLIPBOARD);
- }
-
- private void paste(int clipboardType) {
- TextTransfer textTransfer = TextTransfer.getInstance();
- String strText = (String) clipboard.getContents(textTransfer, clipboardType);
- pasteString(strText);
- }
-
- @Override public boolean pasteString(String text) {
- if (!isConnected()) {
- return false;
- }
- if (text == null) {
- return false;
- }
- if (!encoding.equals(DEFAULT_ENCODING)) {
- sendString(text);
- } else {
- // TODO I do not understand why pasteString would do this here...
- for (int i = 0; i < text.length(); i++) {
- sendChar(text.charAt(i), false);
- }
- }
- return true;
- }
-
- @Override public void selectAll() {
- getTextControl().selectAll();
- }
-
- @Override public void sendKey(char character) {
- Event event;
- KeyEvent keyEvent;
- event = new Event();
- event.widget = getTextControl();
- event.character = character;
- event.keyCode = 0;
- event.stateMask = 0;
- event.doit = true;
- keyEvent = new KeyEvent(event);
- keyHandler.keyPressed(keyEvent);
- }
-
- @Override public void clearTerminal() {
- getTerminalText().clearTerminal();
- }
-
- @Override public Clipboard getClipboard() {
- return clipboard;
- }
-
- @Override public String getSelection() {
- String text = textControl.getSelectionText();
- return text == null ? "" : text;
- }
-
- @Override public boolean setFocus() {
- return getTextControl().setFocus();
- }
-
- @Override public boolean isEmpty() {
- return getTextControl().isEmpty();
- }
-
- @Override public boolean isDisposed() {
- return getTextControl().isDisposed();
- }
-
- @Override public boolean isConnected() {
- return state == TerminalState.CONNECTED;
- }
-
- @Override public void disposeTerminal() {
- disconnectTerminal();
- clipboard.dispose();
- getTerminalText().dispose();
- }
-
- @Override public void connectTerminal() {
- if (getTerminalConnector() == null) {
- return;
- }
- terminalText.resetState();
- if (connector.getInitializationErrorMessage() != null) {
- showErrorMessage(NLS.bind(TerminalMessages.cannotConnectTo, connector.getName(),
- connector.getInitializationErrorMessage()));
- return;
- }
- getTerminalConnector().connect(this);
- // clean the error message
- setErrorMessage("");
- waitForConnect();
- }
-
- @Override public ITerminalConnector getTerminalConnector() {
- return connector;
- }
-
- @Override public void disconnectTerminal() {
- Logger.log("entered.");
- // Disconnect the remote side first.
- if (getState() != TerminalState.CLOSED && getTerminalConnector() != null) {
- getTerminalConnector().disconnect();
- }
- // Ensure that a new Job can be started; then clean up old Job.
- Job newJob;
- synchronized (this) {
- newJob = job;
- job = null;
- }
- if (newJob != null) {
- newJob.cancel();
- // Join job to avoid leaving job running after workbench shutdown (333613).
- // Interrupt to be fast enough; cannot close fInputStream since it is re-used (bug 348700).
- Thread t = newJob.getThread();
- if (t != null) {
- t.interrupt();
- }
- try {
- newJob.join();
- } catch (InterruptedException e) {
- Thread.currentThread().interrupt();
- }
- }
- }
-
- private void waitForConnect() {
- // TODO
- // Eliminate this code
- while (getState() == TerminalState.CONNECTING) {
- if (display.readAndDispatch()) {
- continue;
- }
- display.sleep();
- }
- if (getTextControl().isDisposed()) {
- disconnectTerminal();
- return;
- }
- if (!getMsg().isEmpty()) {
- showErrorMessage(getMsg());
- disconnectTerminal();
- return;
- }
- getTextControl().setFocus();
- startReaderJob();
- }
-
- private synchronized void startReaderJob() {
- if (job == null) {
- initializeJob();
- job.setSystem(true);
- job.schedule();
- }
- }
-
- private void initializeJob() {
- job = new Job("Terminal data reader") {
- @Override protected IStatus run(IProgressMonitor monitor) {
- IStatus status = OK_STATUS;
- try {
- while (true) {
- while (inputStream.available() == 0 && !monitor.isCanceled()) {
- try {
- inputStream.waitForAvailable(500);
- } catch (InterruptedException e) {
- Thread.currentThread().interrupt();
- }
- }
- if (monitor.isCanceled()) {
- // Do not disconnect terminal here because another reader job may already be running.
- status = Status.CANCEL_STATUS;
- break;
- }
- try {
- // TODO: should block when no text is available!
- terminalText.processText();
- } catch (Exception e) {
- disconnectTerminal();
- status = new Status(IStatus.ERROR, TerminalPlugin.PLUGIN_ID, e.getLocalizedMessage(), e);
- break;
- }
- }
- } finally {
- // Clean the job: start a new one when the connection gets restarted.
- // Bug 208145: make sure we do not clean an other job that's already started (since it would become a zombie)
- synchronized (VT100TerminalControl.this) {
- if (job == this) {
- job = null;
- }
- }
- }
- return status;
- }
- };
- }
-
- private void showErrorMessage(String message) {
- String title = TerminalMessages.terminalError;
- MessageBox mb = new MessageBox(getShell(), SWT.ICON_ERROR | SWT.OK);
- mb.setText(title);
- mb.setMessage(message);
- mb.open();
- }
-
- protected void sendString(String string) {
- try {
- // Send the string after converting it to an array of bytes using the platform's default character encoding.
- //
- // TODO: Find a way to force this to use the ISO Latin-1 encoding.
- // TODO: handle Encoding Errors in a better way
- getOutputStream().write(string.getBytes(encoding));
- getOutputStream().flush();
- } catch (SocketException socketException) {
- displayTextInTerminal(socketException.getMessage());
- String strMsg = TerminalMessages.socketError + "!\n" + socketException.getMessage();
- showErrorMessage(strMsg);
- Logger.logException(socketException);
- disconnectTerminal();
- } catch (IOException ioException) {
- showErrorMessage(TerminalMessages.ioError + "!\n" + ioException.getMessage());
- Logger.logException(ioException);
- disconnectTerminal();
- }
- }
-
- @Override public Shell getShell() {
- return getTextControl().getShell();
- }
-
- protected void sendChar(char chKey, boolean altKeyPressed) {
- try {
- String text = Character.toString(chKey);
- byte[] bytes = text.getBytes(getEncoding());
- OutputStream os = getOutputStream();
- if (os == null) {
- // Bug 207785: NPE when trying to send char while no longer connected
- Logger.log("NOT sending '" + text + "' because no longer connected");
- } else {
- if (altKeyPressed) {
- // When the ALT key is pressed at the same time that a character is typed, translate it into an ESCAPE
- // followed by the character. The alternative in this case is to set the high bit of the character being
- // transmitted, but that will cause input such as ALT-f to be seen as the ISO Latin-1 character '�', which
- // can be confusing to European users running Emacs, for whom Alt-f should move forward a word instead of
- // inserting the '�' character.
- //
- // TODO: Make the ESCAPE-vs-highbit behavior user configurable.
- Logger.log("sending ESC + '" + text + "'");
- getOutputStream().write('\u001b');
- getOutputStream().write(bytes);
- } else {
- Logger.log("sending '" + text + "'");
- getOutputStream().write(bytes);
- }
- getOutputStream().flush();
- }
- } catch (SocketException socketException) {
- Logger.logException(socketException);
- displayTextInTerminal(socketException.getMessage());
- String message = TerminalMessages.socketError + "!\n" + socketException.getMessage();
- showErrorMessage(message);
- Logger.logException(socketException);
- disconnectTerminal();
- } catch (IOException ioException) {
- Logger.logException(ioException);
- displayTextInTerminal(ioException.getMessage());
- String message = TerminalMessages.ioError + "!\n" + ioException.getMessage();
- showErrorMessage(message);
- Logger.logException(ioException);
- disconnectTerminal();
- }
- }
-
- @Override public void setUpTerminal(Composite parent) {
- Assert.isNotNull(parent);
- state = TerminalState.CLOSED;
- setUpControls(parent);
- setupListeners();
- setupHelp(rootControl, TerminalPlugin.HELP_VIEW);
- }
-
- @Override public void setFont(Font font) {
- getTextControl().setFont(font);
- if (commandInputField != null) {
- commandInputField.setFont(font);
- }
- // Tell the TerminalControl singleton that the font has changed.
- textControl.onFontChange();
- getTerminalText().fontChanged();
- }
-
- @Override public Font getFont() {
- return getTextControl().getFont();
- }
-
- @Override public Control getControl() {
- return textControl;
- }
-
- @Override public Control getRootControl() {
- return rootControl;
- }
-
- protected void setUpControls(Composite parent) {
- // The Terminal view now aims to be an ANSI-conforming terminal emulator, so it can't have a horizontal scroll bar
- // (but a vertical one is ok). Also, do _not_ make the TextViewer read-only, because that prevents it from seeing a
- // TAB character when the user presses TAB (instead, the TAB causes focus to switch to another Workbench control).
- // We prevent local keyboard input from modifying the text in method TerminalVerifyKeyListener.verifyKey().
- rootControl = new Composite(parent, SWT.NONE);
- GridLayout layout = new GridLayout();
- layout.marginWidth = 0;
- layout.marginHeight = 0;
- layout.verticalSpacing = 0;
- rootControl.setLayout(layout);
- ITerminalTextDataSnapshot snapshot = terminalModel.makeSnapshot();
- // TODO how to get the initial size correctly!
- snapshot.updateSnapshot(false);
- ITextCanvasModel canvasModel = new PollingTextCanvasModel(snapshot);
- textControl = new TextCanvas(rootControl, canvasModel, SWT.NONE, new TextLineRenderer(textControl, canvasModel));
- textControl.addMouseListener(new MouseAdapter() {
- @Override public void mouseUp(MouseEvent e) {
- IHyperlink hyperlink = hyperlinkAt(e);
- if (hyperlink != null) {
- hyperlink.open();
- }
- }
- });
- textControl.addMouseMoveListener(new MouseMoveListener() {
- @Override public void mouseMove(MouseEvent e) {
- IHyperlink hyperlink = hyperlinkAt(e);
- int cursorId = (hyperlink == null) ? SWT.CURSOR_IBEAM : SWT.CURSOR_HAND;
- Cursor newCursor = textControl.getDisplay().getSystemCursor(cursorId);
- if (!newCursor.equals(textControl.getCursor())) {
- textControl.setCursor(newCursor);
- }
- }
- });
- textControl.setLayoutData(new GridData(GridData.FILL_BOTH));
- textControl.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
- textControl.addResizeHandler(new TextCanvas.ResizeListener() {
- @Override public void sizeChanged(int lines, int columns) {
- terminalText.setDimensions(lines, columns);
- }
- });
- textControl.addMouseListener(new MouseAdapter() {
- @Override public void mouseUp(MouseEvent e) {
- // update selection used by middle mouse button paste
- if (e.button == 1 && getSelection().length() > 0) {
- copy(DND.SELECTION_CLIPBOARD);
- }
- }
- });
- display = getTextControl().getDisplay();
- clipboard = new Clipboard(display);
- setFont(JFaceResources.getTextFont());
- }
-
- private IHyperlink hyperlinkAt(MouseEvent e) {
- Point p = textControl.screenPointToCell(e.x, e.y);
- if (p != null) {
- List<IHyperlink> hyperlinks = terminalText.hyperlinksAt(p.y);
- for (IHyperlink hyperlink : hyperlinks) {
- IRegion region = hyperlink.getHyperlinkRegion();
- int start = region.getOffset();
- int end = start + region.getLength() - 1;
- if (p.x >= start && p.x <= end) {
- return hyperlink;
- }
- }
- }
- return null;
- }
-
- protected void setupListeners() {
- keyHandler = new TerminalKeyHandler();
- fFocusListener = new TerminalFocusListener();
- getTextControl().addKeyListener(keyHandler);
- getTextControl().addFocusListener(fFocusListener);
- }
-
- /**
- * Setup all the help contexts for the controls.
- */
- protected void setupHelp(Composite parent, String id) {
- Control[] children = parent.getChildren();
- for (int nIndex = 0; nIndex < children.length; nIndex++) {
- if (children[nIndex] instanceof Composite) {
- setupHelp((Composite) children[nIndex], id);
- }
- }
- PlatformUI.getWorkbench().getHelpSystem().setHelp(parent, id);
- }
-
- @Override public void displayTextInTerminal(String text) {
- writeToTerminal("\r\n" + text + "\r\n");
- }
-
- private void writeToTerminal(String text) {
- try {
- getRemoteToTerminalOutputStream().write(text.getBytes(encoding));
- } catch (UnsupportedEncodingException e) {
- // should never happen!
- e.printStackTrace();
- } catch (IOException e) {
- // should never happen!
- e.printStackTrace();
- }
- }
-
- @Override public OutputStream getRemoteToTerminalOutputStream() {
- if (Logger.isLogEnabled()) {
- return new LoggingOutputStream(inputStream.getOutputStream());
- }
- return inputStream.getOutputStream();
- }
-
- protected boolean isLogCharEnabled() {
- return isOptionEnabled(Logger.TRACE_DEBUG_LOG_CHAR);
- }
-
- protected boolean isLogBufferSizeEnabled() {
- return isOptionEnabled(Logger.TRACE_DEBUG_LOG_BUFFER_SIZE);
- }
-
- @Override public OutputStream getOutputStream() {
- if (getTerminalConnector() != null) {
- return getTerminalConnector().getTerminalToRemoteStream();
- }
- return null;
- }
-
- @Override public void setErrorMessage(String message) {
- this.message = message;
- }
-
- public String getMsg() {
- return message;
- }
-
- protected TextCanvas getTextControl() {
- return textControl;
- }
-
- public VT100Emulator getTerminalText() {
- return terminalText;
- }
-
- protected class TerminalFocusListener implements FocusListener {
- private IContextActivation contextActivation = null;
-
- @Override public void focusGained(FocusEvent event) {
- // Disable all keyboard accelerators (e.g., Control-B) so the Terminal view can see every key stroke. Without
- // this, Emacs, vi, and Bash are unusable in the terminal view.
- IBindingService bindingService = (IBindingService) PlatformUI.getWorkbench().getAdapter(IBindingService.class);
- bindingService.setKeyFilterEnabled(false);
- // The above code fails to cause Eclipse to disable menu-activation accelerators (e.g., Alt-F for the File menu),
- // so we set the command context to be the Terminal view's command context. This enables us to override
- // menu-activation accelerators with no-op commands in our plugin.xml file, which enables the terminal view to see
- // absolutly _all_ key-presses.
- IContextService contextService = (IContextService) PlatformUI.getWorkbench().getAdapter(IContextService.class);
- contextActivation = contextService.activateContext("org.eclipse.tm.terminal.TerminalContext");
- }
-
- @Override public void focusLost(FocusEvent event) {
- // Enable all key bindings.
- IBindingService bindingService = (IBindingService) PlatformUI.getWorkbench().getAdapter(IBindingService.class);
- bindingService.setKeyFilterEnabled(true);
- // Restore the command context to its previous value.
- IContextService contextService = (IContextService) PlatformUI.getWorkbench().getAdapter(IContextService.class);
- contextService.deactivateContext(contextActivation);
- }
- }
-
- protected class TerminalKeyHandler extends KeyAdapter {
- @Override public void keyPressed(KeyEvent event) {
- if (getState() == TerminalState.CONNECTING) {
- return;
- }
- int accelerator = convertEventToUnmodifiedAccelerator(event);
- if (editActionAccelerators.isCopyAction(accelerator)) {
- copy();
- return;
- }
- if (editActionAccelerators.isPasteAction(accelerator)) {
- paste();
- return;
- }
- // We set the event.doit to false to prevent any further processing of this key event. The only reason this is
- // here is because I was seeing the F10 key both send an escape sequence (due to this method) and switch focus to
- // the Workbench File menu (forcing the user to click in the terminal view again to continue entering text). This
- // fixes that.
- event.doit = false;
- char character = event.character;
- if (state == TerminalState.CLOSED) {
- // Pressing ENTER while not connected causes us to connect.
- if (character == '\r') {
- connectTerminal();
- return;
- }
- // Ignore all other keyboard input when not connected.
- // Allow other key handlers (such as Ctrl+F1) do their work.
- event.doit = true;
- return;
- }
- // Manage the Del key
- if (event.keyCode == 0x000007f) {
- sendString("\u001b[3~");
- return;
- }
- // If the event character is NUL ('\u0000'), then a special key was pressed (e.g., PageUp, PageDown, an arrow key,
- // a function key, Shift, Alt, Control, etc.). The one exception is when the user presses Control-@, which sends a
- // NUL character, in which case we must send the NUL to the remote endpoint. This is necessary so that Emacs will
- // work correctly, because Control-@ (i.e., NUL) invokes Emacs' set-mark-command when Emacs is running on a
- // terminal. When the user presses Control-@, the keyCode is 50.
- if (character == '\u0000' && event.keyCode != 50) {
- // A special key was pressed. Figure out which one it was and send the appropriate ANSI escape sequence.
- //
- // IMPORTANT: Control will not enter this method for these special keys unless certain <keybinding> tags are
- // present in the plugin.xml file for the Terminal view. Do not delete those tags.
- switch (event.keyCode) {
- case 0x1000001: // Up arrow.
- sendString("\u001b[A");
- break;
- case 0x1000002: // Down arrow.
- sendString("\u001b[B");
- break;
- case 0x1000003: // Left arrow.
- sendString("\u001b[D");
- break;
- case 0x1000004: // Right arrow.
- sendString("\u001b[C");
- break;
- case 0x1000005: // PgUp key.
- sendString("\u001b[5~");
- break;
- case 0x1000006: // PgDn key.
- sendString("\u001b[6~");
- break;
- case 0x1000007: // Home key.
- sendString("\u001b[H");
- break;
- case 0x1000008: // End key.
- sendString("\u001b[F");
- break;
- case 0x1000009: // Insert.
- sendString("\u001b[2~");
- break;
- case 0x100000a: // F1 key.
- if ((event.stateMask & SWT.CTRL) != 0) {
- // Allow Ctrl+F1 to act locally as well as on the remote, because it is typically non-intrusive
- event.doit = true;
- }
- sendString("\u001b[M");
- break;
- case 0x100000b: // F2 key.
- sendString("\u001b[N");
- break;
- case 0x100000c: // F3 key.
- sendString("\u001b[O");
- break;
- case 0x100000d: // F4 key.
- sendString("\u001b[P");
- break;
- case 0x100000e: // F5 key.
- sendString("\u001b[Q");
- break;
- case 0x100000f: // F6 key.
- sendString("\u001b[R");
- break;
- case 0x1000010: // F7 key.
- sendString("\u001b[S");
- break;
- case 0x1000011: // F8 key.
- sendString("\u001b[T");
- break;
- case 0x1000012: // F9 key.
- sendString("\u001b[U");
- break;
- case 0x1000013: // F10 key.
- sendString("\u001b[V");
- break;
- case 0x1000014: // F11 key.
- sendString("\u001b[W");
- break;
- case 0x1000015: // F12 key.
- sendString("\u001b[X");
- break;
- default:
- // Ignore other special keys. Control flows through this case when the user presses SHIFT, CONTROL, ALT, and
- // any other key not handled by the above cases.
- break;
- }
- // It's ok to return here, because we never locally echo special keys.
- return;
- }
- // To fix SPR 110341, we consider the Alt key to be pressed only when the Control key is _not_ also pressed. This
- // works around a bug in SWT where, on European keyboards, the AltGr key being pressed appears to us as Control
- // + Alt being pressed simultaneously.
- Logger.log("stateMask = " + event.stateMask);
- boolean altKeyPressed = (((event.stateMask & SWT.ALT) != 0) && ((event.stateMask & SWT.CTRL) == 0));
- if (!altKeyPressed && (event.stateMask & SWT.CTRL) != 0 && character == ' ') {
- // Send a NUL character -- many terminal emulators send NUL when Control-Space is pressed. This is used to set
- // the mark in Emacs.
- character = '\u0000';
- }
- sendChar(character, altKeyPressed);
- // Special case: When we are in a TCP connection and echoing characters locally, send a LF after sending a CR.
- // ISSUE: Is this absolutely required?
- if (character == '\r' && getTerminalConnector() != null && isConnected() && getTerminalConnector().isLocalEcho()) {
- sendChar('\n', false);
- }
- // Now decide if we should locally echo the character we just sent. We do _not_ locally echo the character if any
- // of these conditions are true:
- //
- // * This is a serial connection.
- // * This is a TCP connection (i.e., m_telnetConnection is not null) and the remote endpoint is not a TELNET
- // server.
- // * The ALT (or META) key is pressed.
- // * The character is any of the first 32 ISO Latin-1 characters except Control-I or Control-M.
- // * The character is the DELETE character.
- if (getTerminalConnector() == null || getTerminalConnector().isLocalEcho() == false || altKeyPressed
- || (character >= '\u0001' && character < '\t') || (character > '\t' && character < '\r')
- || (character > '\r' && character <= '\u001f') || character == '\u007f') {
- // No local echoing.
- return;
- }
- // Locally echo the character.
- StringBuilder charBuffer = new StringBuilder();
- charBuffer.append(character);
- // If the character is a carriage return, we locally echo it as a CR + LF combination.
- if (character == '\r') {
- charBuffer.append('\n');
- }
- writeToTerminal(charBuffer.toString());
- }
- }
-
- @Override public void setTerminalTitle(String title) {
- terminalListener.setTerminalTitle(title);
- }
-
- @Override public TerminalState getState() {
- return state;
- }
-
- @Override public void setState(TerminalState state) {
- this.state = state;
- terminalListener.setState(state);
- // enable the (blinking) cursor if the terminal is connected
- runAsyncInDisplayThread(new Runnable() {
- @Override public void run() {
- if (textControl != null && !textControl.isDisposed()) {
- textControl.setCursorEnabled(isConnected());
- }
- }
- });
- }
-
- private void runAsyncInDisplayThread(Runnable runnable) {
- if (Display.findDisplay(Thread.currentThread()) != null) {
- runnable.run();
- } else if (PlatformUI.isWorkbenchRunning()) {
- PlatformUI.getWorkbench().getDisplay().asyncExec(runnable);
- // else should not happen and we ignore it...
- }
- }
-
- @Override public String getSettingsSummary() {
- if (getTerminalConnector() != null) {
- return getTerminalConnector().getSettingsSummary();
- }
- return "";
- }
-
- @Override public void setConnector(ITerminalConnector connector) {
- this.connector = connector;
- }
-
- @Override public ICommandInputField getCommandInputField() {
- return commandInputField;
- }
-
- @Override public void setCommandInputField(ICommandInputField inputField) {
- if (commandInputField != null) {
- commandInputField.dispose();
- }
- commandInputField = inputField;
- if (commandInputField != null) {
- commandInputField.createControl(rootControl, this);
- }
- if (rootControl.isVisible()) {
- rootControl.layout(true);
- }
- }
-
- @Override public int getBufferLineLimit() {
- return terminalModel.getMaxHeight();
- }
-
- @Override public void setBufferLineLimit(int bufferLineLimit) {
- if (bufferLineLimit <= 0) {
- return;
- }
- synchronized (terminalModel) {
- if (terminalModel.getHeight() > bufferLineLimit) {
- terminalModel.setDimensions(bufferLineLimit, terminalModel.getWidth());
- }
- terminalModel.setMaxHeight(bufferLineLimit);
- }
- }
-
- @Override public boolean isScrollLockOn() {
- return textControl.isScrollLockOn();
- }
-
- @Override public void setScrollLockOn(boolean on) {
- textControl.setScrollLockOn(on);
- }
-
- @Override public void setInvertedColors(boolean invert) {
- textControl.setInvertedColors(invert);
- }
-
- public void setColors(RGB background, RGB foreground) {
- textControl.setColors(background, foreground);
- }
-
- public void setBlinkingCursor(boolean useBlinkingCursor) {
- textControl.setBlinkingCursor(useBlinkingCursor);
- }
-}
diff --git a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/hyperlink/HttpHyperlinkFactory.java b/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/hyperlink/HttpHyperlinkFactory.java
deleted file mode 100644
index 3079dd4..0000000
--- a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/hyperlink/HttpHyperlinkFactory.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (c) 2012 Google Inc.
- *
- * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
- * Public License v1.0 which accompanies this distribution, and is available at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- */
-package com.google.eclipse.tm.internal.terminal.hyperlink;
-
-import java.util.*;
-import java.util.regex.*;
-
-import org.eclipse.jface.text.*;
-import org.eclipse.jface.text.hyperlink.IHyperlink;
-
-/**
- * @author alruiz@google.com (Alex Ruiz)
- */
-public class HttpHyperlinkFactory implements IHyperlinkFactory {
- private static Pattern URL_PATTERN =
- Pattern.compile("http(s)?:\\/{2}[\\d\\w-]+(\\.[\\d\\w-]+)*(?:(?:\\/[^\\s/]*))*(\\:[\\d]+)?");
-
- @Override public List<IHyperlink> hyperlinksIn(int column, String text) {
- if (text == null) {
- return NO_HYPERLINKS;
- }
- List<IHyperlink> hyperlinks = new ArrayList<IHyperlink>();
- Matcher matcher = URL_PATTERN.matcher(text);
- int start = 0;
- while (matcher.find(start)) {
- String url = matcher.group().trim();
- if (url.isEmpty()) {
- continue;
- }
- IRegion region = new Region(column + matcher.start(), url.length());
- hyperlinks.add(new UrlHyperlink(region, url));
- start = matcher.end();
- }
- return hyperlinks.isEmpty() ? NO_HYPERLINKS : hyperlinks;
- }
-}
diff --git a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/hyperlink/IHyperlinkFactory.java b/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/hyperlink/IHyperlinkFactory.java
deleted file mode 100644
index 11363cb..0000000
--- a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/hyperlink/IHyperlinkFactory.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Copyright (c) 2012 Google Inc.
- *
- * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
- * Public License v1.0 which accompanies this distribution, and is available at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- */
-package com.google.eclipse.tm.internal.terminal.hyperlink;
-
-import static java.util.Collections.emptyList;
-
-import java.util.List;
-
-import org.eclipse.jface.text.hyperlink.IHyperlink;
-
-/**
- * @author alruiz@google.com (Alex Ruiz)
- */
-public interface IHyperlinkFactory {
- List<IHyperlink> NO_HYPERLINKS = emptyList();
-
- List<IHyperlink> hyperlinksIn(int column, String text);
-}
diff --git a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/hyperlink/UrlHyperlink.java b/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/hyperlink/UrlHyperlink.java
deleted file mode 100644
index e9a4992..0000000
--- a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/hyperlink/UrlHyperlink.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Copyright (c) 2012 Google Inc.
- *
- * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
- * Public License v1.0 which accompanies this distribution, and is available at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- */
-package com.google.eclipse.tm.internal.terminal.hyperlink;
-
-import java.net.*;
-
-import org.eclipse.jface.text.IRegion;
-import org.eclipse.jface.text.hyperlink.URLHyperlink;
-import org.eclipse.ui.*;
-import org.eclipse.ui.browser.*;
-
-import com.google.eclipse.tm.internal.terminal.control.impl.TerminalPlugin;
-
-/**
- * @author alruiz@google.com (Alex Ruiz)
- */
-public class UrlHyperlink extends URLHyperlink {
- public UrlHyperlink(IRegion region, String urlString) {
- super(region, urlString);
- }
-
- @Override public void open() {
- // Create the browser
- IWorkbenchBrowserSupport support= PlatformUI.getWorkbench().getBrowserSupport();
- IWebBrowser browser;
- try {
- browser= support.createBrowser(null);
- } catch (PartInitException e) {
- logErrorOpeningUrl(e);
- return;
- }
- URL url = null;
- try {
- url = new URL(getURLString());
- browser.openURL(url);
- } catch (PartInitException e) {
- openInExternalBrowser(url);
- } catch (MalformedURLException e) {
- logErrorOpeningUrl(e);
- }
- }
-
- private void openInExternalBrowser(URL url) {
- try {
- PlatformUI.getWorkbench().getBrowserSupport().getExternalBrowser().openURL(url);
- } catch (Exception e) {
- logErrorOpeningUrl(e);
- }
- }
-
- private void logErrorOpeningUrl(Exception e) {
- e.printStackTrace();
- String format = "Unable to open URL '%s'";
- TerminalPlugin.log(String.format(format, getURLString()), e);
- }
-}
diff --git a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/model/ISnapshotChanges.java b/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/model/ISnapshotChanges.java
deleted file mode 100644
index 9e4b6a1..0000000
--- a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/model/ISnapshotChanges.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2008 Wind River Systems, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *******************************************************************************/
-package com.google.eclipse.tm.internal.terminal.model;
-
-import com.google.eclipse.tm.terminal.model.ITerminalTextData;
-
-public interface ISnapshotChanges {
- void markLineChanged(int line);
-
- void markLinesChanged(int line, int size);
-
- /**
- * Marks all lines within the scrolling region changed and resets the scrolling information.
- */
- void convertScrollingIntoChanges();
-
- boolean hasChanged();
-
- void scroll(int startLine, int size, int shift);
-
- void setAllChanged(int height);
-
- int getFirstChangedLine();
-
- int getLastChangedLine();
-
- int getScrollWindowStartLine();
-
- int getScrollWindowSize();
-
- int getScrollWindowShift();
-
- boolean hasLineChanged(int line);
-
- void markDimensionsChanged();
-
- boolean hasDimensionsChanged();
-
- void markCursorChanged();
-
- boolean hasTerminalChanged();
-
- void setTerminalChanged();
-
- void copyChangedLines(ITerminalTextData destination, ITerminalTextData source);
-
- void setInterestWindow(int startLine, int size);
-
- int getInterestWindowStartLine();
-
- int getInterestWindowSize();
-}
diff --git a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/model/SnapshotChanges.java b/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/model/SnapshotChanges.java
deleted file mode 100644
index dec2197..0000000
--- a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/model/SnapshotChanges.java
+++ /dev/null
@@ -1,333 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2008 Wind River Systems, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *******************************************************************************/
-package com.google.eclipse.tm.internal.terminal.model;
-
-import org.eclipse.core.runtime.Assert;
-
-import com.google.eclipse.tm.terminal.model.ITerminalTextData;
-
-/**
- * Collects the changes of the {@link ITerminalTextData}.
- */
-public class SnapshotChanges implements ISnapshotChanges {
- private int firstChangedLine;
- private int lastChangedLine;
- private int scrollWindowStartLine;
- private int scrollWindowSize;
- private int scrollWindowShift;
- private boolean dontTrackScrolling;
- private boolean[] changedLines;
- private int interestWindowSize;
- private int interestWindowStartLine;
- private boolean fDimensionsChanged;
- private boolean fTerminalHasChanged;
- private boolean cursorHasChanged;
-
- public SnapshotChanges(int windowStart, int windowSize) {
- this(windowStart + windowSize);
- interestWindowStartLine = windowStart;
- interestWindowSize = windowSize;
- }
-
- public SnapshotChanges(int changedLineCount) {
- setChangedLineCount(changedLineCount);
- firstChangedLine = Integer.MAX_VALUE;
- lastChangedLine = -1;
- }
-
- // Indicates whether the range overlaps with the interest window.
- private boolean isInInterestWindow(int line, int size) {
- if (interestWindowSize <= 0) {
- return true;
- }
- if (line + size <= interestWindowStartLine || line >= interestWindowStartLine + interestWindowSize) {
- return false;
- }
- return true;
- }
-
- private boolean isInInterestWindow(int line) {
- if (interestWindowSize <= 0) {
- return true;
- }
- if (line < interestWindowStartLine || line >= interestWindowStartLine + interestWindowSize) {
- return false;
- }
- return true;
- }
-
- private int fitLineToWindow(int line) {
- if (interestWindowSize <= 0) {
- return line;
- }
- if (line < interestWindowStartLine) {
- return interestWindowStartLine;
- }
- return line;
- }
-
- /**
- * The result is only defined if {@link #isInInterestWindow(int, int)} returns {@code true}.
- * <p>
- * Note:{@link #fitLineToWindow(int)} has to be called on the line to move the window correctly.
- * </p>
- * @param line the line <b>before</b> {@link #fitLineToWindow(int)} has been called.
- * @param size
- * @return the adjusted size.
- */
- private int fitSizeToWindow(int line, int size) {
- if (interestWindowSize <= 0) {
- return size;
- }
- if (line < interestWindowStartLine) {
- size -= interestWindowStartLine - line;
- line = interestWindowStartLine;
- }
- if (line + size > interestWindowStartLine + interestWindowSize) {
- size = interestWindowStartLine + interestWindowSize - line;
- }
- return size;
- }
-
- @Override public void markLineChanged(int line) {
- if (!isInInterestWindow(line)) {
- return;
- }
- line = fitLineToWindow(line);
- if (line < firstChangedLine) {
- firstChangedLine = line;
- }
- if (line > lastChangedLine) {
- lastChangedLine = line;
- }
- // In case the terminal got resized we expand don't remember the changed line because there is nothing to copy.
- if (line < getChangedLineCount()) {
- setChangedLine(line, true);
- }
- }
-
- @Override public void markLinesChanged(int line, int size) {
- if (size <= 0 || !isInInterestWindow(line, size)) {
- return;
- }
- // Do not exceed the bounds of changedLines. The terminal might have been resized and we can only keep changes for
- // the size of the previous terminal.
- size = fitSizeToWindow(line, size);
- line = fitLineToWindow(line);
- int m = Math.min(line + size, getChangedLineCount());
- for (int i = line; i < m; i++) {
- setChangedLine(i, true);
- }
- // this sets firstChangedLine as well
- markLineChanged(line);
- // this sets lastChangedLine as well
- markLineChanged(line + size - 1);
- }
-
- @Override public void markCursorChanged() {
- cursorHasChanged = true;
- }
-
- @Override public void convertScrollingIntoChanges() {
- markLinesChanged(scrollWindowStartLine, scrollWindowSize);
- scrollWindowStartLine = 0;
- scrollWindowSize = 0;
- scrollWindowShift = 0;
- }
-
- @Override public boolean hasChanged() {
- if (firstChangedLine != Integer.MAX_VALUE || lastChangedLine > 0 || scrollWindowShift != 0 || fDimensionsChanged
- || cursorHasChanged) {
- return true;
- }
- return false;
- }
-
- @Override public void markDimensionsChanged() {
- fDimensionsChanged = true;
- }
-
- @Override public boolean hasDimensionsChanged() {
- return fDimensionsChanged;
- }
-
- @Override public boolean hasTerminalChanged() {
- return fTerminalHasChanged;
- }
-
- @Override public void setTerminalChanged() {
- fTerminalHasChanged = true;
- }
-
- @Override public void scroll(int startLine, int size, int shift) {
- size = fitSizeToWindow(startLine, size);
- startLine = fitLineToWindow(startLine);
- // Let's track only negative shifts.
- if (dontTrackScrolling) {
- // We are in a state where we cannot track scrolling so let's simply mark the scrolled lines as changed.
- markLinesChanged(startLine, size);
- } else if (shift >= 0) {
- // We cannot handle positive scroll forget about clever caching of scroll events.
- doNotTrackScrollingAnymore();
- // Mark all lines inside the scroll region as changed.
- markLinesChanged(startLine, size);
- } else {
- // We have already scrolled.
- if (scrollWindowShift < 0) {
- // We have already scrolled.
- if (scrollWindowStartLine == startLine && scrollWindowSize == size) {
- // We are scrolling the same region again?
- scrollWindowShift += shift;
- scrollChangesLinesWithNegativeShift(startLine, size, shift);
- } else {
- // Mark all lines in the old scroll region as changed.
- doNotTrackScrollingAnymore();
- markLinesChanged(startLine, size);
- }
- } else {
- // First scroll in this change -- we just notify it
- scrollWindowStartLine = startLine;
- scrollWindowSize = size;
- scrollWindowShift = shift;
- scrollChangesLinesWithNegativeShift(startLine, size, shift);
- }
- }
- }
-
- // Some incompatible scrolling occurred. We cannot do the scroll optimization anymore.
- private void doNotTrackScrollingAnymore() {
- if (scrollWindowSize > 0) {
- // Convert the current scrolling into changes.
- markLinesChanged(scrollWindowStartLine, scrollWindowSize);
- scrollWindowStartLine = 0;
- scrollWindowSize = 0;
- scrollWindowShift = 0;
- }
- // Don't be clever on scrolling anymore.
- dontTrackScrolling = true;
- }
-
- private void scrollChangesLinesWithNegativeShift(int line, int n, int shift) {
- Assert.isTrue(shift < 0);
- // Scroll the region. Don't run out of bounds!
- int m = Math.min(line + n + shift, getChangedLineCount() + shift);
- for (int i = line; i < m; i++) {
- setChangedLine(i, hasLineChanged(i - shift));
- // Move the first changed line up. We don't have to move the maximum down, because with a shift scroll, the max is
- // moved by the next loop in this method
- if (i < firstChangedLine && hasLineChanged(i)) {
- firstChangedLine = i;
- }
- }
- // Mark the "opened" lines as changed.
- for (int i = Math.max(0, line + n + shift); i < line + n; i++) {
- markLineChanged(i);
- }
- }
-
- @Override public void setAllChanged(int height) {
- scrollWindowStartLine = 0;
- scrollWindowSize = 0;
- scrollWindowShift = 0;
- firstChangedLine = fitLineToWindow(0);
- lastChangedLine = firstChangedLine + fitSizeToWindow(0, height) - 1;
- // No need to keep an array of changes anymore.
- setChangedLineCount(0);
- }
-
- @Override public int getFirstChangedLine() {
- return firstChangedLine;
- }
-
- @Override public int getLastChangedLine() {
- return lastChangedLine;
- }
-
- @Override public int getScrollWindowStartLine() {
- return scrollWindowStartLine;
- }
-
- @Override public int getScrollWindowSize() {
- return scrollWindowSize;
- }
-
- @Override public int getScrollWindowShift() {
- return scrollWindowShift;
- }
-
- @Override public void copyChangedLines(ITerminalTextData destination, ITerminalTextData source) {
- int n = Math.min(lastChangedLine + 1, source.getHeight());
- for (int i = firstChangedLine; i < n; i++) {
- if (hasLineChanged(i)) {
- destination.copyLine(source, i, i);
- }
- }
- }
-
- @Override public int getInterestWindowSize() {
- return interestWindowSize;
- }
-
- @Override public int getInterestWindowStartLine() {
- return interestWindowStartLine;
- }
-
- @Override public void setInterestWindow(int startLine, int size) {
- int oldStartLine = interestWindowStartLine;
- int oldSize = interestWindowSize;
- interestWindowStartLine = startLine;
- interestWindowSize = size;
- if (oldSize > 0) {
- int shift = oldStartLine - startLine;
- if (shift == 0) {
- if (size > oldSize) {
- // add lines to the end
- markLinesChanged(oldStartLine + oldSize, size - oldSize);
- }
- // else no lines within the window have changed
-
- } else if (Math.abs(shift) < size) {
- if (shift < 0) {
- // we can scroll
- scroll(startLine, oldSize, shift);
- // mark the lines at the end as new
- for (int i = oldStartLine + oldSize; i < startLine + size; i++) {
- markLineChanged(i);
- }
- } else {
- // we cannot shift positive -- mark all changed
- markLinesChanged(startLine, size);
- }
- } else {
- // no scrolling possible
- markLinesChanged(startLine, size);
- }
- }
- }
-
- @Override public boolean hasLineChanged(int line) {
- if (line < getChangedLineCount()) {
- return changedLines[line];
- }
- // since the height of the terminal could have changed but we have tracked only changes of the previous terminal
- // height, any line outside the the range of the previous height has changed
- return isInInterestWindow(line);
- }
-
- private int getChangedLineCount() {
- return changedLines.length;
- }
-
- private void setChangedLine(int line, boolean changed) {
- changedLines[line] = changed;
- }
-
- void setChangedLineCount(int length) {
- changedLines = new boolean[length];
- }
-}
\ No newline at end of file
diff --git a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/model/SynchronizedTerminalTextData.java b/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/model/SynchronizedTerminalTextData.java
deleted file mode 100644
index afea9c3..0000000
--- a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/model/SynchronizedTerminalTextData.java
+++ /dev/null
@@ -1,121 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007 Wind River Systems, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse public synchronized License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Michael Scharf (Wind River) - initial API and implementation
- *******************************************************************************/
-package com.google.eclipse.tm.internal.terminal.model;
-
-import com.google.eclipse.tm.terminal.model.*;
-
-/**
- * This is a decorator to make all access to an {@link ITerminalTextData} synchronized.
- */
-public class SynchronizedTerminalTextData implements ITerminalTextData {
- private final ITerminalTextData data;
-
- public SynchronizedTerminalTextData(ITerminalTextData data) {
- this.data = data;
- }
-
- @Override public synchronized void addLine() {
- data.addLine();
- }
-
- @Override public synchronized void cleanLine(int line) {
- data.cleanLine(line);
- }
-
- @Override public synchronized void copy(ITerminalTextData source) {
- data.copy(source);
- }
-
- @Override public synchronized void copyLine(ITerminalTextData source, int sourceLine, int destinationLine) {
- data.copyLine(source, sourceLine, destinationLine);
- }
-
- @Override public synchronized void copyRange(
- ITerminalTextData source, int sourceStartLine, int destinationStartLine, int length) {
- data.copyRange(source, sourceStartLine, destinationStartLine, length);
- }
-
- @Override public synchronized char getChar(int line, int column) {
- return data.getChar(line, column);
- }
-
- @Override public synchronized char[] getChars(int line) {
- return data.getChars(line);
- }
-
- @Override public synchronized int getCursorColumn() {
- return data.getCursorColumn();
- }
-
- @Override public synchronized int getCursorLine() {
- return data.getCursorLine();
- }
-
- @Override public synchronized int getHeight() {
- return data.getHeight();
- }
-
- @Override public synchronized LineSegment[] getLineSegments(int line, int startColumn, int columnCount) {
- return data.getLineSegments(line, startColumn, columnCount);
- }
-
- @Override public synchronized int getMaxHeight() {
- return data.getMaxHeight();
- }
-
- @Override public synchronized Style getStyle(int line, int column) {
- return data.getStyle(line, column);
- }
-
- @Override public synchronized Style[] getStyles(int line) {
- return data.getStyles(line);
- }
-
- @Override public synchronized int getWidth() {
- return data.getWidth();
- }
-
- @Override public synchronized ITerminalTextDataSnapshot makeSnapshot() {
- return data.makeSnapshot();
- }
-
- @Override public synchronized void scroll(int startLine, int size, int shift) {
- data.scroll(startLine, size, shift);
- }
-
- @Override public synchronized void setChar(int line, int column, char c, Style style) {
- data.setChar(line, column, c, style);
- }
-
- @Override public synchronized void setChars(int line, int column, char[] chars, int start, int length, Style style) {
- data.setChars(line, column, chars, start, length, style);
- }
-
- @Override public synchronized void setChars(int line, int column, char[] chars, Style style) {
- data.setChars(line, column, chars, style);
- }
-
- @Override public synchronized void setCursorColumn(int column) {
- data.setCursorColumn(column);
- }
-
- @Override public synchronized void setCursorLine(int line) {
- data.setCursorLine(line);
- }
-
- @Override public synchronized void setDimensions(int height, int width) {
- data.setDimensions(height, width);
- }
-
- @Override public synchronized void setMaxHeight(int height) {
- data.setMaxHeight(height);
- }
-}
diff --git a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/model/TerminalTextData.java b/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/model/TerminalTextData.java
deleted file mode 100644
index 70f2e5a..0000000
--- a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/model/TerminalTextData.java
+++ /dev/null
@@ -1,215 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2008 Wind River Systems, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *******************************************************************************/
-package com.google.eclipse.tm.internal.terminal.model;
-
-import java.util.*;
-
-import com.google.eclipse.tm.terminal.model.*;
-
-public class TerminalTextData implements ITerminalTextData {
- private final ITerminalTextData data;
- private final List<TerminalTextDataSnapshot> snapshots = new ArrayList<TerminalTextDataSnapshot>();
- private int cursorLine;
- private int cursorColumn;
-
- public TerminalTextData() {
- this(new TerminalTextDataFastScroll());
- }
-
- public TerminalTextData(ITerminalTextData data) {
- this.data = data;
- }
-
- @Override public int getWidth() {
- return data.getWidth();
- }
-
- @Override public int getHeight() {
- return data.getHeight();
- }
-
- @Override public void setDimensions(int height, int width) {
- int currentHeight = getHeight();
- int currentWidth = getWidth();
- if (currentWidth == width && currentHeight == height) {
- return;
- }
- data.setDimensions(height, width);
- sendDimensionsChanged(currentHeight, currentWidth, height, width);
- }
-
- private void sendDimensionsChanged(int oldHeight, int oldWidth, int newHeight, int newWidth) {
- // determine what has changed
- if (oldWidth == newWidth) {
- if (oldHeight < newHeight) {
- sendLinesChangedToSnapshot(oldHeight, newHeight - oldHeight);
- } else {
- sendLinesChangedToSnapshot(newHeight, oldHeight - newHeight);
- }
- } else {
- sendLinesChangedToSnapshot(0, oldHeight);
- }
- sendDimensionsChanged();
- }
-
- @Override public LineSegment[] getLineSegments(int line, int column, int len) {
- return data.getLineSegments(line, column, len);
- }
-
- @Override public char getChar(int line, int column) {
- return data.getChar(line, column);
- }
-
- @Override public Style getStyle(int line, int column) {
- return data.getStyle(line, column);
- }
-
- @Override public void setChar(int line, int column, char c, Style style) {
- data.setChar(line, column, c, style);
- sendLineChangedToSnapshots(line);
- }
-
- @Override public void setChars(int line, int column, char[] chars, Style style) {
- data.setChars(line, column, chars, style);
- sendLineChangedToSnapshots(line);
- }
-
- @Override public void setChars(int line, int column, char[] chars, int start, int length, Style style) {
- data.setChars(line, column, chars, start, length, style);
- sendLineChangedToSnapshots(line);
- }
-
- @Override public void scroll(int startLine, int size, int shift) {
- data.scroll(startLine, size, shift);
- sendScrolledToSnapshots(startLine, size, shift);
- }
-
- @Override public String toString() {
- return data.toString();
- }
-
- private void sendDimensionsChanged() {
- for (TerminalTextDataSnapshot snapshot : snapshots) {
- snapshot.markDimensionsChanged();
- }
- }
-
- protected void sendLineChangedToSnapshots(int line) {
- for (TerminalTextDataSnapshot snapshot : snapshots) {
- snapshot.markLineChanged(line);
- }
- }
-
- protected void sendLinesChangedToSnapshot(int startingLine, int lineCount) {
- for (TerminalTextDataSnapshot snapshot : snapshots) {
- snapshot.markLinesChanged(startingLine, lineCount);
- }
- }
-
- /**
- * Notifies snapshot that a region was scrolled.
- * @param startingLine first line of scrolled region.
- * @param lineCount size of scrolled region (number of lines.)
- * @param shift delta by which the region is scrolled.
- */
- protected void sendScrolledToSnapshots(int startingLine, int lineCount, int shift) {
- for (TerminalTextDataSnapshot snapshot : snapshots) {
- snapshot.scroll(startingLine, lineCount, shift);
- }
- }
-
- protected void sendCursorChanged() {
- for (TerminalTextDataSnapshot snapshot : snapshots) {
- snapshot.markCursorChanged();
- }
- }
-
- /**
- * Removes the snapshot from the observer list.
- * @param snapshot a snapshot of a terminal model.
- */
- protected void removeSnapshot(TerminalTextDataSnapshot snapshot) {
- snapshots.remove(snapshot);
- }
-
- @Override public ITerminalTextDataSnapshot makeSnapshot() {
- TerminalTextDataSnapshot snapshot = new TerminalTextDataSnapshot(this);
- snapshot.markDimensionsChanged();
- snapshots.add(snapshot);
- return snapshot;
- }
-
- @Override public void addLine() {
- int oldHeight = getHeight();
- data.addLine();
- // was is an append or a scroll?
- int newHeight = getHeight();
- if (newHeight > oldHeight) {
- // the line was appended
- sendLinesChangedToSnapshot(oldHeight, 1);
- int width = getWidth();
- sendDimensionsChanged(oldHeight, width, newHeight, width);
- } else {
- // the line was scrolled
- sendScrolledToSnapshots(0, oldHeight, -1);
- }
- }
-
- @Override public void copy(ITerminalTextData source) {
- data.copy(source);
- cursorLine = source.getCursorLine();
- cursorColumn = source.getCursorColumn();
- }
-
- @Override public void copyLine(ITerminalTextData source, int sourceLine, int destinationLine) {
- data.copyLine(source, sourceLine, destinationLine);
- }
-
- @Override public void copyRange(ITerminalTextData source, int sourceStartLine, int destinationStartLine, int length) {
- data.copyRange(source, sourceStartLine, destinationStartLine, length);
- }
-
- @Override public char[] getChars(int line) {
- return data.getChars(line);
- }
-
- @Override public Style[] getStyles(int line) {
- return data.getStyles(line);
- }
-
- @Override public int getMaxHeight() {
- return data.getMaxHeight();
- }
-
- @Override public void setMaxHeight(int height) {
- data.setMaxHeight(height);
- }
-
- @Override public void cleanLine(int line) {
- data.cleanLine(line);
- sendLineChangedToSnapshots(line);
- }
-
- @Override public int getCursorColumn() {
- return cursorColumn;
- }
-
- @Override public int getCursorLine() {
- return cursorLine;
- }
-
- @Override public void setCursorColumn(int column) {
- cursorColumn = column;
- sendCursorChanged();
- }
-
- @Override public void setCursorLine(int line) {
- cursorLine = line;
- sendCursorChanged();
- }
-}
diff --git a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/model/TerminalTextDataFastScroll.java b/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/model/TerminalTextDataFastScroll.java
deleted file mode 100644
index 46acdd2..0000000
--- a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/model/TerminalTextDataFastScroll.java
+++ /dev/null
@@ -1,227 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007 Wind River Systems, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *******************************************************************************/
-package com.google.eclipse.tm.internal.terminal.model;
-
-import org.eclipse.core.runtime.Assert;
-
-import com.google.eclipse.tm.terminal.model.*;
-
-/**
- * This class is optimized for scrolling the entire {@link #getHeight()}. The scrolling is done by moving an offset into
- * the data and using the modulo operator.
- */
-public class TerminalTextDataFastScroll implements ITerminalTextData {
- private final ITerminalTextData data;
- private int height;
- private int maxHeight;
- private int offset;
-
- public TerminalTextDataFastScroll(ITerminalTextData data, int maxHeight) {
- this.maxHeight = maxHeight;
- this.data = data;
- this.data.setDimensions(this.maxHeight, this.data.getWidth());
- if (this.maxHeight > 2) {
- moveOffset(-2);
- }
- }
-
- public TerminalTextDataFastScroll(int maxHeight) {
- this(new TerminalTextDataStore(), maxHeight);
- }
-
- public TerminalTextDataFastScroll() {
- this(new TerminalTextDataStore(), 1);
- }
-
- private int getPositionOfLine(int line) {
- return (line + offset) % maxHeight;
- }
-
- private void moveOffset(int delta) {
- Assert.isTrue(Math.abs(delta) < maxHeight);
- offset = (maxHeight + offset + delta) % maxHeight;
- }
-
- @Override public void addLine() {
- if (getHeight() < maxHeight) {
- setDimensions(getHeight() + 1, getWidth());
- } else {
- scroll(0, getHeight(), -1);
- }
- }
-
- @Override public void cleanLine(int line) {
- data.cleanLine(getPositionOfLine(line));
- }
-
- @Override public void copy(ITerminalTextData source) {
- int height = source.getHeight();
- setDimensions(source.getHeight(), source.getWidth());
- for (int i = 0; i < height; i++) {
- data.copyLine(source, i, getPositionOfLine(i));
- }
- }
-
- @Override public void copyLine(ITerminalTextData source, int sourceLine, int destinationLine) {
- data.copyLine(source, sourceLine, getPositionOfLine(destinationLine));
- }
-
- @Override public void copyRange(ITerminalTextData source, int sourceStartLine, int destinationStartLine, int length) {
- Assert.isTrue(destinationStartLine >= 0 && destinationStartLine + length <= height);
- for (int i = 0; i < length; i++) {
- data.copyLine(source, i + sourceStartLine, getPositionOfLine(i + destinationStartLine));
- }
- }
-
- @Override public char getChar(int line, int column) {
- Assert.isTrue(line >= 0 && line < height);
- return data.getChar(getPositionOfLine(line), column);
- }
-
- @Override public char[] getChars(int line) {
- Assert.isTrue(line >= 0 && line < height);
- return data.getChars(getPositionOfLine(line));
- }
-
- @Override public int getHeight() {
- return height;
- }
-
- @Override public LineSegment[] getLineSegments(int line, int startCol, int numberOfCols) {
- Assert.isTrue(line >= 0 && line < height);
- return data.getLineSegments(getPositionOfLine(line), startCol, numberOfCols);
- }
-
- @Override public int getMaxHeight() {
- return maxHeight;
- }
-
- @Override public Style getStyle(int line, int column) {
- Assert.isTrue(line >= 0 && line < height);
- return data.getStyle(getPositionOfLine(line), column);
- }
-
- @Override public Style[] getStyles(int line) {
- Assert.isTrue(line >= 0 && line < height);
- return data.getStyles(getPositionOfLine(line));
- }
-
- @Override public int getWidth() {
- return data.getWidth();
- }
-
- @Override public ITerminalTextDataSnapshot makeSnapshot() {
- return data.makeSnapshot();
- }
-
- private void cleanLines(int line, int len) {
- for (int i = line; i < line + len; i++) {
- data.cleanLine(getPositionOfLine(i));
- }
- }
-
- @Override public void scroll(int startLine, int size, int shift) {
- Assert.isTrue(startLine >= 0 && startLine + size <= height);
- if (shift >= maxHeight || -shift >= maxHeight) {
- cleanLines(startLine, maxHeight - startLine);
- return;
- }
- if (size == height) {
- // This is the case this class is optimized for!
- moveOffset(-shift);
- // We only have to clean the lines that appear by the move.
- if (shift < 0) {
- cleanLines(Math.max(startLine, startLine + size + shift), Math.min(-shift, getHeight() - startLine));
- } else {
- cleanLines(startLine, Math.min(shift, getHeight() - startLine));
- }
- } else {
- // we have to copy the lines.
- if (shift < 0) {
- // move the region up
- for (int i = startLine; i < startLine + size + shift; i++) {
- data.copyLine(data, getPositionOfLine(i - shift), getPositionOfLine(i));
- }
- // then clean the opened lines
- cleanLines(Math.max(0, startLine + size + shift), Math.min(-shift, getHeight() - startLine));
- } else {
- for (int i = startLine + size - 1; i >= startLine && i - shift >= 0; i--) {
- data.copyLine(data, getPositionOfLine(i - shift), getPositionOfLine(i));
- }
- cleanLines(startLine, Math.min(shift, getHeight() - startLine));
- }
- }
- }
-
- @Override public void setChar(int line, int column, char c, Style style) {
- Assert.isTrue(line >= 0 && line < height);
- data.setChar(getPositionOfLine(line), column, c, style);
- }
-
- @Override public void setChars(int line, int column, char[] chars, int start, int len, Style style) {
- Assert.isTrue(line >= 0 && line < height);
- data.setChars(getPositionOfLine(line), column, chars, start, len, style);
- }
-
- @Override public void setChars(int line, int column, char[] chars, Style style) {
- Assert.isTrue(line >= 0 && line < height);
- data.setChars(getPositionOfLine(line), column, chars, style);
- }
-
- @Override public void setDimensions(int height, int width) {
- Assert.isTrue(height >= 0 && width >= 0);
- if (height > maxHeight) {
- setMaxHeight(height);
- }
- this.height = height;
- if (width != data.getWidth()) {
- data.setDimensions(maxHeight, width);
- }
- }
-
- @Override public void setMaxHeight(int maxHeight) {
- Assert.isTrue(maxHeight >= height);
- // move everything to offset0
- int start = getPositionOfLine(0);
- if (start != 0) {
- // invent a more efficient algorithm....
- ITerminalTextData buffer = new TerminalTextDataStore();
- // create a buffer with the expected height
- buffer.setDimensions(maxHeight, getWidth());
- int n = Math.min(maxHeight - start, maxHeight);
- // copy the first part
- buffer.copyRange(data, start, 0, n);
- // copy the second part
- if (n < maxHeight) {
- buffer.copyRange(data, 0, n, Math.min(maxHeight - n, maxHeight - n));
- }
- // copy the buffer back to our data
- data.copy(buffer);
- moveOffset(-start);
- } else {
- data.setDimensions(maxHeight, data.getWidth());
- }
- this.maxHeight = maxHeight;
- }
-
- @Override public int getCursorColumn() {
- throw new UnsupportedOperationException();
- }
-
- @Override public int getCursorLine() {
- throw new UnsupportedOperationException();
- }
-
- @Override public void setCursorColumn(int column) {
- throw new UnsupportedOperationException();
- }
-
- @Override public void setCursorLine(int line) {
- throw new UnsupportedOperationException();
- }
-}
diff --git a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/model/TerminalTextDataSnapshot.java b/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/model/TerminalTextDataSnapshot.java
deleted file mode 100644
index aed2273..0000000
--- a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/model/TerminalTextDataSnapshot.java
+++ /dev/null
@@ -1,236 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007 Wind River Systems, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *******************************************************************************/
-package com.google.eclipse.tm.internal.terminal.model;
-
-import java.util.*;
-
-import org.eclipse.core.runtime.Assert;
-
-import com.google.eclipse.tm.terminal.model.*;
-
-class TerminalTextDataSnapshot implements ITerminalTextDataSnapshot {
- // The changes of the current snapshot relative to the previous snapshot.
- private volatile ISnapshotChanges currentChanges;
-
- // Keeps track of changes that happened since the current snapshot has been made.
- private ISnapshotChanges futureChanges;
-
- // Is used as lock and is the reference to the terminal we take snapshots from.
- private final TerminalTextData terminal;
-
- // A snapshot copy of terminal. It does not need internal synchronization.
- private final TerminalTextDataWindow snapshot;
-
- private final List<SnapshotOutOfDateListener> listeners = new ArrayList<SnapshotOutOfDateListener>();
-
- private boolean listenersNeedNotify;
- private int interestWindowSize;
- private int interestWindowStartLine;
-
- TerminalTextDataSnapshot(TerminalTextData terminal) {
- snapshot = new TerminalTextDataWindow();
- this.terminal = terminal;
- currentChanges = new SnapshotChanges(this.terminal.getHeight());
- currentChanges.setTerminalChanged();
- futureChanges = new SnapshotChanges(this.terminal.getHeight());
- futureChanges.markLinesChanged(0, this.terminal.getHeight());
- listenersNeedNotify = true;
- interestWindowSize = -1;
- }
-
- @Override public void detach() {
- terminal.removeSnapshot(this);
- }
-
- @Override public boolean isOutOfDate() {
- // This is called from terminal, therefore we lock on terminal
- synchronized (terminal) {
- return futureChanges.hasChanged();
- }
- }
-
- @Override public void updateSnapshot(boolean detectScrolling) {
- // Make sure terminal does not change while we make the snapshot.
- synchronized (terminal) {
- // let's make the future changes current
- currentChanges = futureChanges;
- futureChanges = new SnapshotChanges(terminal.getHeight());
- futureChanges.setInterestWindow(interestWindowStartLine, interestWindowSize);
- // and update the snapshot
- if (snapshot.getHeight() != terminal.getHeight() || snapshot.getWidth() != terminal.getWidth()) {
- if (interestWindowSize == -1) {
- snapshot.setWindow(0, terminal.getHeight());
- }
- // if the dimensions have changed, we need a full copy.
- snapshot.copy(terminal);
- // and we mark all lines as changed.
- currentChanges.setAllChanged(terminal.getHeight());
- } else {
- // first we do the scroll on the copy
- int start = currentChanges.getScrollWindowStartLine();
- int lines = Math.min(currentChanges.getScrollWindowSize(), snapshot.getHeight() - start);
- snapshot.scroll(start, lines, currentChanges.getScrollWindowShift());
- // and then create the snapshot of the changed lines.
- currentChanges.copyChangedLines(snapshot, terminal);
- }
- listenersNeedNotify = true;
- snapshot.setCursorLine(terminal.getCursorLine());
- snapshot.setCursorColumn(terminal.getCursorColumn());
- }
- if (!detectScrolling) {
- // let's pretend there was no scrolling and convert the scrolling into line changes
- currentChanges.convertScrollingIntoChanges();
- }
- }
-
- @Override public char getChar(int line, int column) {
- return snapshot.getChar(line, column);
- }
-
- @Override public int getHeight() {
- return snapshot.getHeight();
- }
-
- @Override public LineSegment[] getLineSegments(int line, int column, int len) {
- return snapshot.getLineSegments(line, column, len);
- }
-
- @Override public Style getStyle(int line, int column) {
- return snapshot.getStyle(line, column);
- }
-
- @Override public int getWidth() {
- return snapshot.getWidth();
- }
-
- @Override public int getFirstChangedLine() {
- return currentChanges.getFirstChangedLine();
- }
-
- @Override public int getLastChangedLine() {
- return currentChanges.getLastChangedLine();
- }
-
- @Override public boolean hasLineChanged(int line) {
- return currentChanges.hasLineChanged(line);
- }
-
- @Override public boolean hasDimensionsChanged() {
- return currentChanges.hasDimensionsChanged();
- }
-
- @Override public boolean hasTerminalChanged() {
- return currentChanges.hasTerminalChanged();
- }
-
- @Override public int getScrollWindowStartLine() {
- return currentChanges.getScrollWindowStartLine();
- }
-
- @Override public int getScrollWindowSize() {
- return currentChanges.getScrollWindowSize();
- }
-
- @Override public int getScrollWindowShift() {
- return currentChanges.getScrollWindowShift();
- }
-
- void markLineChanged(int line) {
- futureChanges.markLineChanged(line);
- futureChanges.setTerminalChanged();
- notifyListers();
- }
-
- void markLinesChanged(int line, int size) {
- futureChanges.markLinesChanged(line, size);
- futureChanges.setTerminalChanged();
- notifyListers();
- }
-
- void markDimensionsChanged() {
- futureChanges.markDimensionsChanged();
- futureChanges.setTerminalChanged();
- notifyListers();
- }
-
- void markCursorChanged() {
- futureChanges.markCursorChanged();
- futureChanges.setTerminalChanged();
- notifyListers();
- }
-
- void scroll(int startLine, int size, int shift) {
- futureChanges.scroll(startLine, size, shift);
- futureChanges.setTerminalChanged();
- notifyListers();
- }
-
- private void notifyListers() {
- synchronized (terminal) {
- if (listenersNeedNotify) {
- for (SnapshotOutOfDateListener listener : listeners) {
- listener.snapshotOutOfDate(this);
- }
- listenersNeedNotify = false;
- }
- }
- }
-
- @Override public ITerminalTextDataSnapshot makeSnapshot() {
- return snapshot.makeSnapshot();
- }
-
- @Override synchronized public void addListener(SnapshotOutOfDateListener listener) {
- listeners.add(listener);
- }
-
- @Override synchronized public void removeListener(SnapshotOutOfDateListener listener) {
- listeners.remove(listener);
- }
-
- @Override public String toString() {
- return snapshot.toString();
- }
-
- @Override public int getInterestWindowSize() {
- return interestWindowSize;
- }
-
- @Override public int getInterestWindowStartLine() {
- return interestWindowStartLine;
- }
-
- @Override public void setInterestWindow(int startLine, int size) {
- Assert.isTrue(startLine >= 0 && size >= 0);
- interestWindowStartLine = startLine;
- interestWindowSize = size;
- snapshot.setWindow(startLine, size);
- futureChanges.setInterestWindow(startLine, size);
- notifyListers();
- }
-
- @Override public char[] getChars(int line) {
- return snapshot.getChars(line);
- }
-
- @Override public Style[] getStyles(int line) {
- return snapshot.getStyles(line);
- }
-
- @Override public int getCursorColumn() {
- return snapshot.getCursorColumn();
- }
-
- @Override public int getCursorLine() {
- return snapshot.getCursorLine();
- }
-
- @Override public ITerminalTextData getTerminalTextData() {
- return terminal;
- }
-}
diff --git a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/model/TerminalTextDataStore.java b/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/model/TerminalTextDataStore.java
deleted file mode 100644
index 95cd53c..0000000
--- a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/model/TerminalTextDataStore.java
+++ /dev/null
@@ -1,295 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007 Wind River Systems, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *******************************************************************************/
-package com.google.eclipse.tm.internal.terminal.model;
-
-import static java.util.Arrays.copyOf;
-
-import java.lang.reflect.Array;
-import java.util.*;
-
-import org.eclipse.core.runtime.Assert;
-
-import com.google.eclipse.tm.terminal.model.*;
-
-public class TerminalTextDataStore implements ITerminalTextData {
- private char[][] chars;
- private Style[][] styles;
- private int width;
- private int height;
- private int maxHeight;
- private int cursorColumn;
- private int cursorLine;
-
- public TerminalTextDataStore() {
- chars = new char[0][];
- styles = new Style[0][];
- width = 0;
- }
-
- @Override public int getWidth() {
- return width;
- }
-
- @Override public int getHeight() {
- return height;
- }
-
- @Override public void setDimensions(int height, int width) {
- Assert.isTrue(height >= 0 && width >= 0);
- // Just extend the region.
- if (height > chars.length) {
- int h = 4 * height / 3;
- if (maxHeight > 0 && h > maxHeight) {
- h = maxHeight;
- }
- styles = (Style[][]) resizeArray(styles, height);
- chars = (char[][]) resizeArray(chars, height);
- }
- // Clean the new lines
- if (height > this.height) {
- for (int i = this.height; i < height; i++) {
- styles[i] = null;
- chars[i] = null;
- }
- }
- // Set dimensions after successful resize.
- this.width = width;
- this.height = height;
- }
-
- /**
- * Reallocates an array with a new size, and copies the contents of the old array to the new array.
- *
- * @param originalArray the old array, to be reallocated.
- * @param newSize the new array size.
- * @return A new array with the same contents (chopped off if needed or filled with 0 or null).
- */
- private Object resizeArray(Object originalArray, int newSize) {
- int oldSize = Array.getLength(originalArray);
- if (oldSize == newSize) {
- return originalArray;
- }
- Class<?> elementType = originalArray.getClass().getComponentType();
- Object newArray = Array.newInstance(elementType, newSize);
- int preserveLength = Math.min(oldSize, newSize);
- if (preserveLength > 0) {
- System.arraycopy(originalArray, 0, newArray, 0, preserveLength);
- }
- return newArray;
- }
-
- @Override public LineSegment[] getLineSegments(int line, int startingColumn, int columnCount) {
- // get the styles and chars for this line
- Style[] styles = this.styles[line];
- char[] chars = this.chars[line];
- int column = startingColumn;
- int size = startingColumn + columnCount;
- // Expand the line if needed
- if (styles == null) {
- styles = new Style[size];
- } else if (styles.length < size) {
- styles = (Style[]) resizeArray(styles, size);
- }
- if (chars == null) {
- chars = new char[size];
- } else if (chars.length < size) {
- chars = (char[]) resizeArray(chars, size);
- }
- // Create the line segments
- Style style = styles[startingColumn];
- List<LineSegment> segments = new ArrayList<LineSegment>();
- for (int i = startingColumn; i < size; i++) {
- if (styles[i] != style) {
- segments.add(new LineSegment(column, new String(chars, column, i - column), style));
- style = styles[i];
- column = i;
- }
- }
- if (column < size) {
- segments.add(new LineSegment(column, new String(chars, column, size - column), style));
- }
- return segments.toArray(new LineSegment[segments.size()]);
- }
-
- @Override public char getChar(int line, int column) {
- Assert.isTrue(column < width);
- if (chars[line] == null || column >= chars[line].length) {
- return 0;
- }
- return chars[line][column];
- }
-
- @Override public Style getStyle(int line, int column) {
- Assert.isTrue(column < width);
- if (styles[line] == null || column >= styles[line].length) {
- return null;
- }
- return styles[line][column];
- }
-
- void ensureLineLength(int iLine, int length) {
- if (length > width) {
- throw new RuntimeException();
- }
- if (chars[iLine] == null) {
- chars[iLine] = new char[length];
- } else if (chars[iLine].length < length) {
- chars[iLine] = (char[]) resizeArray(chars[iLine], length);
- }
- if (styles[iLine] == null) {
- styles[iLine] = new Style[length];
- } else if (styles[iLine].length < length) {
- styles[iLine] = (Style[]) resizeArray(styles[iLine], length);
- }
- }
-
- @Override public void setChar(int line, int column, char c, Style style) {
- ensureLineLength(line, column + 1);
- chars[line][column] = c;
- styles[line][column] = style;
- }
-
- @Override public void setChars(int line, int column, char[] chars, Style style) {
- setChars(line, column, chars, 0, chars.length, style);
- }
-
- @Override public void setChars(int line, int column, char[] chars, int start, int len, Style style) {
- ensureLineLength(line, column + len);
- for (int i = 0; i < len; i++) {
- this.chars[line][column + i] = chars[i + start];
- this.styles[line][column + i] = style;
- }
- }
-
- @Override public void scroll(int startLine, int size, int shift) {
- Assert.isTrue(startLine + size <= getHeight());
- if (shift < 0) {
- // move the region up
- for (int i = startLine; i < startLine + size + shift; i++) {
- chars[i] = chars[i - shift];
- styles[i] = styles[i - shift];
- }
- // then clean the opened lines
- cleanLines(Math.max(startLine, startLine + size + shift), Math.min(-shift, getHeight() - startLine));
- } else {
- for (int i = startLine + size - 1; i >= startLine && i - shift >= 0; i--) {
- chars[i] = chars[i - shift];
- styles[i] = styles[i - shift];
- }
- cleanLines(startLine, Math.min(shift, getHeight() - startLine));
- }
- }
-
- private void cleanLines(int line, int len) {
- for (int i = line; i < line + len; i++) {
- chars[i] = null;
- styles[i] = null;
- }
- }
-
- @Override public String toString() {
- StringBuffer buff = new StringBuffer();
- for (int line = 0; line < getHeight(); line++) {
- if (line > 0) {
- buff.append("\n");
- }
- for (int column = 0; column < width; column++) {
- buff.append(getChar(line, column));
- }
- }
- return buff.toString();
- }
-
- @Override public ITerminalTextDataSnapshot makeSnapshot() {
- throw new UnsupportedOperationException();
- }
-
- @Override public void addLine() {
- if (maxHeight > 0 && getHeight() < maxHeight) {
- setDimensions(getHeight() + 1, getWidth());
- } else {
- scroll(0, getHeight(), -1);
- }
- }
-
- @Override public void copy(ITerminalTextData source) {
- width = source.getWidth();
- int newHeight = source.getHeight();
- if (getHeight() != newHeight) {
- chars = new char[newHeight][];
- styles = new Style[newHeight][];
- }
- for (int i = 0; i < newHeight; i++) {
- chars[i] = source.getChars(i);
- styles[i] = source.getStyles(i);
- }
- height = newHeight;
- cursorLine = source.getCursorLine();
- cursorColumn = source.getCursorColumn();
- }
-
- @Override public void copyRange(ITerminalTextData source, int sourceStartLine, int destStartLine, int length) {
- for (int i = 0; i < length; i++) {
- chars[i + destStartLine] = source.getChars(i + sourceStartLine);
- styles[i + destStartLine] = source.getStyles(i + sourceStartLine);
- }
- }
-
- @Override public void copyLine(ITerminalTextData source, int sourceLine, int destLine) {
- chars[destLine] = source.getChars(sourceLine);
- styles[destLine] = source.getStyles(sourceLine);
- }
-
- @Override public char[] getChars(int line) {
- if (chars[line] == null) {
- return null;
- }
- return chars[line].clone();
- }
-
- @Override public Style[] getStyles(int line) {
- if (styles[line] == null) {
- return null;
- }
- return styles[line].clone();
- }
-
- public void setLine(int line, char[] chars, Style[] styles) {
- this.chars[line] = copyOf(chars, chars.length);
- this.styles[line] = copyOf(styles, styles.length);
- }
-
- @Override public void setMaxHeight(int height) {
- maxHeight = height;
- }
-
- @Override public int getMaxHeight() {
- return maxHeight;
- }
-
- @Override public void cleanLine(int line) {
- chars[line] = null;
- styles[line] = null;
- }
-
- @Override public int getCursorColumn() {
- return cursorColumn;
- }
-
- @Override public int getCursorLine() {
- return cursorLine;
- }
-
- @Override public void setCursorColumn(int column) {
- cursorColumn = column;
- }
-
- @Override public void setCursorLine(int line) {
- cursorLine = line;
- }
-}
diff --git a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/model/TerminalTextDataWindow.java b/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/model/TerminalTextDataWindow.java
deleted file mode 100644
index 299fa67..0000000
--- a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/model/TerminalTextDataWindow.java
+++ /dev/null
@@ -1,215 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007 Wind River Systems, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *******************************************************************************/
-package com.google.eclipse.tm.internal.terminal.model;
-
-import org.eclipse.core.runtime.Assert;
-
-import com.google.eclipse.tm.terminal.model.*;
-
-/**
- * This class stores the data only within a window {@link #setWindow(int, int)} and {@link #getWindowStartLine()} and
- * {@link #getWindowSize()}. Everything outside the is {@code char=='\000'} and {@code style=null}.
- */
-public class TerminalTextDataWindow implements ITerminalTextData {
- private final ITerminalTextData data;
-
- private int windowStartLine;
- private int windowSize;
- private int height;
- private int maxHeight;
-
- public TerminalTextDataWindow(ITerminalTextData data) {
- this.data = data;
- }
-
- public TerminalTextDataWindow() {
- this(new TerminalTextDataStore());
- }
-
- private boolean isInWindow(int line) {
- return line >= windowStartLine && line < windowStartLine + windowSize;
- }
-
- @Override public char getChar(int line, int column) {
- if (!isInWindow(line)) {
- return 0;
- }
- return data.getChar(line - windowStartLine, column);
- }
-
- @Override public char[] getChars(int line) {
- if (!isInWindow(line)) {
- return null;
- }
- return data.getChars(line - windowStartLine);
- }
-
- @Override public int getHeight() {
- return height;
- }
-
- @Override public LineSegment[] getLineSegments(int line, int startingColumn, int columnCount) {
- if (!isInWindow(line)) {
- return new LineSegment[] { new LineSegment(startingColumn, new String(new char[columnCount]), null) };
- }
- return data.getLineSegments(line - windowStartLine, startingColumn, columnCount);
- }
-
- @Override public int getMaxHeight() {
- return maxHeight;
- }
-
- @Override public Style getStyle(int line, int column) {
- if (!isInWindow(line)) {
- return null;
- }
- return data.getStyle(line - windowStartLine, column);
- }
-
- @Override public Style[] getStyles(int line) {
- if (!isInWindow(line)) {
- return null;
- }
- return data.getStyles(line - windowStartLine);
- }
-
- @Override public int getWidth() {
- return data.getWidth();
- }
-
- @Override public ITerminalTextDataSnapshot makeSnapshot() {
- throw new UnsupportedOperationException();
- }
-
- @Override public void addLine() {
- if (maxHeight > 0 && getHeight() < maxHeight) {
- setDimensions(getHeight() + 1, getWidth());
- } else {
- scroll(0, getHeight(), -1);
- }
- }
-
- @Override public void copy(ITerminalTextData source) {
- // We inherit the dimensions of the source.
- setDimensions(source.getHeight(), source.getWidth());
- int n = Math.min(windowSize, source.getHeight() - windowStartLine);
- if (n > 0) {
- data.copyRange(source, windowStartLine, 0, n);
- }
- }
-
- @Override public void copyRange(ITerminalTextData source, int sourceStartLine, int destinationStartLine, int length) {
- int newLength = length;
- int destinationStart = destinationStartLine - windowStartLine;
- int sourceStart = sourceStartLine;
- // If start outside our range, cut the length to copy.
- if (destinationStart < 0) {
- newLength += destinationStart;
- sourceStart -= destinationStart;
- destinationStart = 0;
- }
- // Do not exceed the window size.
- newLength = Math.min(newLength, windowSize);
- if (newLength > 0) {
- data.copyRange(source, sourceStart, destinationStart, newLength);
- }
- }
-
- @Override public void copyLine(ITerminalTextData source, int sourceLine, int destLine) {
- if (isInWindow(destLine)) {
- data.copyLine(source, sourceLine, destLine - windowStartLine);
- }
- }
-
- @Override public void scroll(int startLine, int lineCount, int shift) {
- Assert.isTrue(startLine >= 0 && startLine + lineCount <= height);
- int length = lineCount;
- int start = startLine - windowStartLine;
- // If start outside our range, cut the length to copy.
- if (start < 0) {
- length += start;
- start = 0;
- }
- length = Math.min(length, windowSize - start);
- // do not exceed the window size
- if (length > 0) {
- data.scroll(start, length, shift);
- }
- }
-
- @Override public void setChar(int line, int column, char c, Style style) {
- if (!isInWindow(line)) {
- return;
- }
- data.setChar(line - windowStartLine, column, c, style);
- }
-
- @Override public void setChars(int line, int column, char[] chars, int start, int len, Style style) {
- if (!isInWindow(line)) {
- return;
- }
- data.setChars(line - windowStartLine, column, chars, start, len, style);
- }
-
- @Override public void setChars(int line, int column, char[] chars, Style style) {
- if (!isInWindow(line)) {
- return;
- }
- data.setChars(line - windowStartLine, column, chars, style);
- }
-
- @Override public void setDimensions(int height, int width) {
- Assert.isTrue(height >= 0);
- data.setDimensions(windowSize, width);
- setHeight(height);
- }
-
- @Override public void setMaxHeight(int maxHeight) {
- this.maxHeight = maxHeight;
- }
-
- public void setWindow(int startLine, int size) {
- windowStartLine = startLine;
- windowSize = size;
- data.setDimensions(windowSize, getWidth());
- }
-
- public int getWindowStartLine() {
- return windowStartLine;
- }
-
- public int getWindowSize() {
- return windowSize;
- }
-
- public void setHeight(int height) {
- this.height = height;
- }
-
- @Override public void cleanLine(int line) {
- if (isInWindow(line)) {
- data.cleanLine(line - windowStartLine);
- }
- }
-
- @Override public int getCursorColumn() {
- return data.getCursorColumn();
- }
-
- @Override public int getCursorLine() {
- return data.getCursorLine();
- }
-
- @Override public void setCursorColumn(int column) {
- data.setCursorColumn(column);
- }
-
- @Override public void setCursorLine(int line) {
- data.setCursorLine(line);
- }
-}
diff --git a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/provisional/api/ITerminalConnector.java b/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/provisional/api/ITerminalConnector.java
deleted file mode 100644
index f35ce93..0000000
--- a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/provisional/api/ITerminalConnector.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006, 2011 Wind River Systems, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *******************************************************************************/
-package com.google.eclipse.tm.internal.terminal.provisional.api;
-
-import java.io.OutputStream;
-
-import org.eclipse.core.runtime.IAdaptable;
-
-/**
- * A connection type.
- *
- * @author Michael Scharf
- */
-public interface ITerminalConnector extends IAdaptable {
- String getId();
-
- String getName();
-
- boolean isInitialized();
-
- String getInitializationErrorMessage();
-
- void connect(ITerminalControl control);
-
- void disconnect();
-
- boolean isLocalEcho();
-
- void setTerminalSize(int newWidth, int newHeight);
-
- OutputStream getTerminalToRemoteStream();
-
- String getSettingsSummary();
-}
diff --git a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/provisional/api/ITerminalControl.java b/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/provisional/api/ITerminalControl.java
deleted file mode 100644
index ab0cc0f..0000000
--- a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/provisional/api/ITerminalControl.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006, 2011 Wind River Systems, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *******************************************************************************/
-package com.google.eclipse.tm.internal.terminal.provisional.api;
-
-import java.io.*;
-
-import org.eclipse.swt.widgets.*;
-
-/**
- * Represents the terminal view as seen by a terminal connection.
- *
- * @author Michael Scharf
- */
-public interface ITerminalControl {
- TerminalState getState();
-
- void setState(TerminalState state);
-
- void setUpTerminal(Composite parent);
-
- Shell getShell();
-
- /**
- * Set the encoding that the terminal uses to decode bytes from the Terminal-to-remote-Stream into Unicode characters
- * used in Java; or, to encode characters typed by the user into bytes sent over the wire to the remote.
- * <p>
- * By default, the local platform default encoding is used. Also note that the encoding must not be applied in case
- * the terminal stream is processed by some data transfer protocol which requires binary data.
- * </p>
- * <p>
- * Validity of the encoding set here is not checked. Since some encodings do not cover the entire range of Unicode
- * characters, it can happen that a particular Unicode text typed in by the user can not be encoded into a byte stream
- * with the encoding specified. and {@link UnsupportedEncodingException} will be thrown in this case at the time the
- * text is about to be processed.
- * </p>
- * <p>
- * The concrete encoding to use can either be specified manually by a user, by means of a dialog, or a connector can
- * try to obtain it automatically from the remote side (e.g. by evaluating an environment variable such as LANG on
- * UNIX systems.)
- * </p>
- *
- * @param encoding the new encoding.
- * @throws UnsupportedEncodingException if the given encoding is not supported.
- */
- void setEncoding(String encoding) throws UnsupportedEncodingException;
-
- String getEncoding();
-
- /**
- * Show a text in the terminal. If puts newlines at the beginning and the end.
- *
- * @param text the text to display.
- */
- void displayTextInTerminal(String text);
-
- /**
- * Returns the stream used to write to the terminal. Any bytes written to this stream appear in the terminal or are
- * interpreted by the emulator as control sequences. The stream in the opposite direction, terminal to remote is in
- * {@link ITerminalConnector#getTerminalToRemoteStream()}.
- *
- * @return the stream used to write to the terminal.
- */
- OutputStream getRemoteToTerminalOutputStream();
-
- void setTerminalTitle(String title);
-
- /**
- * Show an error message during connect.
- * @param errorMessage the new error message.
- */
- // TODO(Michael Scharf): Should be replaced by a better error notification mechanism!
- void setErrorMessage(String errorMessage);
-}
diff --git a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/provisional/api/Logger.java b/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/provisional/api/Logger.java
deleted file mode 100644
index e1142e7..0000000
--- a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/provisional/api/Logger.java
+++ /dev/null
@@ -1,147 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005, 2011 Wind River Systems, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *******************************************************************************/
-package com.google.eclipse.tm.internal.terminal.provisional.api;
-
-import static org.eclipse.core.runtime.IStatus.*;
-
-import java.io.*;
-
-import org.eclipse.core.runtime.Status;
-
-import com.google.eclipse.tm.internal.terminal.control.impl.TerminalPlugin;
-
-/**
- * A simple logger class. Every method in this class is static, so they can be called from both class and instance
- * methods. To use this class, write code like this:
- * <p>
- *
- * <pre>
- * Logger.log("something has happened");
- * Logger.log("counter is " + counter);
- * </pre>
- *
- * @author Fran Litterio <francis.litterio@windriver.com>
- */
-public final class Logger {
- public static final String TRACE_DEBUG_LOG = "org.eclipse.tm.terminal/debug/log";
- public static final String TRACE_DEBUG_LOG_ERROR = "org.eclipse.tm.terminal/debug/log/error";
- public static final String TRACE_DEBUG_LOG_INFO = "org.eclipse.tm.terminal/debug/log/info";
- public static final String TRACE_DEBUG_LOG_CHAR = "org.eclipse.tm.terminal/debug/log/char";
- public static final String TRACE_DEBUG_LOG_BUFFER_SIZE = "org.eclipse.tm.terminal/debug/log/buffer/size";
-
- private static PrintStream logStream;
-
- static {
- String logFile = logFile();
- if (logFile != null) {
- try {
- logStream = new PrintStream(new FileOutputStream(logFile, true));
- } catch (Exception ex) {
- logStream = System.err;
- logStream.println("Exception when opening log file -- logging to stderr!");
- ex.printStackTrace(logStream);
- }
- }
- }
-
- private static String logFile() {
- File directory = new File("C:\\eclipselogs");
- if (directory.isDirectory()) {
- return directory + "\\tmterminal.log";
- }
- directory = new File("/tmp/eclipselogs");
- if (directory.isDirectory()) {
- return directory + "/tmterminal.log";
- }
- return null;
- }
-
- /**
- * Encodes text such that non-printable control characters are converted into user-readable escape sequences for
- * logging.
- * @param message the text to encode
- * @return encoded the encoded text;
- */
- public static final String encode(String message) {
- boolean encoded = false;
- StringBuilder buffer = new StringBuilder(message.length() + 32);
- for (int i = 0; i < message.length(); i++) {
- char c = message.charAt(i);
- switch (c) {
- case '\\':
- case '\'':
- buffer.append('\\').append(c);
- encoded = true;
- break;
- case '\r':
- buffer.append('\\').append('r');
- encoded = true;
- break;
- case '\n':
- buffer.append('\\').append('n');
- encoded = true;
- break;
- case '\t':
- buffer.append('\\').append('t');
- encoded = true;
- break;
- case '\f':
- buffer.append('\\').append('f');
- encoded = true;
- break;
- case '\b':
- buffer.append('\\').append('b');
- encoded = true;
- break;
- default:
- if (c <= '\u000f') {
- buffer.append('\\').append('x').append('0').append(Integer.toHexString(c));
- encoded = true;
- } else if (c >= ' ' && c < '\u007f') {
- buffer.append(c);
- } else if (c <= '\u00ff') {
- buffer.append('\\').append('x').append(Integer.toHexString(c));
- encoded = true;
- } else {
- buffer.append('\\').append('u');
- if (c <= '\u0fff') {
- buffer.append('0');
- }
- buffer.append(Integer.toHexString(c));
- encoded = true;
- }
- }
- }
- if (encoded) {
- return buffer.toString();
- }
- return message;
- }
-
- public static final boolean isLogEnabled() {
- return (logStream != null);
- }
-
- public static final void log(String message) {
- if (logStream != null) {
- StackTraceElement caller = Thread.currentThread().getStackTrace()[1];
- String className = caller.getClassName();
- className = className.substring(className.lastIndexOf('.') + 1);
- logStream.println(className + "." + caller.getMethodName() + ":" + caller.getLineNumber() + ": " + message);
- logStream.flush();
- }
- }
-
- public static final void logException(Exception e) {
- if (TerminalPlugin.getDefault() != null) {
- TerminalPlugin.getDefault().getLog().log(new Status(ERROR, TerminalPlugin.PLUGIN_ID, OK, e.getMessage(), e));
- } else {
- e.printStackTrace();
- }
- }
-}
diff --git a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/provisional/api/TerminalState.java b/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/provisional/api/TerminalState.java
deleted file mode 100644
index 384d05a..0000000
--- a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/provisional/api/TerminalState.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006, 2011 Wind River Systems, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *******************************************************************************/
-package com.google.eclipse.tm.internal.terminal.provisional.api;
-
-/**
- * Represent the sate of a terminal connection.
- *
- * @author Michael Scharf
- */
-public enum TerminalState {
- /**
- * The terminal is not connected.
- */
- CLOSED("CLOSED"), CONNECTING("CONNECTING..."), CONNECTED("CONNECTED");
-
- private final String state;
-
- private TerminalState(String state) {
- this.state = state;
- }
-
- @Override public String toString() {
- return state;
- }
-}
diff --git a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/provisional/api/provider/TerminalConnectorDelegate.java b/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/provisional/api/provider/TerminalConnectorDelegate.java
deleted file mode 100644
index 8e4c853..0000000
--- a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/provisional/api/provider/TerminalConnectorDelegate.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008 Wind River Systems, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Michael Scharf (Wind River) - initial API and implementation
- * Martin Oberhuber (Wind River) - [225853][api] Provide more default functionality in TerminalConnectorImpl
- *******************************************************************************/
-package com.google.eclipse.tm.internal.terminal.provisional.api.provider;
-
-import static com.google.eclipse.tm.internal.terminal.provisional.api.TerminalState.CLOSED;
-
-import java.io.OutputStream;
-
-import com.google.eclipse.tm.internal.terminal.provisional.api.ITerminalControl;
-
-/**
- * Abstract base class for all terminal connector implementations.
- *
- * @since org.eclipse.tm.terminal 2.0
- */
-public abstract class TerminalConnectorDelegate {
- // The TerminalControl associated with this connector. Required for advertising state changes when needed.
- protected ITerminalControl terminalControl;
-
- /**
- * Initialize this connector. This is called once after the constructor, in order to perform any required
- * initializations such as loading required native libraries. Any work that may lead to runtime exceptions should be
- * done in this method rather than in the constructor.
- *
- * @throws Exception when the connector fails to initialize (due to missing required libraries, for instance).
- */
- public void initialize() throws Exception {}
-
- public final void connect(ITerminalControl control) {
- this.terminalControl = control;
- connect();
- }
-
- protected abstract void connect();
-
- public final void disconnect() {
- onDisconnect();
- terminalControl.setState(CLOSED);
- }
-
- protected void onDisconnect() {}
-
- /**
- * Returns the terminal-to-remote stream (bytes written to this stream will be sent to the remote site). For the
- * stream in the other direction (remote to terminal see {@link ITerminalControl#getRemoteToTerminalOutputStream()}.
- *
- * @return the terminal-to-remote stream.
- */
- public abstract OutputStream getTerminalToRemoteStream();
-
- /**
- * @return A string that represents the settings of the connection. This representation may be shown in the status
- * line of the terminal view.
- */
- public abstract String getSettingsSummary();
-
- /**
- * Tests if local echo is needed. The default implementation returns {@code false}.
- *
- * @return {@code false} by default.
- */
- public boolean isLocalEcho() {
- return false;
- }
-
- /**
- * Notifies the remote site that the size of the terminal has changed.
- *
- * @param width the new width in characters.
- * @param height the new height in characters.
- */
- public void setTerminalSize(int width, int height) {}
-}
diff --git a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/textcanvas/AbstractTextCanvasModel.java b/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/textcanvas/AbstractTextCanvasModel.java
deleted file mode 100644
index 0afee93..0000000
--- a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/textcanvas/AbstractTextCanvasModel.java
+++ /dev/null
@@ -1,353 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2010 Wind River Systems, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *******************************************************************************/
-package com.google.eclipse.tm.internal.terminal.textcanvas;
-
-import java.util.*;
-
-import org.eclipse.core.runtime.Assert;
-import org.eclipse.swt.graphics.Point;
-
-import com.google.eclipse.tm.terminal.model.*;
-
-public abstract class AbstractTextCanvasModel implements ITextCanvasModel {
- private final List<ITextCanvasModelListener> listeners = new ArrayList<ITextCanvasModelListener>();
- private final Point selectionAnchor = new Point(0, 0);
-
- private final ITerminalTextDataSnapshot snapshot;
-
- private int cursorLine;
- private int cursorColumn;
- private boolean showCursor;
- private long cursorTime;
- private boolean cursorIsEnabled;
- private int lines;
-
- private int selectionStartLine = -1;
- private int seletionEndLine;
- private int selectionStartCoumn;
- private int selectionEndColumn;
- private ITerminalTextDataSnapshot selectionSnapshot;
- private String currentSelection = "";
-
- // do not update while update is running
- boolean inUpdate;
-
- private int columns;
- private boolean useBlinkingCursor;
-
- public AbstractTextCanvasModel(ITerminalTextDataSnapshot snapshot) {
- this.snapshot = snapshot;
- lines = this.snapshot.getHeight();
- }
-
- @Override public void addCellCanvasModelListener(ITextCanvasModelListener listener) {
- listeners.add(listener);
- }
-
- @Override public void removeCellCanvasModelListener(ITextCanvasModelListener listener) {
- listeners.remove(listener);
- }
-
- private void fireCellRangeChanged(int x, int y, int width, int height) {
- for (ITextCanvasModelListener listener : listeners) {
- listener.rangeChanged(x, y, width, height);
- }
- }
-
- private void fireDimensionsChanged(int width, int height) {
- for (ITextCanvasModelListener listener : listeners) {
- listener.dimensionsChanged(width, height);
- }
- }
-
- private void fireTerminalDataChanged() {
- for (ITextCanvasModelListener listener : listeners) {
- listener.terminalDataChanged();
- }
- }
-
- @Override public ITerminalTextDataReadOnly getTerminalText() {
- return snapshot;
- }
-
- protected ITerminalTextDataSnapshot getSnapshot() {
- return snapshot;
- }
-
- private void updateSnapshot() {
- if (!inUpdate && snapshot.isOutOfDate()) {
- inUpdate = true;
- try {
- snapshot.updateSnapshot(false);
- if (snapshot.hasTerminalChanged()) {
- fireTerminalDataChanged();
- }
- // TODO why does hasDimensionsChanged not work?
- // if (snapshot.hasDimensionsChanged()) fireDimensionsChanged();
- if (lines != snapshot.getHeight() || columns != snapshot.getWidth()) {
- fireDimensionsChanged(snapshot.getWidth(), snapshot.getHeight());
- lines = snapshot.getHeight();
- columns = snapshot.getWidth();
- }
- int y = snapshot.getFirstChangedLine();
- // has any line changed?
- if (y < Integer.MAX_VALUE) {
- int height = snapshot.getLastChangedLine() - y + 1;
- fireCellRangeChanged(0, y, snapshot.getWidth(), height);
- }
- } finally {
- inUpdate = false;
- }
- }
- }
-
- /**
- * This method must be called from the UI thread.
- */
- public void update() {
- updateSnapshot();
- updateSelection();
- updateCursor();
- }
-
- @Override public int getCursorColumn() {
- return cursorColumn;
- }
-
- @Override public int getCursorLine() {
- return cursorLine;
- }
-
- @Override public boolean isCursorOn() {
- return showCursor && cursorIsEnabled;
- }
-
- @Override public void setBlinkingCursor(boolean useBlinkingCursor) {
- this.useBlinkingCursor = useBlinkingCursor;
- updateCursor();
- }
-
- // TODO: should be called regularly to draw an update of the blinking cursor?
- private void updateCursor() {
- if (!cursorIsEnabled) {
- return;
- }
- int cursorLine = getSnapshot().getCursorLine();
- int cursorColumn = getSnapshot().getCursorColumn();
- // If cursor at the end put it to the end of the last line.
- if (cursorLine >= getSnapshot().getHeight()) {
- cursorLine = getSnapshot().getHeight() - 1;
- cursorColumn = getSnapshot().getWidth() - 1;
- }
- // Has the cursor moved?
- if (this.cursorLine != cursorLine || this.cursorColumn != cursorColumn) {
- // Hide the old cursor!
- showCursor = false;
- // Clean the previous cursor. Bug 206363: paint also the char to the left and right of the cursor
- int col = this.cursorColumn;
- int width = 2;
- if (col > 0) {
- col--;
- width++;
- }
- fireCellRangeChanged(col, this.cursorLine, width, 1);
- // The cursor is shown when it moves.
- showCursor = true;
- cursorTime = System.currentTimeMillis();
- this.cursorLine = cursorLine;
- this.cursorColumn = cursorColumn;
- // Draw the new cursor
- fireCellRangeChanged(this.cursorColumn, this.cursorLine, 1, 1);
- } else {
- if (useBlinkingCursor) {
- long time = System.currentTimeMillis();
- // TODO Make the cursor blink time customizable.
- if (time - cursorTime > 500) {
- showCursor = !showCursor;
- cursorTime = time;
- // On some windows machines, there is some leftover when updating the cursor.
- // https://bugs.eclipse.org/bugs/show_bug.cgi?id=206363
- int col = this.cursorColumn;
- int width = 2;
- if (col > 0) {
- col--;
- width++;
- }
- fireCellRangeChanged(col, this.cursorLine, width, 1);
- }
- }
- }
- }
-
- @Override public void setVisibleRectangle(int startLine, int startCol, int height, int width) {
- snapshot.setInterestWindow(Math.max(0, startLine), Math.max(1, height));
- update();
- }
-
- protected void showCursor(boolean show) {
- showCursor = true;
- }
-
- @Override public void setCursorEnabled(boolean visible) {
- cursorTime = System.currentTimeMillis();
- showCursor = visible;
- cursorIsEnabled = visible;
- fireCellRangeChanged(cursorColumn, cursorLine, 1, 1);
- }
-
- @Override public boolean isCursorEnabled() {
- return cursorIsEnabled;
- }
-
- @Override public Point getSelectionEnd() {
- if (selectionStartLine < 0) {
- return null;
- }
- return new Point(selectionEndColumn, seletionEndLine);
- }
-
- @Override public Point getSelectionStart() {
- if (selectionStartLine < 0) {
- return null;
- }
- return new Point(selectionStartCoumn, selectionStartLine);
- }
-
- @Override public Point getSelectionAnchor() {
- if (selectionStartLine < 0) {
- return null;
- }
- return new Point(selectionAnchor.x, selectionAnchor.y);
- }
-
- @Override public void setSelectionAnchor(Point anchor) {
- selectionAnchor.x = anchor.x;
- selectionAnchor.y = anchor.y;
- }
-
- @Override public void setSelection(int startLine, int endLine, int startColumn, int endColumn) {
- doSetSelection(startLine, endLine, startColumn, endColumn);
- currentSelection = extractSelectedText();
- }
-
- private void doSetSelection(int startLine, int endLine, int startColumn, int endColumn) {
- Assert.isTrue(startLine < 0 || startLine <= endLine);
- if (startLine >= 0) {
- if (selectionSnapshot == null) {
- selectionSnapshot = snapshot.getTerminalTextData().makeSnapshot();
- selectionSnapshot.updateSnapshot(true);
- }
- } else if (selectionSnapshot != null) {
- selectionSnapshot.detach();
- selectionSnapshot = null;
- }
- int oldStart = selectionStartLine;
- int oldEnd = seletionEndLine;
- selectionStartLine = startLine;
- seletionEndLine = endLine;
- selectionStartCoumn = startColumn;
- selectionEndColumn = endColumn;
- if (selectionSnapshot != null) {
- selectionSnapshot.setInterestWindow(0, selectionSnapshot.getHeight());
- }
- int changedStart;
- int changedEnd;
- if (oldStart < 0) {
- changedStart = selectionStartLine;
- changedEnd = seletionEndLine;
- } else if (selectionStartLine < 0) {
- changedStart = oldStart;
- changedEnd = oldEnd;
- } else {
- changedStart = Math.min(oldStart, selectionStartLine);
- changedEnd = Math.max(oldEnd, seletionEndLine);
- }
- if (changedStart >= 0) {
- fireCellRangeChanged(0, changedStart, snapshot.getWidth(), changedEnd - changedStart + 1);
- }
- }
-
- @Override public boolean hasLineSelection(int line) {
- if (selectionStartLine < 0) {
- return false;
- }
- return line >= selectionStartLine && line <= seletionEndLine;
- }
-
- @Override public String getSelectedText() {
- return currentSelection;
- }
-
- /**
- * Calculates the currently selected text
- * @return the currently selected text
- */
- private String extractSelectedText() {
- if (selectionStartLine < 0 || selectionStartCoumn < 0 || selectionSnapshot == null) {
- return "";
- }
- StringBuilder buffer = new StringBuilder();
- for (int line = selectionStartLine; line <= seletionEndLine; line++) {
- String text;
- char[] chars = selectionSnapshot.getChars(line);
- if (chars != null) {
- text = new String(chars);
- if (line == seletionEndLine && selectionEndColumn >= 0) {
- text = text.substring(0, Math.min(selectionEndColumn + 1, text.length()));
- }
- if (line == selectionStartLine) {
- text = text.substring(Math.min(selectionStartCoumn, text.length()));
- }
- // get rid of the empty space at the end of the lines
- text = text.replaceAll("\000+$","");
- // null means space
- text = text.replace('\000', ' ');
- } else {
- text = "";
- }
- buffer.append(text);
- if (line < seletionEndLine) {
- buffer.append('\n');
- }
- }
- return buffer.toString();
- }
-
- private void updateSelection() {
- if (selectionSnapshot != null && selectionSnapshot.isOutOfDate()) {
- selectionSnapshot.updateSnapshot(true);
- // Has the selection moved?
- if (selectionSnapshot != null && selectionStartLine >= 0 && selectionSnapshot.getScrollWindowSize() > 0) {
- int start = selectionStartLine + selectionSnapshot.getScrollWindowShift();
- int end = seletionEndLine + selectionSnapshot.getScrollWindowShift();
- if (start < 0) {
- if (end >= 0) {
- start = 0;
- } else {
- start = -1;
- }
- }
- doSetSelection(start, end, selectionStartCoumn, selectionEndColumn);
- }
- // Check if the content of the selection has changed. If the content has changed, clear the selection.
- if (currentSelection.length() > 0 && selectionSnapshot != null
- && selectionSnapshot.getFirstChangedLine() <= seletionEndLine
- && selectionSnapshot.getLastChangedLine() >= selectionStartLine) {
- // Has the selected text changed?
- if (!currentSelection.equals(extractSelectedText())) {
- setSelection(-1, -1, -1, -1);
- }
- }
- // Update the observed window...
- if (selectionSnapshot != null) {
- // TODO make -1 to work!
- selectionSnapshot.setInterestWindow(0, selectionSnapshot.getHeight());
- }
- }
- }
-}
\ No newline at end of file
diff --git a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/textcanvas/GridCanvas.java b/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/textcanvas/GridCanvas.java
deleted file mode 100644
index b927d16..0000000
--- a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/textcanvas/GridCanvas.java
+++ /dev/null
@@ -1,203 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2010 Wind River Systems, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *******************************************************************************/
-package com.google.eclipse.tm.internal.terminal.textcanvas;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.widgets.*;
-
-/**
- * A Grid based Canvas. The canvas has rows and columns. CellPainting is done with the abstract method drawCell
- */
-public abstract class GridCanvas extends VirtualCanvas {
- private int cellWidth;
- private int cellHeight;
-
- public GridCanvas(Composite parent, int style) {
- super(parent, style);
- addListener(SWT.MouseWheel, new Listener() {
- @Override public void handleEvent(Event event) {
- if (getVerticalBar().isVisible()) {
- int delta = -cellHeight;
- if (event.count < 0) {
- delta = -delta;
- }
- scrollYDelta(delta);
- }
- event.doit = false;
- }
- });
- }
-
- @Override protected void paint(GC gc) {
- Rectangle clipping = gc.getClipping();
- if (clipping.width == 0 || clipping.height == 0) {
- return;
- }
- Rectangle clientArea = getScreenRectInVirtualSpace();
- // Beginning coordinates.
- int xOffset = clientArea.x;
- int yOffset = clientArea.y;
- int colFirst = virtualXToCell(xOffset + clipping.x);
- if (colFirst > getCols()) {
- colFirst = getCols();
- } else if (colFirst < 0) {
- colFirst = 0;
- }
- int rowFirst = virtualYToCell(yOffset + clipping.y);
- // End coordinates.
- int colLast = virtualXToCell(xOffset + clipping.x + clipping.width + cellWidth);
- if (colLast > getCols()) {
- colLast = getCols();
- }
- int rowLast = virtualYToCell(yOffset + clipping.y + clipping.height + cellHeight);
- if (rowLast > getRows()) {
- rowLast = getRows();
- }
- // Draw the cells.
- for (int row = rowFirst; row <= rowLast; row++) {
- int cx = colFirst * cellWidth - xOffset;
- int cy = row * cellHeight - yOffset;
- drawLine(gc, row, cx, cy, colFirst, colLast);
- }
- paintUnoccupiedSpace(gc, clipping);
- }
-
- abstract void drawLine(GC gc, int row, int x, int y, int colFirst, int colLast);
-
- abstract protected int getRows();
-
- abstract protected int getCols();
-
- protected void setCellWidth(int cellWidth) {
- this.cellWidth = cellWidth;
- getHorizontalBar().setIncrement(this.cellWidth);
- }
-
- public int getCellWidth() {
- return cellWidth;
- }
-
- protected void setCellHeight(int cellHeight) {
- this.cellHeight = cellHeight;
- getVerticalBar().setIncrement(this.cellHeight);
- }
-
- public int getCellHeight() {
- return cellHeight;
- }
-
- int virtualXToCell(int x) {
- return x / cellWidth;
- }
-
- int virtualYToCell(int y) {
- return y / cellHeight;
- }
-
- protected Point screenPointToCell(int x, int y) {
- x = screenXtoVirtual(x) / cellWidth;
- y = screenYtoVirtual(y) / cellHeight;
- return new Point(x, y);
- }
-
- Point screenPointToCell(Point point) {
- return screenPointToCell(point.x, point.y);
- }
-
- protected Point cellToOriginOnScreen(int x, int y) {
- x = virtualXtoScreen(cellWidth * x);
- y = virtualYtoScreen(cellHeight * y);
- return new Point(x, y);
- }
-
- Point cellToOriginOnScreen(Point cell) {
- return cellToOriginOnScreen(cell.x, cell.y);
- }
-
- Rectangle getCellScreenRect(Point cell) {
- return getCellScreenRect(cell.x, cell.y);
- }
-
- Rectangle getCellScreenRect(int x, int y) {
- x = cellWidth * virtualXtoScreen(x);
- y = cellHeight * virtualYtoScreen(y);
- return new Rectangle(x, y, cellWidth, cellHeight);
- }
-
- protected Rectangle getCellVirtualRect(Point cell) {
- return getCellVirtualRect(cell.x, cell.y);
- }
-
- Rectangle getCellVirtualRect(int x, int y) {
- x = cellWidth * x;
- y = cellHeight * y;
- return new Rectangle(x, y, cellWidth, cellHeight);
- }
-
- @Override protected void viewRectangleChanged(int x, int y, int width, int height) {
- int cellX = virtualXToCell(x);
- int cellY = virtualYToCell(y);
- // End coordinates
- int xE = virtualXToCell(x + width);
- // if(xE>getCols())
- // xE=getCols();
- int yE = virtualYToCell(y + height);
- // if(yE>getRows())
- // yE=getRows();
- visibleCellRectangleChanged(cellX, cellY, xE - cellX, yE - cellY);
- }
-
- protected void visibleCellRectangleChanged(int x, int y, int width, int height) {}
-
- @Override protected void setVirtualExtend(int width, int height) {
- int cellHeight = getCellHeight();
- if (cellHeight > 0) {
- height -= height % cellHeight;
- }
- super.setVirtualExtend(width, height);
- }
-
- @Override protected void setVirtualOrigin(int x, int y) {
- int cellHeight = getCellHeight();
- if (cellHeight > 0) {
- int remainder = y % cellHeight;
- if (remainder < 0) {
- y -= (cellHeight + remainder);
- } else {
- y -= remainder;
- }
- }
- super.setVirtualOrigin(x, y);
- }
-
- @Override protected void scrollY(ScrollBar vBar) {
- int vSelection = vBar.getSelection();
- Rectangle bounds = getVirtualBounds();
- int y = -vSelection;
- int cellHeight = getCellHeight();
- if (cellHeight > 0) {
- int remainder = y % cellHeight;
- if (remainder < 0) {
- y -= (cellHeight + remainder);
- } else {
- y -= remainder;
- }
- }
- int deltaY = y - bounds.y;
- if (deltaY != 0) {
- scrollSmart(0, deltaY);
- setVirtualOrigin(bounds.x, bounds.y += deltaY);
- }
- if (-bounds.y + getRows() * getCellHeight() >= bounds.height) {
- // Scrolled to bottom - need to redraw bottom area
- Rectangle clientRect = getClientArea();
- redraw(0, clientRect.height - this.cellHeight, clientRect.width, this.cellHeight, false);
- }
- }
-}
diff --git a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/textcanvas/ILinelRenderer.java b/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/textcanvas/ILinelRenderer.java
deleted file mode 100644
index 2ae2c8a..0000000
--- a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/textcanvas/ILinelRenderer.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2010 Wind River Systems, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *******************************************************************************/
-package com.google.eclipse.tm.internal.terminal.textcanvas;
-
-import org.eclipse.swt.graphics.*;
-
-public interface ILinelRenderer {
- int getCellWidth();
-
- int getCellHeight();
-
- void drawLine(ITextCanvasModel model, GC gc, int line, int x, int y, int firstColumn, int lastColumn);
-
- void onFontChange();
-
- void setInvertedColors(boolean invert);
-
- Color getDefaultBackgroundColor();
-
- void setColors(RGB background, RGB foreground);
-
- void setFont(Font font);
-}
diff --git a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/textcanvas/ITextCanvasModel.java b/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/textcanvas/ITextCanvasModel.java
deleted file mode 100644
index 1f62e76..0000000
--- a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/textcanvas/ITextCanvasModel.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007 Wind River Systems, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *******************************************************************************/
-package com.google.eclipse.tm.internal.terminal.textcanvas;
-
-import org.eclipse.swt.graphics.Point;
-
-import com.google.eclipse.tm.terminal.model.ITerminalTextDataReadOnly;
-
-public interface ITextCanvasModel {
- void addCellCanvasModelListener(ITextCanvasModelListener listener);
-
- void removeCellCanvasModelListener(ITextCanvasModelListener listener);
-
- ITerminalTextDataReadOnly getTerminalText();
-
- void setVisibleRectangle(int startLine, int startCol, int height, int width);
-
- /**
- * Indicates whether the cursor is shown (used for blinking cursors.)
- *
- * @return {@code true} if the cursor is shown, {@code false} otherwise.
- */
- boolean isCursorOn();
-
- boolean isCursorEnabled();
-
- /**
- * Show/Hide the cursor.
- *
- * @param visible indicates whether the cursor should be visible.
- */
- void setCursorEnabled(boolean visible);
-
- int getCursorLine();
-
- int getCursorColumn();
-
- Point getSelectionStart();
-
- Point getSelectionEnd();
-
- Point getSelectionAnchor();
-
- void setSelectionAnchor(Point anchor);
-
- // Negative 'startLine' clears the selection.
- void setSelection(int startLine, int endLine, int startColumn, int endColumn);
-
- boolean hasLineSelection(int line);
-
- String getSelectedText();
-
- void setBlinkingCursor(boolean useBlinkingCursor);
-}
\ No newline at end of file
diff --git a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/textcanvas/ITextCanvasModelListener.java b/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/textcanvas/ITextCanvasModelListener.java
deleted file mode 100644
index 55d73cc..0000000
--- a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/textcanvas/ITextCanvasModelListener.java
+++ /dev/null
@@ -1,20 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007 Wind River Systems, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *******************************************************************************/
-package com.google.eclipse.tm.internal.terminal.textcanvas;
-
-public interface ITextCanvasModelListener {
- void rangeChanged(int col, int line, int width, int height);
-
- void dimensionsChanged(int cols, int rows);
-
- /**
- * Called when any text change happened. Used to scroll to the end of text in auto scroll mode. This does not get
- * fired when the window of interest has changed.
- */
- void terminalDataChanged();
-}
diff --git a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/textcanvas/PipedInputStream.java b/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/textcanvas/PipedInputStream.java
deleted file mode 100644
index 35daac0..0000000
--- a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/textcanvas/PipedInputStream.java
+++ /dev/null
@@ -1,171 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 1996, 2011 Wind River Systems, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *******************************************************************************/
-package com.google.eclipse.tm.internal.terminal.textcanvas;
-
-import java.io.*;
-
-import com.google.eclipse.tm.internal.terminal.util.BoundedByteBuffer;
-
-/**
- * Starts a {@code Runnable} in the display thread when data is available and to pretend no data is available after a
- * given amount of time the {@code Runnable} is running.
- */
-public class PipedInputStream extends InputStream {
- // The output stream used by the terminal back-end to write to the terminal
- protected final OutputStream outputStream;
-
- // A blocking byte queue.
- private final BoundedByteBuffer queue;
-
- /**
- * Constructor.
- *
- * @param bufferSize the size of the buffer of the output stream.
- */
- public PipedInputStream(int bufferSize) {
- outputStream = new PipedOutputStream();
- queue = new BoundedByteBuffer(bufferSize);
- }
-
- /**
- * Returns the output stream used by the back-end to write to the terminal.
- *
- * @return the output stream used by the back-end to write to the terminal.
- */
- public OutputStream getOutputStream() {
- return outputStream;
- }
-
- /**
- * Waits until data is available for reading.
- *
- * @param time the time wait, in milliseconds.
- * @throws InterruptedException when the thread is interrupted while waiting for the buffer to become ready.
- */
- public void waitForAvailable(long time) throws InterruptedException {
- synchronized (queue) {
- if (queue.size() == 0 && !queue.isClosed()) {
- queue.wait(time);
- }
- }
- }
-
- @Override public int available() {
- synchronized (queue) {
- return queue.size();
- }
- }
-
- @Override public int read() throws IOException {
- try {
- synchronized (queue) {
- return queue.read();
- }
- } catch (InterruptedException e) {
- Thread.currentThread().interrupt();
- return -1;
- }
- }
-
- @Override public void close() throws IOException {
- synchronized (queue) {
- queue.close();
- }
- }
-
- @Override public int read(byte[] b, int off, int len) throws IOException {
- if (len == 0) {
- return 0;
- }
- int n = 0;
- // Read as much as we can using a single synchronized statement.
- try {
- synchronized (queue) {
- // If nothing available, block and read one byte.
- if (queue.size() == 0) {
- // Block now until at least one byte is available.
- int c = queue.read();
- // Are we at the end of stream?
- if (c == -1) {
- return -1;
- }
- b[off] = (byte) c;
- n++;
- }
- // Is there more data available?
- if (n < len && queue.size() > 0) {
- // Read at most available.
- int available = Math.min(queue.size(), len - n);
- // Are we at the end of the stream?
- if (available == 0 && queue.isClosed()) {
- // If no byte was read, return -1 to indicate end of stream; otherwise return the bytes we read up to now.
- if (n == 0) {
- n = -1;
- }
- return n;
- }
- queue.read(b, off + n, available);
- n += available;
- }
- }
- } catch (InterruptedException e) {
- Thread.currentThread().interrupt();
- }
- return n;
- }
-
- /**
- * An output stream that calls {@link PipedInputStream#textAvailable} every time data is written to the stream. The
- * data is written to {@link PipedInputStream#queue}.
- */
- private class PipedOutputStream extends OutputStream {
- @Override public void write(byte[] b, int off, int len) throws IOException {
- try {
- synchronized (queue) {
- if (queue.isClosed()) {
- throw new IOException("Stream is closed!");
- }
- int written = 0;
- while (written < len) {
- if (queue.getFreeSlots() == 0) {
- // If no slots available, write one byte and block until free slots are available.
- queue.write(b[off + written]);
- written++;
- } else {
- // If slots are available, write as much as we can in one junk
- int n = Math.min(queue.getFreeSlots(), len - written);
- queue.write(b, off + written, n);
- written += n;
- }
- }
- }
- } catch (InterruptedException e) {
- Thread.currentThread().interrupt();
- }
- }
-
- @Override public void write(int b) throws IOException {
- try {
- synchronized (queue) {
- if (queue.isClosed()) {
- throw new IOException("Stream is closed!");
- }
- queue.write((byte) b);
- }
- } catch (InterruptedException e) {
- Thread.currentThread().interrupt();
- }
- }
-
- @Override public void close() throws IOException {
- synchronized (queue) {
- queue.close();
- }
- }
- }
-}
diff --git a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/textcanvas/PollingTextCanvasModel.java b/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/textcanvas/PollingTextCanvasModel.java
deleted file mode 100644
index 803254c..0000000
--- a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/textcanvas/PollingTextCanvasModel.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007 Wind River Systems, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *******************************************************************************/
-package com.google.eclipse.tm.internal.terminal.textcanvas;
-
-import org.eclipse.swt.widgets.Display;
-
-import com.google.eclipse.tm.terminal.model.ITerminalTextDataSnapshot;
-
-public class PollingTextCanvasModel extends AbstractTextCanvasModel {
- private int pollInterval = 50;
-
- public PollingTextCanvasModel(ITerminalTextDataSnapshot snapshot) {
- super(snapshot);
- Display.getDefault().timerExec(pollInterval, new Runnable() {
- @Override public void run() {
- update();
- Display.getDefault().timerExec(pollInterval, this);
- }
- });
- }
-
- public void setUpdateInterval(int interval) {
- pollInterval = interval;
- }
-}
diff --git a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/textcanvas/StyleMap.java b/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/textcanvas/StyleMap.java
deleted file mode 100644
index 03311f8..0000000
--- a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/textcanvas/StyleMap.java
+++ /dev/null
@@ -1,265 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2011 Wind River Systems, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *******************************************************************************/
-package com.google.eclipse.tm.internal.terminal.textcanvas;
-
-import java.util.*;
-
-import org.eclipse.jface.resource.*;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.widgets.Display;
-
-import com.google.eclipse.tm.terminal.model.*;
-
-public class StyleMap {
- private static final String BLACK = "black";
- private static final String WHITE = "white";
- private static final String WHITE_FOREGROUND = "white_foreground";
- private static final String GRAY = "gray";
- private static final String MAGENTA = "magenta";
- private static final String CYAN = "cyan";
- private static final String YELLOW = "yellow";
- private static final String BLUE = "blue";
- private static final String GREEN = "green";
- private static final String RED = "red";
-
- private static final String PREFIX = "org.eclipse.tm.internal.";
-
- private final Map<StyleColor, Color> colorMapForeground = new HashMap<StyleColor, Color>();
- private final Map<StyleColor, Color> colorMapBackground = new HashMap<StyleColor, Color>();
- private final Map<StyleColor, Color> colorMapIntense = new HashMap<StyleColor, Color>();
-
- private Point charSize;
-
- private boolean invertColors;
- private boolean proportional;
-
- private final int[] offsets = new int[256];
-
- private Color background = getColor(new RGB(0, 0, 0));
- private Color foreground = getColor(new RGB(229, 229, 229));
-
- private Font font = JFaceResources.getFontRegistry().get("org.eclipse.jface.textfont");
-
- StyleMap() {
- initColors();
- updateFont();
- }
-
- private void initColors() {
- initForegroundColors();
- initBackgroundColors();
- initIntenseColors();
- }
-
- private void initForegroundColors() {
- if (invertColors) {
- setColor(colorMapForeground, WHITE, 0, 0, 0);
- setColor(colorMapForeground, WHITE_FOREGROUND, 50, 50, 50);
- setColor(colorMapForeground, BLACK, 229, 229, 229);
- } else {
- setColor(colorMapForeground, WHITE, 255, 255, 255);
- setColor(colorMapForeground, WHITE_FOREGROUND, 229, 229, 229);
- setColor(colorMapForeground, BLACK, 50, 50, 50);
- }
- setColor(colorMapForeground, RED, 205, 0, 0);
- setColor(colorMapForeground, GREEN, 0, 205, 0);
- setColor(colorMapForeground, BLUE, 0, 0, 238);
- setColor(colorMapForeground, YELLOW, 205, 205, 0);
- setColor(colorMapForeground, CYAN, 0, 205, 205);
- setColor(colorMapForeground, MAGENTA, 205, 0, 205);
- setColor(colorMapForeground, GRAY, 229, 229, 229);
- }
-
- private void initBackgroundColors() {
- if (invertColors) {
- setColor(colorMapBackground, WHITE, 0, 0, 0);
- setColor(colorMapBackground, WHITE_FOREGROUND, 50, 50, 50); // only used when colors are inverse
- setColor(colorMapBackground, BLACK, 255, 255, 255); // cursor color
- } else {
- setColor(colorMapBackground, WHITE, 255, 255, 255);
- setColor(colorMapBackground, WHITE_FOREGROUND, 229, 229, 229);
- setColor(colorMapBackground, BLACK, 0, 0, 0);
- }
- setColor(colorMapBackground, RED, 205, 0, 0);
- setColor(colorMapBackground, GREEN, 0, 205, 0);
- setColor(colorMapBackground, BLUE, 0, 0, 238);
- setColor(colorMapBackground, YELLOW, 205, 205, 0);
- setColor(colorMapBackground, CYAN, 0, 205, 205);
- setColor(colorMapBackground, MAGENTA, 205, 0, 205);
- setColor(colorMapBackground, GRAY, 229, 229, 229);
- }
-
- private void initIntenseColors() {
- if (invertColors) {
- setColor(colorMapIntense, WHITE, 127, 127, 127);
- setColor(colorMapIntense, WHITE_FOREGROUND, 0, 0, 0); // only used when colors are inverse
- setColor(colorMapIntense, BLACK, 255, 255, 255);
- } else {
- setColor(colorMapIntense, WHITE, 255, 255, 255);
- setColor(colorMapIntense, WHITE_FOREGROUND, 255, 255, 255);
- setColor(colorMapIntense, BLACK, 0, 0, 0);
- }
- setColor(colorMapIntense, RED, 255, 0, 0);
- setColor(colorMapIntense, GREEN, 0, 255, 0);
- setColor(colorMapIntense, BLUE, 92, 92, 255);
- setColor(colorMapIntense, YELLOW, 255, 255, 0);
- setColor(colorMapIntense, CYAN, 0, 255, 255);
- setColor(colorMapIntense, MAGENTA, 255, 0, 255);
- setColor(colorMapIntense, GRAY, 255, 255, 255);
- }
-
- private void setColor(Map<StyleColor, Color> colorMap, String name, int r, int g, int b) {
- Color color = getColor(new RGB(r, g, b));
- setColor(colorMap, color, StyleColor.getStyleColor(name));
- setColor(colorMap, color, StyleColor.getStyleColor(name.toUpperCase()));
- }
-
- private void setColor(Map<StyleColor, Color> colorMap, Color color, StyleColor styleColor) {
- if (styleColor != null) {
- colorMap.put(styleColor, color);
- }
- }
-
- public Color getForegroundColor(Style style) {
- if (style == null) {
- return foreground;
- }
- StyleColor color = style.isReverse() ? style.getBackground() : style.getForeground();
- Map<StyleColor, Color> map = style.isBold() ? colorMapIntense : colorMapForeground;
- Color actualColor = map.get(color);
- if (actualColor == null) {
- actualColor = foreground;
- }
- return actualColor;
- }
-
- public Color getBackgroundColor(Style style) {
- if (style == null) {
- return background;
- }
- StyleColor color = style.isReverse() ? style.getForeground() : style.getBackground();
- Color actualColor = colorMapBackground.get(color);
- if (actualColor == null) {
- actualColor = background;
- }
- return actualColor;
- }
-
- public void setInvertedColors(boolean invert) {
- if (invert == invertColors) {
- return;
- }
- invertColors = invert;
- initColors();
- }
-
- public Font getFont(Style style) {
- if (style == null) {
- return font;
- }
- FontData fontDatas[] = font.getFontData();
- FontData data = fontDatas[0];
- if (style.isBold()) {
- return new Font(font.getDevice(), data.getName(), data.getHeight(), data.getStyle() | SWT.BOLD);
- }
- if (style.isUnderline()) {
- return new Font(font.getDevice(), data.getName(), data.getHeight(), data.getStyle() | SWT.ITALIC);
- }
- return font;
- }
-
- public Font getFont() {
- return font;
- }
-
- public int getFontWidth() {
- return charSize.x;
- }
-
- public int getFontHeight() {
- return charSize.y;
- }
-
- public void updateFont() {
- Display display = Display.getCurrent();
- GC gc = new GC(display);
- gc.setFont(font);
- charSize = gc.textExtent("W");
- proportional = false;
- for (char c = ' '; c <= '~'; c++) {
- // Consider only the first 128 chars for deciding if a font is proportional.
- if (measureChar(gc, c, true)) {
- proportional = true;
- }
- }
- // TODO should we also consider the upper 128 chars?
- for (char c = ' ' + 128; c <= '~' + 128; c++) {
- measureChar(gc, c, false);
- }
- if (proportional) {
- charSize.x -= 2; // Works better on small fonts.
- }
- for (int i = 0; i < offsets.length; i++) {
- offsets[i] = (charSize.x - offsets[i]) / 2;
- }
- gc.dispose();
- }
-
- private boolean measureChar(GC gc, char c, boolean updateMax) {
- boolean proportional = false;
- Point extent = gc.textExtent(String.valueOf(c));
- if (extent.x > 0 && extent.y > 0 && (charSize.x != extent.x || charSize.y != extent.y)) {
- proportional = true;
- if (updateMax) {
- charSize.x = Math.max(charSize.x, extent.x);
- charSize.y = Math.max(charSize.y, extent.y);
- }
- }
- offsets[c] = extent.x;
- return proportional;
- }
-
- public boolean isFontProportional() {
- return proportional;
- }
-
- /**
- * Return the offset in pixels required to center a given character.
- *
- * @param c the character to measure.
- * @return the offset in x direction to center this character.
- */
- public int getCharOffset(char c) {
- if (c >= offsets.length) {
- return 0;
- }
- return offsets[c];
- }
-
- public void setColors(RGB background, RGB foreground) {
- this.background = getColor(background);
- this.foreground = getColor(foreground);
- }
-
- private Color getColor(RGB colorData) {
- String name = PREFIX + colorData.red + "-" + colorData.green + "-" + colorData.blue;
- ColorRegistry colorRegistry = JFaceResources.getColorRegistry();
- Color color = colorRegistry.get(name);
- if (color == null) {
- colorRegistry.put(name, colorData);
- color = colorRegistry.get(name);
- }
- return color;
- }
-
- public void setFont(Font font) {
- this.font = font;
- updateFont();
- }
-}
diff --git a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/textcanvas/TextCanvas.java b/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/textcanvas/TextCanvas.java
deleted file mode 100644
index bfafd3c..0000000
--- a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/textcanvas/TextCanvas.java
+++ /dev/null
@@ -1,399 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2011 Wind River Systems, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *******************************************************************************/
-package com.google.eclipse.tm.internal.terminal.textcanvas;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.dnd.*;
-import org.eclipse.swt.events.*;
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- * A cell oriented Canvas. Maintains a list of "cells". It can either be vertically or horizontally scrolled. The
- * CellRenderer is responsible for painting the cell.
- */
-public class TextCanvas extends GridCanvas {
- private final ITextCanvasModel cellCanvasModel;
- private final ILinelRenderer cellRenderer;
- private boolean scrollLockOn;
- private Point draggingStart;
- private Point draggingEnd;
- private boolean hasSelection;
- private ResizeListener resizeListener;
-
- // The minSize is meant to determine the minimum size of the backing store (grid) into which remote data is rendered.
- // If the viewport is smaller than that minimum size, the backing store size remains at the minSize,and a scrollbar is
- // shown instead. In reality, this has the following issues or effects today:
- //
- // (a) Bug 281328: For very early data coming in before the widget is realized, the minSize determines into what
- // initial grid that is rendered. See also {@link #addResizeHandler(ResizeListener)}.
- //
- // (b) Bug 294468: Since we have redraw and size computation problems with horizontal scrollers, for now the
- // minColumns must be small enough to avoid a horizontal scroller appearing in most cases.
- //
- // (c) Bug 294327: Since we have problems with the vertical scroller showing the correct location, minLines must be
- // small enough to avoid a vertical scroller or new data may be rendered off-screen.
- //
- // As a compromise, we have been working with a 20x4 since the terminal inception, though many users would want a
- // 80x24 minSize and backing store.
-
- // Pros and cons of the small minsize:
- // + consistent "remote size==viewport size", vi works as expected
- // - dumb terminals which expect 80x24 render garbled on small viewport
- //
- // If bug 294468 were resolved, an 80 wide minSize would be preferrable since it allows switching the terminal
- // viewport small/large as needed, without destroying the backing store. For a complete solution, bug 196462 tracks
- // the request for a user-defined fixed-widow-size-mode.
- private int minColumns = 80;
-
- private int minLines = 4;
- private boolean cursorEnabled;
- private boolean resizing;
-
- /**
- * Create a new CellCanvas with the given SWT style bits. (SWT.H_SCROLL and SWT.V_SCROLL are automatically added).
- */
- public TextCanvas(Composite parent, ITextCanvasModel model, int style, ILinelRenderer cellRenderer) {
- super(parent, style | SWT.H_SCROLL | SWT.V_SCROLL);
- this.cellRenderer = cellRenderer;
- setCellWidth(cellRenderer.getCellWidth());
- setCellHeight(cellRenderer.getCellHeight());
- cellCanvasModel = model;
- cellCanvasModel.addCellCanvasModelListener(new ITextCanvasModelListener() {
- @Override public void rangeChanged(int col, int line, int width, int height) {
- repaintRange(col, line, width, height);
- }
-
- @Override public void dimensionsChanged(int cols, int rows) {
- calculateGrid();
- }
-
- @Override public void terminalDataChanged() {
- if (!isDisposed() && !resizing) {
- // scroll to end (unless scroll lock is active)
- calculateGrid();
- scrollToEnd();
- }
- }
- });
- // let the cursor blink if the text canvas gets the focus...
- addFocusListener(new FocusListener() {
- @Override public void focusGained(FocusEvent e) {
- cellCanvasModel.setCursorEnabled(cursorEnabled);
- }
-
- @Override public void focusLost(FocusEvent e) {
- cellCanvasModel.setCursorEnabled(false);
- }
- });
- addMouseListener(new MouseAdapter() {
- @Override public void mouseDown(MouseEvent e) {
- if (e.button == 1) { // left button
- draggingStart = screenPointToCell(e.x, e.y);
- hasSelection = false;
- if ((e.stateMask & SWT.SHIFT) != 0) {
- Point anchor = cellCanvasModel.getSelectionAnchor();
- if (anchor != null) {
- draggingStart = anchor;
- }
- } else {
- cellCanvasModel.setSelectionAnchor(draggingStart);
- }
- draggingEnd = null;
- }
- }
-
- @Override public void mouseUp(MouseEvent e) {
- if (e.button == 1) { // left button
- updateHasSelection(e);
- if (hasSelection) {
- setSelection(screenPointToCell(e.x, e.y));
- } else {
- cellCanvasModel.setSelection(-1, -1, -1, -1);
- }
- draggingStart = null;
- }
- }
- });
- addMouseMoveListener(new MouseMoveListener() {
- @Override public void mouseMove(MouseEvent e) {
- if (draggingStart != null) {
- updateHasSelection(e);
- setSelection(screenPointToCell(e.x, e.y));
- }
- }
- });
- serVerticalBarVisible(true);
- setHorizontalBarVisible(false);
- }
-
- // The user has to drag the mouse to at least one character to make a selection. Once this is done, even a one char
- // selection is OK.
- private void updateHasSelection(MouseEvent e) {
- if (draggingStart != null) {
- Point p = screenPointToCell(e.x, e.y);
- if (draggingStart.x != p.x || draggingStart.y != p.y) {
- hasSelection = true;
- }
- }
- }
-
- void setSelection(Point p) {
- if (draggingStart != null && !p.equals(draggingEnd)) {
- draggingEnd = p;
- if (compare(p, draggingStart) < 0) {
- // bug 219589 - make sure selection start coordinates are non-negative
- int startColumn = Math.max(0, p.x);
- int startRow = Math.max(p.y, 0);
- cellCanvasModel.setSelection(startRow, draggingStart.y, startColumn, draggingStart.x);
- } else {
- cellCanvasModel.setSelection(draggingStart.y, p.y, draggingStart.x, p.x);
- }
- }
- }
-
- int compare(Point p1, Point p2) {
- if (p1.equals(p2)) {
- return 0;
- }
- if (p1.y == p2.y) {
- return p1.x > p2.x ? 1 : -1;
- }
- return p1.y > p2.y ? 1 : -1;
- }
-
- public ILinelRenderer getCellRenderer() {
- return cellRenderer;
- }
-
- public int getMinColumns() {
- return minColumns;
- }
-
- public void setMinColumns(int minColumns) {
- this.minColumns = minColumns;
- }
-
- public int getMinLines() {
- return minLines;
- }
-
- public void setMinLines(int minLines) {
- this.minLines = minLines;
- }
-
- protected void onResize(boolean init) {
- if (resizeListener != null) {
- Rectangle bonds = getClientArea();
- int cellHeight = getCellHeight();
- int cellWidth = getCellWidth();
- int lines = bonds.height / cellHeight;
- int columns = bonds.width / cellWidth;
- // When the view is minimized, its size is set to 0 we don't sent this to the terminal!
- if ((lines > 0 && columns > 0) || init) {
- if (columns < minColumns) {
- if (!isHorizontalBarVisble()) {
- setHorizontalBarVisible(true);
- bonds = getClientArea();
- lines = bonds.height / cellHeight;
- }
- columns = minColumns;
- } else if (columns >= minColumns && isHorizontalBarVisble()) {
- setHorizontalBarVisible(false);
- bonds = getClientArea();
- lines = bonds.height / cellHeight;
- columns = bonds.width / cellWidth;
- }
- if (lines < minLines) {
- lines = minLines;
- }
- resizeListener.sizeChanged(lines, columns);
- }
- }
- super.onResize();
- calculateGrid();
- }
-
- @Override protected void onResize() {
- resizing = true;
- try {
- onResize(false);
- } finally {
- resizing = false;
- }
- }
-
- private void calculateGrid() {
- Rectangle virtualBounds = getVirtualBounds();
- setRedraw(false);
- try {
- setVirtualExtend(getCols() * getCellWidth(), getRows() * getCellHeight());
- getParent().layout();
- if (resizing) {
- // scroll to end if view port was near last line
- Rectangle viewRect = getViewRectangle();
- if (virtualBounds.height - (viewRect.y + viewRect.height) < getCellHeight() * 2) {
- scrollToEnd();
- }
- }
- } finally {
- setRedraw(true);
- }
- }
-
- void scrollToEnd() {
- if (!scrollLockOn) {
- int y = -(getRows() * getCellHeight() - getClientArea().height);
- if (y > 0) {
- y = 0;
- }
- Rectangle v = getViewRectangle();
- if (v.y != -y) {
- setVirtualOrigin(v.x, y);
- }
- // make sure the scroll area is correct.
- scrollY(getVerticalBar());
- scrollX(getHorizontalBar());
- }
- }
-
- public boolean isScrollLockOn() {
- return scrollLockOn;
- }
-
- public void setScrollLockOn(boolean on) {
- scrollLockOn = on;
- }
-
- protected void repaintRange(int col, int line, int width, int height) {
- Point origin = cellToOriginOnScreen(col, line);
- Rectangle r = new Rectangle(origin.x, origin.y, width * getCellWidth(), height * getCellHeight());
- repaint(r);
- }
-
- @Override protected void drawLine(GC gc, int line, int x, int y, int colFirst, int colLast) {
- cellRenderer.drawLine(cellCanvasModel, gc, line, x, y, colFirst, colLast);
- }
-
- @Override protected Color getTerminalBackgroundColor() {
- return cellRenderer.getDefaultBackgroundColor();
- }
-
- @Override protected void visibleCellRectangleChanged(int x, int y, int width, int height) {
- cellCanvasModel.setVisibleRectangle(y, x, height, width);
- update();
- }
-
- @Override protected int getCols() {
- return cellCanvasModel.getTerminalText().getWidth();
- }
-
- @Override protected int getRows() {
- return cellCanvasModel.getTerminalText().getHeight();
- }
-
- public String getSelectionText() {
- // TODO -- create a hasSelectionMethod!
- return cellCanvasModel.getSelectedText();
- }
-
- public void copy() {
- Clipboard clipboard = new Clipboard(getDisplay());
- clipboard.setContents(new Object[] { getSelectionText() }, new Transfer[] { TextTransfer.getInstance() });
- clipboard.dispose();
- }
-
- public void selectAll() {
- cellCanvasModel.setSelection(
- 0, cellCanvasModel.getTerminalText().getHeight(), 0, cellCanvasModel.getTerminalText().getWidth());
- cellCanvasModel.setSelectionAnchor(new Point(0, 0));
- }
-
- public boolean isEmpty() {
- return false;
- }
-
- /**
- * Gets notified when the visible size of the terminal changes. This should update the model!
- */
- public static interface ResizeListener {
- void sizeChanged(int lines, int columns);
- }
-
- public void addResizeHandler(ResizeListener listener) {
- if (resizeListener != null) {
- throw new IllegalArgumentException("There can be at most one listener at the moment!");
- }
- resizeListener = listener;
- // Bug 281328: The very first few characters might be missing in the terminal control if opened and connected
- // programmatically.
- //
- // In case the terminal had not been visible yet or is too small (less than one line visible), the terminal should
- // have a minimum size to avoid RuntimeExceptions.
- Rectangle bonds = getClientArea();
- if (bonds.height < getCellHeight() || bonds.width < getCellWidth()) {
- // Widget not realized yet, or minimized to < 1 item. Just tell the listener our min size.
- resizeListener.sizeChanged(getMinLines(), getMinColumns());
- } else {
- // Widget realized: compute actual size and force telling the listener
- onResize(true);
- }
- }
-
- public void onFontChange() {
- cellRenderer.onFontChange();
- setCellWidth(cellRenderer.getCellWidth());
- setCellHeight(cellRenderer.getCellHeight());
- calculateGrid();
- }
-
- public void setInvertedColors(boolean invert) {
- cellRenderer.setInvertedColors(invert);
- redraw();
- }
-
- /**
- * Indicates whether the cursor is enabled (blinking.) By default the cursor is not enabled.
- *
- * @return {@code true} if the cursor is enabled, {@code false} otherwise.
- */
- public boolean isCursorEnabled() {
- return cursorEnabled;
- }
-
- /**
- * Enables or disables the cursor (enabling means that the cursor blinks.)
- *
- * @param enabled indicates whether the cursor should be enabled.
- */
- public void setCursorEnabled(boolean enabled) {
- if (enabled != cursorEnabled) {
- cursorEnabled = enabled;
- cellCanvasModel.setCursorEnabled(cursorEnabled);
- }
- }
-
- public void setColors(RGB background, RGB foreground) {
- cellRenderer.setColors(background, foreground);
- redraw();
- }
-
- @Override public void setFont(Font font) {
- super.setFont(font);
- cellRenderer.setFont(font);
- redraw();
- }
-
- @Override public Point screenPointToCell(int x, int y) {
- return super.screenPointToCell(x, y);
- }
-
- public void setBlinkingCursor(boolean useBlinkingCursor) {
- cellCanvasModel.setBlinkingCursor(useBlinkingCursor);
- }
-}
diff --git a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/textcanvas/TextLineRenderer.java b/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/textcanvas/TextLineRenderer.java
deleted file mode 100644
index 95b562f..0000000
--- a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/textcanvas/TextLineRenderer.java
+++ /dev/null
@@ -1,176 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2010 Wind River Systems, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *******************************************************************************/
-package com.google.eclipse.tm.internal.terminal.textcanvas;
-
-import static org.eclipse.swt.SWT.*;
-
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.widgets.Display;
-
-import com.google.eclipse.tm.terminal.model.*;
-
-public class TextLineRenderer implements ILinelRenderer {
- private final ITextCanvasModel model;
- private final StyleMap styleMap = new StyleMap();
-
- public TextLineRenderer(TextCanvas c, ITextCanvasModel model) {
- this.model = model;
- }
-
- @Override public int getCellWidth() {
- return styleMap.getFontWidth();
- }
-
- @Override public int getCellHeight() {
- return styleMap.getFontHeight();
- }
-
- @Override public void drawLine(
- ITextCanvasModel model, GC gc, int line, int x, int y, int firstColumn, int lastColumn) {
- if (line < 0 || line >= getTerminalText().getHeight() || firstColumn >= getTerminalText().getWidth()
- || firstColumn - lastColumn == 0) {
- fillBackground(gc, x, y, getCellWidth() * (lastColumn - firstColumn), getCellHeight());
- return;
- }
- lastColumn = Math.min(lastColumn, getTerminalText().getWidth());
- LineSegment[] segments = getTerminalText().getLineSegments(line, firstColumn, lastColumn - firstColumn);
- for (int i = 0; i < segments.length; i++) {
- LineSegment segment = segments[i];
- Style style = segment.getStyle();
- setupGC(gc, style);
- String text = segment.getText();
- drawText(gc, x, y, firstColumn, segment.getColumn(), text);
- drawCursor(model, gc, line, x, y, firstColumn);
- }
- if (this.model.hasLineSelection(line)) {
- Display display = Display.getCurrent();
- gc.setForeground(display.getSystemColor(COLOR_LIST_SELECTION_TEXT));
- gc.setBackground(display.getSystemColor(COLOR_LIST_SELECTION));
- Point start = model.getSelectionStart();
- Point end = model.getSelectionEnd();
- char[] chars = model.getTerminalText().getChars(line);
- if (chars == null) {
- return;
- }
- int offset = 0;
- if (start.y == line) {
- offset = start.x;
- }
- offset = Math.max(offset, firstColumn);
- int len;
- if (end.y == line) {
- len = end.x - offset + 1;
- } else {
- len = chars.length - offset + 1;
- }
- len = Math.min(len, chars.length - offset);
- if (len > 0) {
- String text = new String(chars, offset, len);
- drawText(gc, x, y, firstColumn, offset, text);
- }
- }
- }
-
- private void fillBackground(GC gc, int x, int y, int width, int height) {
- Color bg = gc.getBackground();
- gc.setBackground(getDefaultBackgroundColor());
- gc.fillRectangle(x, y, width, height);
- gc.setBackground(bg);
- }
-
- @Override public Color getDefaultBackgroundColor() {
- // null == default style
- return styleMap.getBackgroundColor(null);
- }
-
- private void drawCursor(ITextCanvasModel model, GC gc, int row, int x, int y, int colFirst) {
- if (!model.isCursorOn()) {
- return;
- }
- int cursorLine = model.getCursorLine();
- if (row == cursorLine) {
- int cursorColumn = model.getCursorColumn();
- if (cursorColumn < getTerminalText().getWidth()) {
- Style style = getTerminalText().getStyle(row, cursorColumn);
- if (style != null) {
- style = style.setReverse(!style.isReverse());
- setupGC(gc, style);
- } else {
- setBackground(gc, styleMap.getForegroundColor(null));
- setForeground(gc, styleMap.getBackgroundColor(null));
- }
- String text = String.valueOf(getTerminalText().getChar(row, cursorColumn));
- drawText(gc, x, y, colFirst, cursorColumn, text);
- }
- }
- }
-
- private void drawText(GC gc, int x, int y, int colFirst, int col, String text) {
- int offset = (col - colFirst) * getCellWidth();
- if (styleMap.isFontProportional()) {
- // Draw the background.
- // TODO why does this not work?
- // gc.fillRectangle(x, y, styleMap.getFontWidth() * text.length(), styleMap.getFontHeight());
- for (int i = 0; i < text.length(); i++) {
- char c = text.charAt(i);
- int fontWidth = styleMap.getFontWidth();
- int newX = x + offset + i * fontWidth;
- // TODO why do I have to draw the background character by character?
- gc.fillRectangle(newX, y, fontWidth, styleMap.getFontHeight());
- if (c != ' ' && c != '\000') {
- gc.drawString(String.valueOf(c), styleMap.getCharOffset(c) + newX, y, true);
- }
- }
- } else {
- text = text.replace('\000', ' ');
- gc.drawString(text, x + offset, y, false);
- }
- }
-
- private void setupGC(GC gc, Style style) {
- setForeground(gc, styleMap.getForegroundColor(style));
- setBackground(gc, styleMap.getBackgroundColor(style));
- Font font = styleMap.getFont(style);
- if (font != gc.getFont()) {
- gc.setFont(font);
- }
- }
-
- private void setForeground(GC gc, Color color) {
- if (color != gc.getForeground()) {
- gc.setForeground(color);
- }
- }
-
- private void setBackground(GC gc, Color color) {
- if (color != gc.getBackground()) {
- gc.setBackground(color);
- }
- }
-
- ITerminalTextDataReadOnly getTerminalText() {
- return model.getTerminalText();
- }
-
- @Override public void onFontChange() {
- styleMap.updateFont();
- }
-
- @Override public void setInvertedColors(boolean invert) {
- styleMap.setInvertedColors(invert);
-
- }
-
- @Override public void setColors(RGB background, RGB foreground) {
- styleMap.setColors(background, foreground);
- }
-
- @Override public void setFont(Font font) {
- styleMap.setFont(font);
- }
-}
diff --git a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/textcanvas/VirtualCanvas.java b/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/textcanvas/VirtualCanvas.java
deleted file mode 100644
index 2d66ad3..0000000
--- a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/textcanvas/VirtualCanvas.java
+++ /dev/null
@@ -1,303 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2010 Wind River Systems, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *******************************************************************************/
-package com.google.eclipse.tm.internal.terminal.textcanvas;
-
-import static org.eclipse.core.runtime.IStatus.*;
-
-import org.eclipse.core.runtime.*;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.widgets.*;
-
-import com.google.eclipse.tm.internal.terminal.control.impl.TerminalPlugin;
-
-/**
- * A {@code Canvas} showing a virtual object. Virtual: the extent of the total canvas. Screen: the visible client area
- * in the screen.
- */
-public abstract class VirtualCanvas extends Canvas {
- private final Rectangle virtualBounds = new Rectangle(0, 0, 0, 0);
-
- /** Called when the viewed part is changing. */
- private final Rectangle viewRectangle = new Rectangle(0, 0, 0, 0);
-
- private Rectangle clientArea;
-
- /** Prevent infinite loop in {@link #updateScrollbars()} */
- private boolean inUpdateScrollbars;
-
- private static boolean inUpdateScrollbarsLogged;
-
- public VirtualCanvas(Composite parent, int style) {
- super(parent, style | SWT.NO_BACKGROUND | SWT.NO_REDRAW_RESIZE);
- clientArea = getClientArea();
- addListener(SWT.Paint, new Listener() {
- @Override public void handleEvent(Event event) {
- paint(event.gc);
- }
- });
- addListener(SWT.Resize, new Listener() {
- @Override public void handleEvent(Event event) {
- clientArea = getClientArea();
- onResize();
- }
- });
- getVerticalBar().addListener(SWT.Selection, new Listener() {
- @Override public void handleEvent(Event e) {
- scrollY((ScrollBar) e.widget);
- }
- });
- getHorizontalBar().addListener(SWT.Selection, new Listener() {
- @Override public void handleEvent(Event e) {
- scrollX((ScrollBar) e.widget);
- }
- });
- }
-
- protected void onResize() {
- updateViewRectangle();
- }
-
- protected void scrollX(ScrollBar horizontalBar) {
- int selection = horizontalBar.getSelection();
- int destinationX = -selection - virtualBounds.x;
- virtualBounds.x = -selection;
- scrollSmart(destinationX, 0);
- updateViewRectangle();
- }
-
- protected void scrollXDelta(int delta) {
- getHorizontalBar().setSelection(-virtualBounds.x + delta);
- scrollX(getHorizontalBar());
- }
-
- protected void scrollY(ScrollBar vBar) {
- int vSelection = vBar.getSelection();
- int destY = -vSelection - virtualBounds.y;
- if (destY != 0) {
- virtualBounds.y = -vSelection;
- scrollSmart(0, destY);
- updateViewRectangle();
- }
- }
-
- protected void scrollYDelta(int delta) {
- getVerticalBar().setSelection(-virtualBounds.y + delta);
- scrollY(getVerticalBar());
- }
-
- protected void scrollSmart(int deltaX, int deltaY) {
- if (deltaX != 0 || deltaY != 0) {
- Rectangle rect = getBounds();
- scroll(deltaX, deltaY, 0, 0, rect.width, rect.height, false);
- }
- }
-
- protected void revealRect(Rectangle rect) {
- Rectangle visibleRect = getScreenRectInVirtualSpace();
- // scroll the X part
- int deltaX = 0;
- if (rect.x < visibleRect.x) {
- deltaX = rect.x - visibleRect.x;
- } else if (visibleRect.x + visibleRect.width < rect.x + rect.width) {
- deltaX = (rect.x + rect.width) - (visibleRect.x + visibleRect.width);
- }
- if (deltaX != 0) {
- getHorizontalBar().setSelection(-virtualBounds.x + deltaX);
- scrollX(getHorizontalBar());
- }
- // scroll the Y part
- int deltaY = 0;
- if (rect.y < visibleRect.y) {
- deltaY = rect.y - visibleRect.y;
- } else if (visibleRect.y + visibleRect.height < rect.y + rect.height) {
- deltaY = (rect.y + rect.height) - (visibleRect.y + visibleRect.height);
- }
- if (deltaY != 0) {
- getVerticalBar().setSelection(-virtualBounds.y + deltaY);
- scrollY(getVerticalBar());
- }
- }
-
- protected void repaint(Rectangle r) {
- if (isDisposed()) {
- return;
- }
- if (inClipping(r, clientArea)) {
- redraw(r.x, r.y, r.width, r.height, true);
- update();
- }
- }
-
- abstract protected void paint(GC gc);
-
- protected Color getTerminalBackgroundColor() {
- return getDisplay().getSystemColor(SWT.COLOR_WIDGET_BACKGROUND);
- }
-
- protected void paintUnoccupiedSpace(GC gc, Rectangle clipping) {
- int width = virtualBounds.width + virtualBounds.x;
- int height = virtualBounds.height + virtualBounds.y;
- int marginWidth = (clipping.x + clipping.width) - width;
- int marginHeight = (clipping.y + clipping.height) - height;
- if (marginWidth > 0 || marginHeight > 0) {
- Color background = getBackground();
- gc.setBackground(getTerminalBackgroundColor());
- if (marginWidth > 0) {
- gc.fillRectangle(width, clipping.y, marginWidth, clipping.height);
- }
- if (marginHeight > 0) {
- gc.fillRectangle(clipping.x, height, clipping.width, marginHeight);
- }
- gc.setBackground(background);
- }
- }
-
- protected boolean inClipping(Rectangle clipping, Rectangle r) {
- // TODO check if this is OK in all cases (the <=!)
- if (r.x + r.width <= clipping.x) {
- return false;
- }
- if (clipping.x + clipping.width <= r.x) {
- return false;
- }
- if (r.y + r.height <= clipping.y) {
- return false;
- }
- if (clipping.y + clipping.height <= r.y) {
- return false;
- }
- return true;
- }
-
- protected Rectangle getScreenRectInVirtualSpace() {
- return new Rectangle(
- clientArea.x - virtualBounds.x, clientArea.y - virtualBounds.y, clientArea.width, clientArea.height);
- }
-
- protected Rectangle getRectInVirtualSpace(Rectangle r) {
- return new Rectangle(r.x - virtualBounds.x, r.y - virtualBounds.y, r.width, r.height);
- }
-
- protected void setVirtualExtend(int width, int height) {
- virtualBounds.width = width;
- virtualBounds.height = height;
- updateScrollbars();
- updateViewRectangle();
- }
-
- protected void setVirtualOrigin(int x, int y) {
- if (virtualBounds.x != x || virtualBounds.y != y) {
- virtualBounds.x = x;
- virtualBounds.y = y;
- getHorizontalBar().setSelection(-x);
- getVerticalBar().setSelection(-y);
- updateViewRectangle();
- }
- }
-
- protected Rectangle getVirtualBounds() {
- return cloneRectangle(virtualBounds);
- }
-
- protected int virtualXtoScreen(int x) {
- return x + virtualBounds.x;
- }
-
- protected int virtualYtoScreen(int y) {
- return y + virtualBounds.y;
- }
-
- protected int screenXtoVirtual(int x) {
- return x - virtualBounds.x;
- }
-
- protected int screenYtoVirtual(int y) {
- return y - virtualBounds.y;
- }
-
- protected void updateViewRectangle() {
- if (viewRectangle.x == -virtualBounds.x && viewRectangle.y == -virtualBounds.y
- && viewRectangle.width == clientArea.width && viewRectangle.height == clientArea.height) {
- return;
- }
- viewRectangle.x = -virtualBounds.x;
- viewRectangle.y = -virtualBounds.y;
- viewRectangle.width = clientArea.width;
- viewRectangle.height = clientArea.height;
- viewRectangleChanged(viewRectangle.x, viewRectangle.y, viewRectangle.width, viewRectangle.height);
- }
-
- protected Rectangle getViewRectangle() {
- return cloneRectangle(viewRectangle);
- }
-
- private Rectangle cloneRectangle(Rectangle r) {
- return new Rectangle(r.x, r.y, r.width, r.height);
- }
-
- protected void viewRectangleChanged(int x, int y, int width, int height) {}
-
- private void updateScrollbars() {
- // don't get into infinite loops....
- if (!inUpdateScrollbars) {
- inUpdateScrollbars = true;
- try {
- doUpdateScrollbar();
- } finally {
- inUpdateScrollbars = false;
- }
- } else {
- if (!inUpdateScrollbarsLogged) {
- inUpdateScrollbarsLogged = true;
- ILog logger = TerminalPlugin.getDefault().getLog();
- logger.log(new Status(WARNING, TerminalPlugin.PLUGIN_ID, OK, "Unexpected Recursion in terminal", null));
- }
- }
- }
-
- private void doUpdateScrollbar() {
- Rectangle clientArea = getClientArea();
- ScrollBar horizontal = getHorizontalBar();
- // Even if setVisible was called on the scrollbar, isVisible returns false if its parent is not visible.
- if (!isVisible() || horizontal.isVisible()) {
- horizontal.setPageIncrement(clientArea.width - horizontal.getIncrement());
- int max = virtualBounds.width;
- horizontal.setMaximum(max);
- horizontal.setThumb(clientArea.width);
- }
- ScrollBar vertical = getVerticalBar();
- // even if setVisible was called on the scrollbar, isVisible returns false if its parent is not visible.
- if (!isVisible() || vertical.isVisible()) {
- vertical.setPageIncrement(clientArea.height - vertical.getIncrement());
- int max = virtualBounds.height;
- vertical.setMaximum(max);
- vertical.setThumb(clientArea.height);
- }
- }
-
- protected boolean isVertialBarVisible() {
- return getVerticalBar().isVisible();
- }
-
- protected void serVerticalBarVisible(boolean showVScrollBar) {
- ScrollBar vertical = getVerticalBar();
- vertical.setVisible(showVScrollBar);
- vertical.setSelection(0);
- }
-
- protected boolean isHorizontalBarVisble() {
- return getHorizontalBar().isVisible();
- }
-
- protected void setHorizontalBarVisible(boolean showHScrollBar) {
- ScrollBar horizontal = getHorizontalBar();
- horizontal.setVisible(showHScrollBar);
- horizontal.setSelection(0);
- }
-}
diff --git a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/util/BoundedByteBuffer.java b/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/util/BoundedByteBuffer.java
deleted file mode 100644
index f28dcfe..0000000
--- a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/util/BoundedByteBuffer.java
+++ /dev/null
@@ -1,138 +0,0 @@
-package com.google.eclipse.tm.internal.terminal.util;
-
-import org.eclipse.core.runtime.Assert;
-
-/**
- * A byte bounded buffer used to synchronize the input and the output stream.
- * <p>
- * Adapted from {@code BoundedBufferWithStateTracking} http://gee.cs.oswego.edu/dl/cpj/allcode.java
- * http://gee.cs.oswego.edu/dl/cpj/
- * <p>
- * BoundedBufferWithStateTracking is part of the examples for the book Concurrent Programming in Java: Design
- * Principles and Patterns by Doug Lea (ISBN 0-201-31009-0). Second edition published by Addison-Wesley, November
- * 1999. The code is Copyright(c) Douglas Lea 1996, 1999 and released to the public domain and may be used for any
- * purposes whatsoever.
- * <p>
- * For some reasons a solution based on PipedOutputStream/PipedIntputStream does work *very* slowly:
- * http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4404700
- * <p>
- */
-public class BoundedByteBuffer {
- private final byte[] buffer; // the elements
- private int putPosition; // circular indices
- private int takePosition;
- private int usedSlots; // the count
- private boolean closed;
-
- public BoundedByteBuffer(int capacity) throws IllegalArgumentException {
- // Make sure we don't deadlock on too small capacity.
- if (capacity <= 0) {
- throw new IllegalArgumentException("Capacity should be greater than zero");
- }
- buffer = new byte[capacity];
- }
-
- /**
- * Returns the bytes available for {@link #read()}.
- *
- * @return the bytes available for reading.
- */
- public int size() {
- return usedSlots;
- }
-
- /**
- * Writes a single byte to the buffer. Blocks if the buffer is full.
- *
- * @param b byte to write to the buffer.
- * @throws InterruptedException when the thread is interrupted while waiting for the buffer to become ready.
- */
- public void write(byte b) throws InterruptedException {
- while (usedSlots == buffer.length) {
- // Wait until not full.
- wait();
- }
- buffer[putPosition] = b;
- putPosition = (putPosition + 1) % buffer.length; // cyclically increment
- if (usedSlots++ == 0) {
- notifyAll();
- }
- }
-
- public int getFreeSlots() {
- return buffer.length - usedSlots;
- }
-
- public void write(byte[] b, int off, int len) throws InterruptedException {
- Assert.isTrue(len <= getFreeSlots());
- while (usedSlots == buffer.length) {
- // Wait until not full.
- wait();
- }
- int n = Math.min(len, buffer.length - putPosition);
- System.arraycopy(b, off, buffer, putPosition, n);
- if (putPosition + len > buffer.length) {
- System.arraycopy(b, off + n, buffer, 0, len - n);
- }
- putPosition = (putPosition + len) % buffer.length; // cyclically increment
- boolean wasEmpty = usedSlots == 0;
- usedSlots += len;
- if (wasEmpty) {
- notifyAll();
- }
- }
-
- /**
- * Read a single byte. Blocks until a byte is available.
- *
- * @return a byte from the buffer.
- * @throws InterruptedException when the thread is interrupted while waiting for the buffer to become ready.
- */
- public byte read() throws InterruptedException {
- while (usedSlots == 0) {
- if (closed) {
- return -1;
- }
- // Wait until not empty.
- wait();
- }
- byte b = buffer[takePosition];
- takePosition = (takePosition + 1) % buffer.length;
- if (usedSlots-- == buffer.length) {
- notifyAll();
- }
- return b;
- }
-
- public int read(byte[] b, int off, int len) throws InterruptedException {
- Assert.isTrue(len <= size());
- while (usedSlots == 0) {
- if (closed) {
- return 0;
- }
- // Wait until not empty.
- wait();
- }
- int n = Math.min(len, buffer.length - takePosition);
- System.arraycopy(buffer, takePosition, b, off, n);
- if (takePosition + len > n) {
- System.arraycopy(buffer, 0, b, off + n, len - n);
- }
- takePosition = (takePosition + len) % buffer.length;
- boolean wasFull = usedSlots == buffer.length;
- usedSlots -= len;
- if (wasFull) {
- notifyAll();
- }
- return len;
- }
-
- public void close() {
- closed = true;
- notifyAll();
- }
-
- public boolean isClosed() {
- return closed;
- }
-}
diff --git a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/terminal/model/ITerminalTextData.java b/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/terminal/model/ITerminalTextData.java
deleted file mode 100644
index a37d2d6..0000000
--- a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/terminal/model/ITerminalTextData.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Wind River Systems, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *******************************************************************************/
-package com.google.eclipse.tm.terminal.model;
-
-/**
- * A writable matrix of characters and {@link Style}. This is intended to be the low level representation of the text of
- * a Terminal. Higher layers are responsible to fill the text and styles into this representation.
- */
-public interface ITerminalTextData extends ITerminalTextDataReadOnly {
-
- void setDimensions(int height, int width);
-
- void setMaxHeight(int height);
-
- int getMaxHeight();
-
- void setChar(int line, int column, char c, Style style);
-
- void setChars(int line, int column, char[] chars, Style style);
-
- void setChars(int line, int column, char[] chars, int start, int len, Style style);
-
- void cleanLine(int line);
-
- /**
- * Shifts some lines up or down. The "empty" space is filled with {@code '\000'} chars and {@code null} {@link Style}.
- * <p>
- * To illustrate shift, here is some sample data:
- * <pre>
- * 0 aaaa
- * 1 bbbb
- * 2 cccc
- * 3 dddd
- * 4 eeee
- * </pre>
- *
- * Shift a region of 3 lines <b>up</b> by one line {@code shift(1,3,-1)}
- * <pre>
- * 0 aaaa
- * 1 cccc
- * 2 dddd
- * 3
- * 4 eeee
- * </pre>
- *
- * Shift a region of 3 lines <b>down</b> by one line {@code shift(1,3,1)}
- * <pre>
- * 0 aaaa
- * 1
- * 2 bbbb
- * 3 cccc
- * 4 eeee
- * </pre>
- *
- * @param startLine the start line of the shift.
- * @param size the number of lines to shift.
- * @param shift how much scrolling is done. New scrolled area is filled with {@code '\000'}. A negative number means
- * scroll down, positive scroll up (see example above).
- */
- void scroll(int startLine, int size, int shift);
-
- /**
- * Adds a new line to the terminal. If maxHeigth is reached, the entire terminal will be scrolled. Else a line will be
- * added.
- */
- void addLine();
-
- void copy(ITerminalTextData source);
-
- void copyLine(ITerminalTextData source, int sourceLine, int destinationLine);
-
- void copyRange(ITerminalTextData source, int sourceStartLine, int destinationStartLine, int length);
-
- void setCursorLine(int line);
-
- void setCursorColumn(int column);
-}
diff --git a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/terminal/model/ITerminalTextDataReadOnly.java b/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/terminal/model/ITerminalTextDataReadOnly.java
deleted file mode 100644
index cca29d0..0000000
--- a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/terminal/model/ITerminalTextDataReadOnly.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Wind River Systems, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- *******************************************************************************/
-package com.google.eclipse.tm.terminal.model;
-
-public interface ITerminalTextDataReadOnly {
- int getWidth();
-
- int getHeight();
-
- LineSegment[] getLineSegments(int line, int startCol, int numberOfCols);
-
- char getChar(int line, int column);
-
- Style getStyle(int line, int column);
-
- /**
- * Creates a new instance of {@link ITerminalTextDataSnapshot} that can be used to track changes. Make sure to call
- * {@link ITerminalTextDataSnapshot#detach()} if you don't need the snapshots anymore.
- * <p>
- * <b>Note: </b>A new snapshot is empty and needs a call to {@link ITerminalTextDataSnapshot#updateSnapshot(boolean)}
- * to get its initial values. You might want to setup the snapshot to your needs by calling
- * {@link ITerminalTextDataSnapshot#setInterestWindow(int, int)}.
- * </p>
- *
- * @return a new instance of {@link ITerminalTextDataSnapshot} that "listens" to changes of this one.
- */
- public ITerminalTextDataSnapshot makeSnapshot();
-
- char[] getChars(int line);
-
- Style[] getStyles(int line);
-
- int getCursorLine();
-
- int getCursorColumn();
-}
\ No newline at end of file
diff --git a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/terminal/model/ITerminalTextDataSnapshot.java b/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/terminal/model/ITerminalTextDataSnapshot.java
deleted file mode 100644
index 19b0f4a..0000000
--- a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/terminal/model/ITerminalTextDataSnapshot.java
+++ /dev/null
@@ -1,151 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 Wind River Systems, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Michael Scharf (Wind River) - initial API and implementation
- * Martin Oberhuber (Wind River) - [261486][api][cleanup] Mark @noimplement interfaces as @noextend
- *******************************************************************************/
-package com.google.eclipse.tm.terminal.model;
-
-/**
- * Maintains a snapshot of an instance of {@link ITerminalTextData}. While the {@link ITerminalTextData} continues
- * changing, the snapshot remains unchanged until the next snapshot is taken by calling
- * {@link #updateSnapshot(boolean)}. This is important, because the {@link ITerminalTextData} might get modified by
- * another thread.
- */
-public interface ITerminalTextDataSnapshot extends ITerminalTextDataReadOnly {
- /**
- * This listener gets called when the current snapshot is out of date. Calling
- * {@link ITerminalTextDataSnapshot#updateSnapshot(boolean)} will have an effect. Once the
- * {@link #snapshotOutOfDate(ITerminalTextDataSnapshot)} method is called, it will not be called until
- * {@link ITerminalTextDataSnapshot#updateSnapshot(boolean)} is called and a new snapshot needs to be updated again.
- */
- interface SnapshotOutOfDateListener {
- /**
- * Gets called when the snapshot is out of date. To get the snapshot up to date, call
- * {@link ITerminalTextDataSnapshot#updateSnapshot(boolean)}.
- *
- * @param snapshot The snapshot that is out of date.
- */
- void snapshotOutOfDate(ITerminalTextDataSnapshot snapshot);
- }
-
- void addListener(SnapshotOutOfDateListener listener);
-
- void removeListener(SnapshotOutOfDateListener listener);
-
- /**
- * Ends the listening to the {@link ITerminalTextData}. After this has been called no new snapshot data is collected.
- */
- void detach();
-
- boolean isOutOfDate();
-
- /**
- * The window of interest is the region the snapshot should track. Changes outside this region are ignored. The change
- * takes effect after an update.
- * @param startLine -1 means track the end of the data.
- * @param size number of lines to track. A size of -1 means track all.
- */
- void setInterestWindow(int startLine, int size);
-
- int getInterestWindowStartLine();
-
- int getInterestWindowSize();
-
- /**
- * Create a new snapshot of the {@link ITerminalTextData}. It will efficiently copy the data of the
- * {@link ITerminalTextData} into an internal representation. The snapshot also keeps track of the changes since the
- * previous snapshot.
- * <p>
- * With the methods {@link #getFirstChangedLine()}, {@link #getLastChangedLine()} and {@link #hasLineChanged(int)} you
- * can find out what has changed in the current snapshot since the previous snapshot.
- * </p>
- * <p>
- * If {@code detectScrolling} is {@code true} the information about scrolling can be retrieved using the following methods:
- * {@link #getScrollWindowStartLine()}, {@link #getScrollWindowSize()} and {@link #getScrollWindowShift()}.
- * </p>
- * <p>
- * <b>Note:</b> The method {@link #hasLineChanged(int)} returns changes <b>after</b> the scrolling has been applied.
- * </p>
- *
- * @param detectScrolling indicates whether the snapshot should try to identify scroll changes since the last
- * snapshot.
- */
- void updateSnapshot(boolean detectScrolling);
-
- /**
- * Returns the first line changed in this snapshot compared to the previous snapshot.
- * <p>
- * <b>Note:</b> If no line has changed, this returns {@link Integer#MAX_VALUE}.
- * <p>
- * <b>Note:</b> if {@link #updateSnapshot(boolean)} has been called with <code>true</code>, then this does not include
- * lines that only have been scrolled. This is the first line that has changed <b>after</b> the scroll has been
- * applied.
- *
- * @return the first line changed in this snapshot compared to the previous snapshot.
- */
- int getFirstChangedLine();
-
- /**
- * Returns the last line changed in this snapshot compared to the previous snapshot. If the height has changed since
- * the last update of the snapshot, then the returned value is within the new dimensions.
- * <p>
- * <b>Note:</b> If no line has changed, this returns <code>-1</code>
- * <p>
- * <b>Note:</b> if {@link #updateSnapshot(boolean)} has been called with <code>true</code>, then this does not include
- * lines that only have been scrolled. This is the last line that has changed <b>after</b> the scroll has been
- * applied.
- * <p>
- * A typical for loop using this method would look like this (note the <code><=</code> in the for loop):
- * <pre>
- * for (int line = snap.{@link #getFirstChangedLine()}; line <b><=</b> snap.getLastChangedLine(); line++)
- * if(snap.{@link #hasLineChanged(int) hasLineChanged(line)})
- * doSomething(line);
- * </pre>
- * @return the last line changed in this snapshot compared to the previous snapshot.
- */
- int getLastChangedLine();
-
- boolean hasLineChanged(int line);
-
- boolean hasDimensionsChanged();
-
- boolean hasTerminalChanged();
-
- /**
- * If {@link #updateSnapshot(boolean)} was called with {@code true}, then this method returns the top of the scroll
- * region.
- *
- * @return The first line scrolled in this snapshot compared to the previous snapshot.
- *
- * @see ITerminalTextData#scroll(int, int, int)
- */
- int getScrollWindowStartLine();
-
- /**
- * If {@link #updateSnapshot(boolean)} was called with {@code true}, then this method returns the size of the scroll
- * region. If nothing has changed, 0 is returned.
- *
- * @return The number of lines scrolled in this snapshot compared to the previous snapshot.
- *
- * @see ITerminalTextData#scroll(int, int, int)
- */
- int getScrollWindowSize();
-
- /**
- * If {@link #updateSnapshot(boolean)} was called with {@code true}, then this method returns number of lines moved by
- * the scroll region.
- *
- * @return The the scroll shift of this snapshot compared to the previous snapshot.
- *
- * @see ITerminalTextData#scroll(int, int, int)
- */
- int getScrollWindowShift();
-
- ITerminalTextData getTerminalTextData();
-}
diff --git a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/terminal/model/LineSegment.java b/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/terminal/model/LineSegment.java
deleted file mode 100644
index 3e07093..0000000
--- a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/terminal/model/LineSegment.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007 Wind River Systems, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Michael Scharf (Wind River) - initial API and implementation
- *******************************************************************************/
-package com.google.eclipse.tm.terminal.model;
-
-public class LineSegment {
- private final int column;
- private final String text;
- private final Style style;
-
- public LineSegment(int column, String text, Style style) {
- this.column = column;
- this.text = text;
- this.style = style;
- }
-
- public int getColumn() {
- return column;
- }
-
- public Style getStyle() {
- return style;
- }
-
- public String getText() {
- return text;
- }
-
- @Override public String toString() {
- return "LineSegment(" + column + ", \"" + text + "\"," + style + ")";
- }
-}
\ No newline at end of file
diff --git a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/terminal/model/Style.java b/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/terminal/model/Style.java
deleted file mode 100644
index 9dada9f..0000000
--- a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/terminal/model/Style.java
+++ /dev/null
@@ -1,170 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007 Wind River Systems, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *******************************************************************************/
-package com.google.eclipse.tm.terminal.model;
-
-import java.util.*;
-
-// TODO add an Object for user data, use weak map to keep track of styles with associated user data.
-public class Style {
- private final StyleColor foreground;
- private final StyleColor background;
- private final boolean bold;
- private final boolean blink;
- private final boolean underline;
- private final boolean reverse;
-
- private static final Map<Style, Style> STYLES = new HashMap<Style, Style>();
-
- private Style(StyleColor forground, StyleColor background, boolean bold, boolean blink, boolean underline,
- boolean reverse) {
- this.foreground = forground;
- this.background = background;
- this.bold = bold;
- this.blink = blink;
- this.underline = underline;
- this.reverse = reverse;
- }
-
- public static Style getStyle(StyleColor forground, StyleColor background, boolean bold, boolean blink,
- boolean underline, boolean reverse) {
- Style style = new Style(forground, background, bold, blink, underline, reverse);
- Style cached;
- synchronized (STYLES) {
- cached = STYLES.get(style);
- if (cached == null) {
- cached = style;
- STYLES.put(cached, cached);
- }
- }
- return cached;
- }
-
- public static Style getStyle(String forground, String background) {
- return getStyle(
- StyleColor.getStyleColor(forground), StyleColor.getStyleColor(background), false, false, false, false);
- }
-
- public static Style getStyle(StyleColor forground, StyleColor background) {
- return getStyle(forground, background, false, false, false, false);
- }
-
- public Style setForground(StyleColor forground) {
- return getStyle(forground, background, bold, blink, underline, reverse);
- }
-
- public Style setBackground(StyleColor background) {
- return getStyle(foreground, background, bold, blink, underline, reverse);
- }
-
- public Style setForground(String colorName) {
- return getStyle(StyleColor.getStyleColor(colorName), background, bold, blink, underline, reverse);
- }
-
- public Style setBackground(String colorName) {
- return getStyle(foreground, StyleColor.getStyleColor(colorName), bold, blink, underline, reverse);
- }
-
- public Style setBold(boolean bold) {
- return getStyle(foreground, background, bold, blink, underline, reverse);
- }
-
- public Style setBlink(boolean blink) {
- return getStyle(foreground, background, bold, blink, underline, reverse);
- }
-
- public Style setUnderline(boolean underline) {
- return getStyle(foreground, background, bold, blink, underline, reverse);
- }
-
- public Style setReverse(boolean reverse) {
- return getStyle(foreground, background, bold, blink, underline, reverse);
- }
-
- public StyleColor getBackground() {
- return background;
- }
-
- public boolean isBlink() {
- return blink;
- }
-
- public boolean isBold() {
- return bold;
- }
-
- public StyleColor getForeground() {
- return foreground;
- }
-
- public boolean isReverse() {
- return reverse;
- }
-
- public boolean isUnderline() {
- return underline;
- }
-
- @Override public int hashCode() {
- final int prime = 31;
- int result = 1;
- result = prime * result + ((background == null) ? 0 : background.hashCode());
- result = prime * result + (blink ? 1231 : 1237);
- result = prime * result + (bold ? 1231 : 1237);
- result = prime * result + ((foreground == null) ? 0 : foreground.hashCode());
- result = prime * result + (reverse ? 1231 : 1237);
- result = prime * result + (underline ? 1231 : 1237);
- return result;
- }
-
- @Override public boolean equals(Object obj) {
- if (this == obj) {
- return true;
- }
- if (obj == null) {
- return false;
- }
- if (getClass() != obj.getClass()) {
- return false;
- }
- final Style other = (Style) obj;
- if (background != other.background) {
- return false;
- }
- if (blink != other.blink) {
- return false;
- }
- if (bold != other.bold) {
- return false;
- }
- if (foreground != other.foreground) {
- return false;
- }
- if (reverse != other.reverse) {
- return false;
- }
- return underline == other.underline;
- }
-
- @Override public String toString() {
- StringBuilder builder = new StringBuilder();
- builder.append("Style [foreground=");
- builder.append(foreground);
- builder.append(", background=");
- builder.append(background);
- builder.append(", bold=");
- builder.append(bold);
- builder.append(", blink=");
- builder.append(blink);
- builder.append(", underline=");
- builder.append(underline);
- builder.append(", reverse=");
- builder.append(reverse);
- builder.append("]");
- return builder.toString();
- }
-}
\ No newline at end of file
diff --git a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/terminal/model/StyleColor.java b/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/terminal/model/StyleColor.java
deleted file mode 100644
index 6170485..0000000
--- a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/terminal/model/StyleColor.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007 Wind River Systems, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *******************************************************************************/
-package com.google.eclipse.tm.terminal.model;
-
-import java.util.concurrent.*;
-
-public class StyleColor {
- private static final ConcurrentMap<String, StyleColor> STYLE_COLORS = new ConcurrentHashMap<String, StyleColor>();
-
- private final String name;
-
- public static StyleColor getStyleColor(String name) {
- StyleColor result = new StyleColor(name);
- return STYLE_COLORS.putIfAbsent(name, result);
- }
-
- private StyleColor(String name) {
- this.name = name;
- }
-
- public String getName() {
- return name;
- }
-
- @Override public String toString() {
- return name;
- }
-}
\ No newline at end of file
diff --git a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/terminal/model/TerminalTextDataFactory.java b/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/terminal/model/TerminalTextDataFactory.java
deleted file mode 100644
index a9c014b..0000000
--- a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/terminal/model/TerminalTextDataFactory.java
+++ /dev/null
@@ -1,16 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007 Wind River Systems, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *******************************************************************************/
-package com.google.eclipse.tm.terminal.model;
-
-import com.google.eclipse.tm.internal.terminal.model.*;
-
-public class TerminalTextDataFactory {
- public static ITerminalTextData makeTerminalTextData() {
- return new SynchronizedTerminalTextData(new TerminalTextData());
- }
-}