Просмотр исходного кода

Added support for passing errors to environment using shutdown code

git-svn-id: https://svn.inf.ethz.ch/svn/lecturers/a2/trunk@7522 8c9fc860-2736-0410-a75d-ab315db34111
negelef 7 лет назад
Родитель
Сommit
2d27d287dd
1 измененных файлов с 9 добавлено и 9 удалено
  1. 9 9
      source/StdIOShell.Mod

+ 9 - 9
source/StdIOShell.Mod

@@ -15,12 +15,12 @@ BEGIN
 	RETURN TRUE;
 END Activate;
 
-PROCEDURE Execute(context: Commands.Context);
-VAR str: ARRAY 256 OF CHAR;  b: BOOLEAN;
+PROCEDURE Execute(context: Commands.Context): BOOLEAN;
+VAR str: ARRAY 256 OF CHAR;
 BEGIN
 	IF ~context.arg.GetString(str) THEN  
 		context.out.String("Critical error: no arg"); 
-		RETURN 
+		RETURN FALSE;
 	END;
 	IF ~context.arg.GetString(str) THEN 
 		str := "Shell.Start";
@@ -29,17 +29,17 @@ BEGIN
 	ELSIF (str="i") OR (str = "interpreter") THEN str := "InterpreterShell.Start"
 	ELSIF (str = "execute") OR (str="e") THEN str := "SystemTools.DoFile";
 	ELSIF (str = "run") OR (str="r") THEN 
-		IF ~Activate(context, "SystemTools.DoFile") THEN RETURN END;
+		IF ~Activate(context, "SystemTools.DoFile") THEN RETURN FALSE END;
 		str := "Shell.Start";
 	END;
-	
-	b := Activate(context, str);
+	RETURN Activate(context, str);
 END Execute;
 
 TYPE 
 	(* excute the shell and termination in separate thread with proper process data structure *)
 	Executor=OBJECT
-	VAR done: BOOLEAN;
+	VAR done := FALSE: BOOLEAN;
+	VAR code := Modules.PowerDown: LONGINT;
 
 		PROCEDURE Wait;
 		BEGIN{EXCLUSIVE}
@@ -47,12 +47,12 @@ TYPE
 		END Wait;
 		
 	BEGIN{ACTIVE}
-		Execute(StdIO.env);
+		IF Execute(StdIO.env) THEN code := Modules.Reboot END;
 	FINALLY
 		IF Verbose THEN
 			Trace.String("StdIOShell: Exit"); Trace.Ln;
 		END;
-		Modules.Shutdown(Modules.PowerDown);
+		Modules.Shutdown(code);
 		done := TRUE
 	END Executor;