|
From: <fd...@us...> - 2008-08-02 19:25:50
|
Revision: 4386
http://jnode.svn.sourceforge.net/jnode/?rev=4386&view=rev
Author: fduminy
Date: 2008-08-02 19:25:44 +0000 (Sat, 02 Aug 2008)
Log Message:
-----------
fix for following FBConsole bugs :
- impossible to switch to the log4j console
- the main console is loosing some lines at boot time
Modified Paths:
--------------
trunk/core/src/driver/org/jnode/driver/console/Console.java
trunk/core/src/driver/org/jnode/driver/console/ConsoleManager.java
trunk/core/src/driver/org/jnode/driver/console/textscreen/TextScreenConsole.java
trunk/core/src/driver/org/jnode/driver/console/textscreen/TextScreenConsoleManager.java
trunk/gui/src/driver/org/jnode/driver/textscreen/fb/FBConsole.java
Modified: trunk/core/src/driver/org/jnode/driver/console/Console.java
===================================================================
--- trunk/core/src/driver/org/jnode/driver/console/Console.java 2008-08-02 18:44:38 UTC (rev 4385)
+++ trunk/core/src/driver/org/jnode/driver/console/Console.java 2008-08-02 19:25:44 UTC (rev 4386)
@@ -23,6 +23,7 @@
import org.jnode.driver.input.KeyboardListener;
import org.jnode.driver.input.PointerListener;
+import org.jnode.driver.textscreen.TextScreen;
import org.jnode.system.event.FocusListener;
/**
@@ -111,4 +112,10 @@
* @return
*/
public ConsoleManager getManager();
+
+ /**
+ * Method called to notify the {@link Console} that the system {@link TextScreen} has changed
+ * @param textScreen the new system {@link TextScreen}
+ */
+ public void systemScreenChanged(TextScreen textScreen);
}
Modified: trunk/core/src/driver/org/jnode/driver/console/ConsoleManager.java
===================================================================
--- trunk/core/src/driver/org/jnode/driver/console/ConsoleManager.java 2008-08-02 18:44:38 UTC (rev 4385)
+++ trunk/core/src/driver/org/jnode/driver/console/ConsoleManager.java 2008-08-02 19:25:44 UTC (rev 4386)
@@ -25,6 +25,7 @@
import java.util.Set;
import org.jnode.driver.input.KeyboardListener;
import org.jnode.driver.input.PointerListener;
+import org.jnode.driver.textscreen.TextScreenManager;
/**
* @author epr
@@ -151,4 +152,10 @@
public Console createConsole(String name, int options);
public void printConsoles(PrintStream ps);
+
+ /**
+ * That method is called when the system {@link TextScreenManager} has changed
+ * It's a temporary workaround. FIXME : create and use a listener mechanism in InitialNaming instead
+ */
+ public void textScreenManagerChanged();
}
Modified: trunk/core/src/driver/org/jnode/driver/console/textscreen/TextScreenConsole.java
===================================================================
--- trunk/core/src/driver/org/jnode/driver/console/textscreen/TextScreenConsole.java 2008-08-02 18:44:38 UTC (rev 4385)
+++ trunk/core/src/driver/org/jnode/driver/console/textscreen/TextScreenConsole.java 2008-08-02 19:25:44 UTC (rev 4386)
@@ -26,6 +26,7 @@
import java.security.AccessController;
import java.security.PrivilegedAction;
+import org.jnode.driver.console.Console;
import org.jnode.driver.console.ConsoleManager;
import org.jnode.driver.console.InputCompleter;
import org.jnode.driver.console.TextConsole;
@@ -47,7 +48,7 @@
/**
* The screen I'm writing on
*/
- private final TextScreen screen;
+ private TextScreen screen;
/**
* Width of the screen
@@ -89,6 +90,11 @@
private final boolean claimSystemOutErr;
private VmIsolate myIsolate;
+
+ /**
+ * The options used to create this {@link TextScreenConsole}
+ */
+ private final int options;
/**
* @param mgr
@@ -97,6 +103,7 @@
*/
public TextScreenConsole(ConsoleManager mgr, String name, TextScreen screen, int options) {
super(mgr, name);
+ this.options = options;
this.screen = screen;
this.scrWidth = screen.getWidth();
this.scrHeight = screen.getHeight();
@@ -412,4 +419,31 @@
protected final TextScreen getScreen() {
return this.screen;
}
+
+ /**
+ * Get the options used to create this {@link TextScreenConsole}
+ * @return
+ */
+ final int getOptions() {
+ return options;
+ }
+
+ /**
+ * @see Console#systemScreenChanged(TextScreen)
+ */
+ @Override
+ public void systemScreenChanged(TextScreen systemScreen) {
+ // ensure that old and new screens are compatible
+ if ((systemScreen.getWidth() != screen.getWidth()) || (systemScreen.getHeight() != screen.getHeight())) {
+ throw new IllegalArgumentException("old and new screen have different sizes");
+ }
+
+ TextScreen oldScreen = screen;
+ screen = systemScreen;
+
+ final int size = oldScreen.getWidth() * oldScreen.getHeight();
+ oldScreen.ensureVisible(0, isFocused());
+ oldScreen.copyTo(screen, 0, size);
+ syncScreen(0, size);
+ }
}
Modified: trunk/core/src/driver/org/jnode/driver/console/textscreen/TextScreenConsoleManager.java
===================================================================
--- trunk/core/src/driver/org/jnode/driver/console/textscreen/TextScreenConsoleManager.java 2008-08-02 18:44:38 UTC (rev 4385)
+++ trunk/core/src/driver/org/jnode/driver/console/textscreen/TextScreenConsoleManager.java 2008-08-02 19:25:44 UTC (rev 4386)
@@ -25,6 +25,7 @@
import javax.naming.NameNotFoundException;
+import org.jnode.driver.console.Console;
import org.jnode.driver.console.ConsoleException;
import org.jnode.driver.console.spi.AbstractConsoleManager;
import org.jnode.driver.textscreen.ScrollableTextScreen;
@@ -54,8 +55,7 @@
*/
public TextScreenConsole createConsole(String name, int options) {
if ((options & CreateOptions.TEXT) != 0) {
- final TextScreenManager tsm;
- tsm = getTextScreenManager();
+ final TextScreenManager tsm = getTextScreenManager();
final TextScreenConsole console;
if (name == null) {
name = autoName();
@@ -122,6 +122,24 @@
}
}
+
+ @Override
+ public void textScreenManagerChanged() {
+ final TextScreen systemScreen = getTextScreenManager().getSystemScreen();
+
+ for (Console c : getConsoles()) {
+ TextScreenConsole console = (TextScreenConsole) c;
+
+ final TextScreen screen;
+ if ((console.getOptions() & CreateOptions.SCROLLABLE) != 0) {
+ screen = systemScreen.createCompatibleScrollableBufferScreen(SCROLLABLE_HEIGHT);
+ } else {
+ screen = systemScreen.createCompatibleBufferScreen();
+ }
+ console.systemScreenChanged(screen);
+ }
+ }
+
/*
protected void setAccelerator(Console console) {
for (int i = 0; i < 12; i++) {
Modified: trunk/gui/src/driver/org/jnode/driver/textscreen/fb/FBConsole.java
===================================================================
--- trunk/gui/src/driver/org/jnode/driver/textscreen/fb/FBConsole.java 2008-08-02 18:44:38 UTC (rev 4385)
+++ trunk/gui/src/driver/org/jnode/driver/textscreen/fb/FBConsole.java 2008-08-02 19:25:44 UTC (rev 4386)
@@ -20,7 +20,6 @@
import org.jnode.shell.CommandShell;
import org.jnode.shell.ShellManager;
import org.jnode.shell.ShellUtils;
-import org.jnode.vm.VmSystem;
/**
* @author Levente S\u00e1ntha
@@ -87,34 +86,21 @@
InitialNaming.unbind(TextScreenManager.NAME);
InitialNaming.bind(TextScreenManager.NAME, fbTsMgr);
- ////
+ //// FIXME we shouldn't be forced to call that : a better (and more generic) solution would be to use a listener on InitialNaming binding changes
ConsoleManager mgr = InitialNaming.lookup(ConsoleManager.NAME);
+ mgr.textScreenManagerChanged();
+ ////
- //
- final int options = ConsoleManager.CreateOptions.TEXT |
- ConsoleManager.CreateOptions.SCROLLABLE;
-
- final TextConsole first = (TextConsole) mgr.createConsole(
- null, options);
-
- mgr.registerConsole(first);
- mgr.focus(first);
- AccessController.doPrivileged(new PrivilegedAction<Object>() {
- public Object run() {
- System.setOut(new PrintStream(first.getOut()));
- System.setErr(new PrintStream(first.getErr()));
- return null;
- }
- });
- System.out.println(VmSystem.getBootLog());
-
- if (first.getIn() == null) {
- throw new Exception("console input is null");
- }
-
+ //// FIXME we shouldn't need that code since command shell is already created elsewhere
+ // but without that code :
+ // - it's impossible to scroll nor to type anything that is displayed in the console
+ // - it's also impossible to switch between consoles
+ // NB : I have checked and the scrollUp/ScrollDown method are called properly
+ final TextConsole first = (TextConsole) mgr.getFocus();
new CommandShell(first).run();
Thread.sleep(60 * 1000);
-
+ //// end of FIXME
+
} catch (Throwable ex) {
log.error("Error in FBConsole", ex);
} finally {
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|