2
0
Эх сурвалжийг харах

Patched Release.Mod --> Now accepts more prefixes (still static but conceptually unlimited)
Included Linux32G in build tools.

git-svn-id: https://svn.inf.ethz.ch/svn/lecturers/a2/trunk@6963 8c9fc860-2736-0410-a75d-ab315db34111

felixf 8 жил өмнө
parent
commit
69902d55a4
2 өөрчлөгдсөн 178 нэмэгдсэн , 100 устгасан
  1. 89 33
      source/Release.Mod
  2. 89 67
      source/Release.Tool

+ 89 - 33
source/Release.Mod

@@ -112,20 +112,22 @@ CONST
 	No = 3; (* per default, don't install package *)
 	No = 3; (* per default, don't install package *)
 
 
 	(* File.release*)
 	(* File.release*)
-	All = {0..31};
 
 
-	MaxBuilds = 32;
-	MaxPrefixes = 32;
-	MaxNofImports = 64; (* Maximum number of entries in a module import section *)
+	MaxBuilds = 128;
+	MaxPrefixes = 128;
+	MaxNofImports = 128; (* Maximum number of entries in a module import section *)
 
 
 	Tab = 9X;
 	Tab = 9X;
 
 
 	Mode_ShowImported = 0;
 	Mode_ShowImported = 0;
 	Mode_ShowImporting = 1;
 	Mode_ShowImporting = 1;
 
 
+	SetSize = MAX(SET)+1;
+
 TYPE
 TYPE
 
 
 	Name = ARRAY 72 OF CHAR;
 	Name = ARRAY 72 OF CHAR;
+	Set = ARRAY (MaxPrefixes-1) DIV SetSize + 1 OF SET;
 
 
 TYPE
 TYPE
 
 
@@ -147,12 +149,12 @@ TYPE
 		nofFilesAll : LONGINT;
 		nofFilesAll : LONGINT;
 		nofSourcesAll : LONGINT;
 		nofSourcesAll : LONGINT;
 
 
-		PROCEDURE Get(VAR nofFiles, nofSources : LONGINT; release : SET);
+		PROCEDURE Get(VAR nofFiles, nofSources : LONGINT; CONST release : Set);
 		VAR i : LONGINT;
 		VAR i : LONGINT;
 		BEGIN
 		BEGIN
 			nofFiles := 0; nofSources := 0;
 			nofFiles := 0; nofSources := 0;
 			FOR i := 0 TO MaxPrefixes-1 DO
 			FOR i := 0 TO MaxPrefixes-1 DO
-				IF i IN release THEN
+				IF Has(release, i) THEN
 					nofFiles := nofFiles + stats[i].nofFiles;
 					nofFiles := nofFiles + stats[i].nofFiles;
 					nofSources := nofSources + stats[i].nofSources;
 					nofSources := nofSources + stats[i].nofSources;
 				END;
 				END;
@@ -164,9 +166,9 @@ TYPE
 		BEGIN
 		BEGIN
 			INC(nofFiles);
 			INC(nofFiles);
 			IF file.IsSourceCode() THEN INC(nofSources); END;
 			IF file.IsSourceCode() THEN INC(nofSources); END;
-			IF (file.release # All) THEN
+			IF ~IsAll(file.release) THEN
 				FOR i := 0 TO MaxPrefixes-1 DO
 				FOR i := 0 TO MaxPrefixes-1 DO
-					IF i IN file.release THEN
+					IF Has(file.release, i) THEN
 						INC(stats[i].nofFiles);
 						INC(stats[i].nofFiles);
 						IF file.IsSourceCode() THEN INC(stats[i].nofSources); END;
 						IF file.IsSourceCode() THEN INC(stats[i].nofSources); END;
 					END;
 					END;
@@ -384,7 +386,7 @@ TYPE
 
 
 		package- : Package;
 		package- : Package;
 		options: ARRAY 8 OF CHAR;
 		options: ARRAY 8 OF CHAR;
-		release- : SET;
+		release- : Set;
 		flags-: SET;
 		flags-: SET;
 		file : Files.File;
 		file : Files.File;
 		pos : LONGINT; (* Position in package description file *)
 		pos : LONGINT; (* Position in package description file *)
@@ -407,16 +409,21 @@ TYPE
 			doCompile := TRUE;
 			doCompile := TRUE;
 			package := NIL;
 			package := NIL;
 			COPY("", options);
 			COPY("", options);
-			release := {};
+			SetEmpty(release);
 			flags := {};
 			flags := {};
 			file := NIL;
 			file := NIL;
 			pos := 0;
 			pos := 0;
 			prev := NIL; next := NIL;
 			prev := NIL; next := NIL;
 		END Init;
 		END Init;
 
 
-		PROCEDURE IsInRelease*(release : SET) : BOOLEAN;
+		PROCEDURE IsInRelease*(release : Set) : BOOLEAN;
+		VAR i: LONGINT;
 		BEGIN
 		BEGIN
-			RETURN (SELF.release = All) OR (SELF.release * release # {});
+			IF IsAll(SELF.release) THEN RETURN TRUE END; 
+			FOR i := 0 TO LEN(release)-1 DO 
+				IF SELF.release[i] * release[i] # {} THEN RETURN TRUE END;
+			END;
+			RETURN FALSE;
 		END IsInRelease;
 		END IsInRelease;
 
 
 		PROCEDURE IsSourceCode*() : BOOLEAN;
 		PROCEDURE IsSourceCode*() : BOOLEAN;
@@ -442,6 +449,7 @@ TYPE
 					Strings.Append(temp, ": Import # not found in file #");
 					Strings.Append(temp, ": Import # not found in file #");
 					MakeMessage(message, temp, module.imports[i], name);
 					MakeMessage(message, temp, module.imports[i], name);
 					diagnostics.Error(builds.source, pos, Diagnostics.Invalid, message);
 					diagnostics.Error(builds.source, pos, Diagnostics.Invalid, message);
+					HALT(100);
 				END;
 				END;
 			END;
 			END;
 		END CheckImports;
 		END CheckImports;
@@ -505,7 +513,7 @@ TYPE
 		onlyPackages: Strings.StringArray;
 		onlyPackages: Strings.StringArray;
 		compileOptions, linkOptions: Options.Parameter; 
 		compileOptions, linkOptions: Options.Parameter; 
 		compiler, linker: ARRAY 128 OF CHAR;
 		compiler, linker: ARRAY 128 OF CHAR;
-		target : ARRAY 8 OF CHAR;
+		target : ARRAY 32 OF CHAR;
 		extension : ARRAY 8 OF CHAR;
 		extension : ARRAY 8 OF CHAR;
 		symbolFileExtension : ARRAY 8 OF CHAR;
 		symbolFileExtension : ARRAY 8 OF CHAR;
 		path : Files.FileName;
 		path : Files.FileName;
@@ -525,7 +533,7 @@ TYPE
 		(* Name of the package description file *)
 		(* Name of the package description file *)
 		builds : Builds;
 		builds : Builds;
 
 
-		include : SET;
+		include : Set;
 
 
 		position- : LONGINT;
 		position- : LONGINT;
 
 
@@ -548,7 +556,7 @@ TYPE
 			files := NIL;
 			files := NIL;
 			packages := NIL;
 			packages := NIL;
 			builds := NIL;
 			builds := NIL;
-			include := {};
+			SetEmpty(include);
 			position := -1;
 			position := -1;
 		END Init;
 		END Init;
 
 
@@ -1461,7 +1469,7 @@ TYPE
 
 
 		(* Add the specified prefix to the prefixes array if its not already contained *)
 		(* Add the specified prefix to the prefixes array if its not already contained *)
 		PROCEDURE AddPrefix(CONST prefix : Name; diagnostics : Diagnostics.Diagnostics) : BOOLEAN;
 		PROCEDURE AddPrefix(CONST prefix : Name; diagnostics : Diagnostics.Diagnostics) : BOOLEAN;
-		VAR error : BOOLEAN; i : LONGINT;
+		VAR error : BOOLEAN; i : LONGINT; j: LONGINT;
 		BEGIN
 		BEGIN
 			ASSERT((prefix # "") & (diagnostics # NIL));
 			ASSERT((prefix # "") & (diagnostics # NIL));
 			error := FALSE;
 			error := FALSE;
@@ -1474,6 +1482,9 @@ TYPE
 				ELSE
 				ELSE
 					error := TRUE;
 					error := TRUE;
 					diagnostics.Warning("", Diagnostics.Invalid, Diagnostics.Invalid, "Maximum number of prefixes exceeded");
 					diagnostics.Warning("", Diagnostics.Invalid, Diagnostics.Invalid, "Maximum number of prefixes exceeded");
+					FOR j := 0 TO LEN(prefixes)-1 DO
+						TRACE(prefixes[j]);
+					END;
 				END;
 				END;
 			END;
 			END;
 			RETURN ~error;
 			RETURN ~error;
@@ -1581,7 +1592,7 @@ TYPE
 					nofFiles := 0;
 					nofFiles := 0;
 					file := files;
 					file := files;
 					WHILE (file # NIL) DO
 					WHILE (file # NIL) DO
-						IF (file.release # All) & (prefix IN file.release) THEN
+						IF ~IsAll(file.release) & Has(file.release, prefix) THEN
 							w.Char(Tab); w.String(file.name); w.Ln;
 							w.Char(Tab); w.String(file.name); w.Ln;
 							INC(nofFiles);
 							INC(nofFiles);
 						END;
 						END;
@@ -1613,20 +1624,22 @@ TYPE
 			w.Update;
 			w.Update;
 		END Show;
 		END Show;
 
 
-		PROCEDURE GetReleaseSet(build : BuildObj; VAR release : SET);
-		VAR prefix, index : LONGINT;
+		PROCEDURE GetReleaseSet(build : BuildObj; VAR release : Set): BOOLEAN;
+		VAR prefix, index, i : LONGINT;
 		BEGIN
 		BEGIN
-			release := {};
+			SetEmpty(release);
 			FOR prefix := 0 TO LEN(build.prefixes)-1 DO
 			FOR prefix := 0 TO LEN(build.prefixes)-1 DO
 				IF (build.prefixes[prefix] # "") THEN
 				IF (build.prefixes[prefix] # "") THEN
 					index := GetPrefixIndex(build.prefixes[prefix]);
 					index := GetPrefixIndex(build.prefixes[prefix]);
 					IF (index >= 0) THEN
 					IF (index >= 0) THEN
-						INCL(release, index);
+						Incl(release, index);
 					ELSE
 					ELSE
-						HALT(99);
+						TRACE("GETRELEASE SET FAILED", build.prefixes[prefix], index);
+						RETURN FALSE;
 					END;
 					END;
 				END;
 				END;
 			END;
 			END;
+			RETURN TRUE;
 		END GetReleaseSet;
 		END GetReleaseSet;
 
 
 		(** Get a reference to a BuildObj by name *)
 		(** Get a reference to a BuildObj by name *)
@@ -1660,7 +1673,7 @@ TYPE
 			RETURN ~error;
 			RETURN ~error;
 		END AddBuild;
 		END AddBuild;
 
 
-		PROCEDURE AddFile(CONST filename : ARRAY OF CHAR;  release : SET; package : Package;  pos : LONGINT);
+		PROCEDURE AddFile(CONST filename : ARRAY OF CHAR;  release : Set; package : Package;  pos : LONGINT);
 		VAR file, f : File; pre, suf : Files.FileName;
 		VAR file, f : File; pre, suf : Files.FileName;
 		BEGIN
 		BEGIN
 			ASSERT(package # NIL);
 			ASSERT(package # NIL);
@@ -1729,7 +1742,7 @@ TYPE
 			ASSERT(diagnostics # NIL);
 			ASSERT(diagnostics # NIL);
 			FOR build := 0 TO LEN(builds)-1 DO
 			FOR build := 0 TO LEN(builds)-1 DO
 				IF (builds[build] # NIL) THEN
 				IF (builds[build] # NIL) THEN
-					GetReleaseSet(builds[build], builds[build].include);
+					IF GetReleaseSet(builds[build], builds[build].include) THEN
 					builds[build].files := files;
 					builds[build].files := files;
 					builds[build].packages := packages;
 					builds[build].packages := packages;
 					IF (builds[build].excludedPackages # NIL) THEN
 					IF (builds[build].excludedPackages # NIL) THEN
@@ -1743,6 +1756,7 @@ TYPE
 							END;
 							END;
 						END;
 						END;
 					END;
 					END;
+					END;
 				END;
 				END;
 			END;
 			END;
 		END Initialize;
 		END Initialize;
@@ -2259,15 +2273,15 @@ TYPE
 			Prefix = prefix {"," prefix}
 			Prefix = prefix {"," prefix}
 			FileList = filename {" " filename} *)
 			FileList = filename {" " filename} *)
 		PROCEDURE ParsePackage(builds : Builds;  VAR token : Token) : BOOLEAN;
 		PROCEDURE ParsePackage(builds : Builds;  VAR token : Token) : BOOLEAN;
-		VAR currentRelease : SET; index : LONGINT; pos : LONGINT; nbr : ARRAY 8 OF CHAR; caseEqual : BOOLEAN; file : File;
+		VAR currentRelease : Set; index : LONGINT; pos : LONGINT; nbr : ARRAY 8 OF CHAR; caseEqual : BOOLEAN; file : File;
 		BEGIN
 		BEGIN
-			currentRelease := All;
+			SetAll(currentRelease);
 			LOOP
 			LOOP
 				IF scanner.Get(token) THEN
 				IF scanner.Get(token) THEN
 					index := builds.GetPrefixIndex(token);
 					index := builds.GetPrefixIndex(token);
 					IF (index >= 0) THEN
 					IF (index >= 0) THEN
-						IF (currentRelease = All) THEN
-							currentRelease := {};
+						IF IsAll(currentRelease) THEN
+							SetEmpty(currentRelease);
 							IF ~ParseBuildPrefixes(builds, token, currentRelease, pos) THEN
 							IF ~ParseBuildPrefixes(builds, token, currentRelease, pos) THEN
 								RETURN FALSE;
 								RETURN FALSE;
 							END;
 							END;
@@ -2277,8 +2291,8 @@ TYPE
 							RETURN FALSE;
 							RETURN FALSE;
 						END;
 						END;
 					ELSIF (token = CLOSESECTION) THEN
 					ELSIF (token = CLOSESECTION) THEN
-						IF (currentRelease # All) THEN
-							currentRelease := All;
+						IF ~IsAll(currentRelease) THEN
+							SetAll(currentRelease);
 						ELSE
 						ELSE
 							Error(scanner.pos, "No matching opening bracket", "", "");
 							Error(scanner.pos, "No matching opening bracket", "", "");
 							RETURN FALSE;
 							RETURN FALSE;
@@ -2306,15 +2320,15 @@ TYPE
 					EXIT;
 					EXIT;
 				END;
 				END;
 			END;
 			END;
-			RETURN (currentRelease = All);
+			RETURN IsAll(currentRelease);
 		END ParsePackage;
 		END ParsePackage;
 
 
-		PROCEDURE ParseBuildPrefixes(builds : Builds; VAR token : Token; VAR release : SET; VAR pos : LONGINT) : BOOLEAN;
+		PROCEDURE ParseBuildPrefixes(builds : Builds; VAR token : Token; VAR release : Set; VAR pos : LONGINT) : BOOLEAN;
 		VAR index : LONGINT; message : ARRAY 128 OF CHAR;
 		VAR index : LONGINT; message : ARRAY 128 OF CHAR;
 		BEGIN
 		BEGIN
 			index := builds.GetPrefixIndex(token);
 			index := builds.GetPrefixIndex(token);
 			IF (index >= 0) THEN
 			IF (index >= 0) THEN
-				INCL(release, index);
+				Incl(release,index);
 			ELSE
 			ELSE
 				MakeMessage(message, "Unknown build prefix #", token, "");
 				MakeMessage(message, "Unknown build prefix #", token, "");
 				diagnostics.Warning(scanner.source, scanner.pos, Diagnostics.Invalid, message);
 				diagnostics.Warning(scanner.source, scanner.pos, Diagnostics.Invalid, message);
@@ -2343,6 +2357,47 @@ TYPE
 
 
 	END Parser;
 	END Parser;
 
 
+
+	PROCEDURE SetAll(VAR s: Set);
+	VAR i: LONGINT;
+	BEGIN
+		FOR i := 0 TO LEN(s)-1 DO 
+			s[i] := {MIN(SET)..MAX(SET)};
+		END;
+	END SetAll;
+	
+	PROCEDURE SetEmpty(VAR s: Set);
+	VAR i: LONGINT;
+	BEGIN
+		FOR i := 0 TO LEN(s)-1 DO 
+			s[i] := {};
+		END;
+	END SetEmpty;
+	
+	PROCEDURE IsAll(CONST s: Set): BOOLEAN;
+	VAR i: LONGINT;
+	BEGIN
+		FOR i := 0 TO LEN(s)-1 DO 
+			IF s[i] # {MIN(SET)..MAX(SET)} THEN RETURN FALSE END; 
+		END;
+		RETURN TRUE;
+	END IsAll;
+	
+	PROCEDURE Incl(VAR s: Set; i: LONGINT);
+	BEGIN
+		INCL(s[i DIV SetSize], i MOD SetSize); 
+	END Incl;
+
+	PROCEDURE Excl(VAR s: Set; i: LONGINT);
+	BEGIN
+		EXCL(s[i DIV SetSize], i MOD SetSize); 
+	END Excl;
+	
+	PROCEDURE Has(CONST s: Set; i: LONGINT): BOOLEAN;
+	BEGIN
+		RETURN i MOD SetSize IN s[i DIV SetSize];
+	END Has;
+	
 PROCEDURE GetModuleInfo(
 PROCEDURE GetModuleInfo(
 					in : Streams.Reader;
 					in : Streams.Reader;
 					VAR mi : ModuleInfo;
 					VAR mi : ModuleInfo;
@@ -3303,6 +3358,7 @@ BEGIN
 	CompilerInterface.Unregister("ReleaseTool");
 	CompilerInterface.Unregister("ReleaseTool");
 END Cleanup;
 END Cleanup;
 
 
+
 BEGIN
 BEGIN
 	CompilerInterface.Register("ReleaseTool", "Parse release description file", "Tool", ParseText);
 	CompilerInterface.Register("ReleaseTool", "Parse release description file", "Tool", ParseText);
 	Modules.InstallTermHandler(Cleanup);
 	Modules.InstallTermHandler(Cleanup);

+ 89 - 67
source/Release.Tool

@@ -51,6 +51,11 @@
 #	StaticLinker.Link --fileFormat=PE32 --fileName=A2.exe --extension=GofW --displacement=401000H --path="../obg/" Runtime Trace Kernel32 Machine Heaps Modules Objects Kernel KernelLog Streams Commands FIles WinFS Clock Dates Reals Strings Diagnostics BitSets StringPool ObjectFile GenericLinker Reflection  GenericLoader  BootConsole ~
 #	StaticLinker.Link --fileFormat=PE32 --fileName=A2.exe --extension=GofW --displacement=401000H --path="../obg/" Runtime Trace Kernel32 Machine Heaps Modules Objects Kernel KernelLog Streams Commands FIles WinFS Clock Dates Reals Strings Diagnostics BitSets StringPool ObjectFile GenericLinker Reflection  GenericLoader  BootConsole ~
 #  Do not forget to add the object file path to the path and to add ObjectFileExtension= ".ObfW" to your .ini file in order to configure the loader.
 #  Do not forget to add the object file path to the path and to add ObjectFileExtension= ".ObfW" to your .ini file in order to configure the loader.
 # 
 # 
+#
+# LinuxAOS Generic
+#	Release.Build Linux32G ~
+# 	StaticLinker.Link -p=Linux32G Runtime Trace Glue Unix Machine Heaps Modules Objects Kernel KernelLog  Streams Commands StdIO TrapWriters Traps Files UnixFiles Clock Dates Reals Strings Diagnostics BitSets StringPool ObjectFile GenericLinker Reflection  GenericLoader  Pipes Shell StdIOShell ~
+#
 # WINAOS Cooperative
 # WINAOS Cooperative
 #	Release.Build  --path="./" WinAosCooperative ~
 #	Release.Build  --path="./" WinAosCooperative ~
 #	StaticLinker.Link --fileFormat=PE32 --fileName=a2.exe --extension=GofCW --displacement=401000H --path="./" Trace CPU Runtime Counters Kernel32 Processors Queues BaseTypes Timer Activities ExclusiveBlocks Environment Mutexes Interrupts Machine Heaps Modules GarbageCollector Objects Kernel KernelLog Streams Commands FIles WinFS Clock Dates Reals Strings Diagnostics BitSets StringPool ObjectFile GenericLinker Reflection GenericLoader BootConsole ~
 #	StaticLinker.Link --fileFormat=PE32 --fileName=a2.exe --extension=GofCW --displacement=401000H --path="./" Trace CPU Runtime Counters Kernel32 Processors Queues BaseTypes Timer Activities ExclusiveBlocks Environment Mutexes Interrupts Machine Heaps Modules GarbageCollector Objects Kernel KernelLog Streams Commands FIles WinFS Clock Dates Reals Strings Diagnostics BitSets StringPool ObjectFile GenericLinker Reflection GenericLoader BootConsole ~
@@ -257,19 +262,39 @@ BUILDS
 		EXCLUDEPACKAGES "OberonVoyager OberonAnts"
 		EXCLUDEPACKAGES "OberonVoyager OberonAnts"
 		DISABLED "FALSE"
 		DISABLED "FALSE"
 	}
 	}
-#
-#	exceeds max. releases !
-#	LinuxAos64 {
-#		INCLUDE "UNIX UNIX64 LINUX64 UNCOOP"
-#		COMPILER "Compiler.Compile"
-#		COMPILEOPTIONS "--bits=64"
-#		TARGET "AMD"
-#		EXTENSION "Obz"
-#		SYMBOLEXTENSION "Obz"
-#		PATH "NewAos/"
-#		EXCLUDEPACKAGES "OberonVoyager OberonAnts"
-#		DISABLED "FALSE"
-#	}
+	Linux32G {
+		INCLUDE "UNIXG LINUXG UNIX32 UNCOOP"
+		COMPILER "Compiler.Compile"
+		COMPILEOPTIONS "-p=Linux32G"
+		TARGET "AMD"
+		EXTENSION "GofU"
+		SYMBOLEXTENSION "SymU"
+		PATH "."
+		EXCLUDEPACKAGES "OberonVoyager OberonAnts"
+		DISABLED "FALSE"
+	}		
+	LinuxAos64 {
+		INCLUDE "UNIX UNIX64 LINUX64 UNCOOP"
+		COMPILER "Compiler.Compile"
+		COMPILEOPTIONS "--bits=64"
+		TARGET "AMD"
+		EXTENSION "Obz"
+		SYMBOLEXTENSION "Obz"
+		PATH "NewAos/"
+		EXCLUDEPACKAGES "OberonVoyager OberonAnts"
+		DISABLED "FALSE"
+	}
+	DarwinAos64 {
+		INCLUDE "UNIX UNIX64 DARWIN64 UNCOOP"
+		COMPILER "Compiler.Compile"
+		COMPILEOPTIONS "--bits=64 --darwinHost"
+		TARGET "AMD"
+		EXTENSION "Obz"
+		SYMBOLEXTENSION "Obz"
+		PATH "NewAos/"
+		EXCLUDEPACKAGES "OberonVoyager OberonAnts"
+		DISABLED "FALSE"
+	}
 	DarwinAos {
 	DarwinAos {
 		INCLUDE "UNIX UNIX32 DARWIN UNCOOP"
 		INCLUDE "UNIX UNIX32 DARWIN UNCOOP"
 		COMPILER "Compiler.Compile"
 		COMPILER "Compiler.Compile"
@@ -281,19 +306,6 @@ BUILDS
 		EXCLUDEPACKAGES "OberonVoyager OberonAnts"
 		EXCLUDEPACKAGES "OberonVoyager OberonAnts"
 		DISABLED "FALSE"
 		DISABLED "FALSE"
 	}
 	}
-#
-#	exceeds max. releases !
-#	DarwinAos64 {
-#		INCLUDE "UNIX UNIX64 DARWIN64 UNCOOP"
-#		COMPILER "Compiler.Compile"
-#		COMPILEOPTIONS "--bits=64 --darwinHost"
-#		TARGET "AMD"
-#		EXTENSION "Obz"
-#		SYMBOLEXTENSION "Obz"
-#		PATH "NewAos/"
-#		EXCLUDEPACKAGES "OberonVoyager OberonAnts"
-#		DISABLED "FALSE"
-#	}
 	SolarisAos {
 	SolarisAos {
 		INCLUDE "UNIX UNIX32 SOLARIS UNCOOP"
 		INCLUDE "UNIX UNIX32 SOLARIS UNCOOP"
 		COMPILER "Compiler.Compile"
 		COMPILER "Compiler.Compile"
@@ -350,13 +362,15 @@ PACKAGE Kernel ARCHIVE "Kernel.zip" SOURCE "KernelSrc.zip" DESCRIPTION "A2 Kerne
 	ZYNQCOOP { HeapManager.Mod Zynq.Environment.Mod }
 	ZYNQCOOP { HeapManager.Mod Zynq.Environment.Mod }
 	WINCOOP { Win32.Environment.Mod }
 	WINCOOP { Win32.Environment.Mod }
 
 
+	LINUXG { Generic.Linux.I386.Glue.Mod Generic.Linux.I386.Unix.Mod }
+	UNIXG { Generic.Unix.I386.Machine.Mod }
 	UNIX { Unix.Glue.Mod }
 	UNIX { Unix.Glue.Mod }
 	DARWIN { Darwin.I386.Unix.Mod }  
 	DARWIN { Darwin.I386.Unix.Mod }  
-#	DARWIN64 { Darwin.AMD64.Unix.Mod } 
+	DARWIN64 { Darwin.AMD64.Unix.Mod } 
 	LINUX { Linux.I386.Unix.Mod }
 	LINUX { Linux.I386.Unix.Mod }
-#	LINUX64 { Linux.AMD64.Unix.Mod } 
-	SOLARIS { Solaris.I386.Unix.Mod }
+	LINUX64 { Linux.AMD64.Unix.Mod } 
 	SOLARIS64 { Solaris.AMD64.Unix.Mod } 
 	SOLARIS64 { Solaris.AMD64.Unix.Mod } 
+	SOLARIS{ Solaris.I386.Unix.Mod }
 	
 	
 
 
 	WINORIG { Win32.Kernel32.Mod}
 	WINORIG { Win32.Kernel32.Mod}
@@ -371,19 +385,23 @@ PACKAGE Kernel ARCHIVE "Kernel.zip" SOURCE "KernelSrc.zip" DESCRIPTION "A2 Kerne
 	RPICOOP, ZYNQCOOP { Coop.ARM.Machine.Mod }
 	RPICOOP, ZYNQCOOP { Coop.ARM.Machine.Mod }
 
 
 	UNIX32 { Unix.I386.Machine.Mod }
 	UNIX32 { Unix.I386.Machine.Mod }
+
+
+	SOLARIS64 { Solaris.AMD64.Unix.Mod } 
 	UNIX64 { Unix.AMD64.Machine.Mod }
 	UNIX64 { Unix.AMD64.Machine.Mod }
 
 
-	NATIVEORIG, NATIVEGEN, WINORIG, WINGEN { Heaps.Mod }
+	NATIVEORIG, NATIVEGEN, WINORIG, WINGEN, UNIXG { Heaps.Mod }
 	UNIX { Unix.Heaps.Mod }
 	UNIX { Unix.Heaps.Mod }
 	COOP { Coop.Heaps.Mod }
 	COOP { Coop.Heaps.Mod }
 
 
 	NATIVEORIG, WINORIG, UNIX { Modules.Mod }
 	NATIVEORIG, WINORIG, UNIX { Modules.Mod }
-	NATIVEGEN, WINGEN { Generic.Modules.Mod}
+	NATIVEGEN, WINGEN, UNIXG { Generic.Modules.Mod}
 	COOP { Coop.Modules.Mod GarbageCollector.Mod }
 	COOP { Coop.Modules.Mod GarbageCollector.Mod }
 
 
 	NATIVEORIG, NATIVEGEN { Objects.Mod Kernel.Mod }
 	NATIVEORIG, NATIVEGEN { Objects.Mod Kernel.Mod }
 	WINORIG, WINGEN { Win32.Objects.Mod Win32.Kernel.Mod }
 	WINORIG, WINGEN { Win32.Objects.Mod Win32.Kernel.Mod }
 	UNIX { Unix.Objects.Mod Unix.Kernel.Mod }
 	UNIX { Unix.Objects.Mod Unix.Kernel.Mod }
+	UNIXG { Generic.Unix.Objects.Mod Unix.Kernel.Mod }
 	COOP { Coop.Objects.Mod Coop.Kernel.Mod }
 	COOP { Coop.Objects.Mod Coop.Kernel.Mod }
 END
 END
 
 
@@ -403,7 +421,7 @@ PACKAGE System ARCHIVE "System.zip" SOURCE "SystemSrc.zip" DESCRIPTION "System"
 
 
 	# default trap handling
 	# default trap handling
 	NATIVEORIG,WINORIG,UNIX { Reflection.Mod }
 	NATIVEORIG,WINORIG,UNIX { Reflection.Mod }
-	NATIVEGEN, WINGEN {Generic.Reflection.Mod}
+	NATIVEGEN, WINGEN, UNIXG {Generic.Reflection.Mod}
 	COOP { Coop.Reflection.Mod }
 	COOP { Coop.Reflection.Mod }
 	TrapWriters.Mod CRC.Mod SystemVersion.Mod
 	TrapWriters.Mod CRC.Mod SystemVersion.Mod
 	NATIVEORIG, NATIVEGEN { Traps.Mod }
 	NATIVEORIG, NATIVEGEN { Traps.Mod }
@@ -411,7 +429,9 @@ PACKAGE System ARCHIVE "System.zip" SOURCE "SystemSrc.zip" DESCRIPTION "System"
 	ARM { ARM.Traps.Mod }
 	ARM { ARM.Traps.Mod }
 	WINORIG, WINGEN {  Win32.Traps.Mod }
 	WINORIG, WINGEN {  Win32.Traps.Mod }
 	UNIX { Unix.StdIO.Mod Unix.Traps.Mod }
 	UNIX { Unix.StdIO.Mod Unix.Traps.Mod }
+	UNIXG { Unix.StdIO.Mod Generic.Unix.Traps.Mod }
 	COOP { Coop.Traps.Mod }
 	COOP { Coop.Traps.Mod }
+	WINGEN {Win32.WinTrace.Mod Win32.StdIO.Mod } 
 
 
 	# Recursive and R/W locks
 	# Recursive and R/W locks
 	Locks.Mod
 	Locks.Mod
@@ -423,7 +443,7 @@ PACKAGE System ARCHIVE "System.zip" SOURCE "SystemSrc.zip" DESCRIPTION "System"
 	# Realtime clock driver
 	# Realtime clock driver
 	NATIVE { Clock.Mod }
 	NATIVE { Clock.Mod }
 	WIN { Win32.Clock.Mod }
 	WIN { Win32.Clock.Mod }
-	UNIX { Unix.Clock.Mod }
+	UNIX, UNIXG { Unix.Clock.Mod }
 
 
 	# Memory cache control
 	# Memory cache control
 	I386ORIG, I386GEN { I386.MemCache.Mod }
 	I386ORIG, I386GEN { I386.MemCache.Mod }
@@ -446,6 +466,7 @@ PACKAGE System ARCHIVE "System.zip" SOURCE "SystemSrc.zip" DESCRIPTION "System"
 	ISO9660Volumes.Mod ISO9660Files.Mod
 	ISO9660Volumes.Mod ISO9660Files.Mod
 
 
 	UNIX { Unix.UnixFiles.Mod }
 	UNIX { Unix.UnixFiles.Mod }
+	UNIXG { Generic.Unix.UnixFiles.Mod } 
 
 
 	WIN {
 	WIN {
 		Win32.User32.Mod Win32.WinTrace.Mod Win32.ODBC.Mod Win32.Shell32.Mod Win32.SQL.Mod
 		Win32.User32.Mod Win32.WinTrace.Mod Win32.ODBC.Mod Win32.Shell32.Mod Win32.SQL.Mod
@@ -461,6 +482,8 @@ PACKAGE System ARCHIVE "System.zip" SOURCE "SystemSrc.zip" DESCRIPTION "System"
 	NATIVE,WIN { BootConsole.Mod }
 	NATIVE,WIN { BootConsole.Mod }
 	UNIX { Unix.BootConsole.Mod }
 	UNIX { Unix.BootConsole.Mod }
 
 
+	UNIXG, WIN32G { Shell.Mod StdIOShell.Mod }
+
 	Displays.Mod
 	Displays.Mod
 
 
 	 # input drivers
 	 # input drivers
@@ -510,7 +533,7 @@ PACKAGE System ARCHIVE "System.zip" SOURCE "SystemSrc.zip" DESCRIPTION "System"
 		Ping.Mod TraceRoute.Mod TCPPortLog.Mod	 	# network tools
 		Ping.Mod TraceRoute.Mod TCPPortLog.Mod	 	# network tools
 	}
 	}
 
 
-	UNIX {
+	UNIX, UNIXG {
 		Unix.IP.Mod
 		Unix.IP.Mod
 		Unix.Sockets.Mod
 		Unix.Sockets.Mod
 		Unix.TCP.Mod Unix.UDP.Mod Unix.DNS.Mod
 		Unix.TCP.Mod Unix.UDP.Mod Unix.DNS.Mod
@@ -539,14 +562,14 @@ PACKAGE Drivers ARCHIVE "Drivers.zip" SOURCE "DriversSrc.zip" DESCRIPTION "Devic
 	# Serial port drivers (implement Serials interface)
 	# Serial port drivers (implement Serials interface)
 	NATIVE { V24.Mod }
 	NATIVE { V24.Mod }
 	WIN { Win32.V24.Mod }
 	WIN { Win32.V24.Mod }
-	UNIX { Unix.V24.Mod }
+	UNIX, UNIXG { Unix.V24.Mod }
 
 
 	# PC speaker driver
 	# PC speaker driver
 	NATIVE { Beep.Mod }
 	NATIVE { Beep.Mod }
 	WIN { Win32.Beep.Mod }
 	WIN { Win32.Beep.Mod }
 
 
 	# Pseudo sound driver for UnixAos
 	# Pseudo sound driver for UnixAos
-	UNIX { Unix.OpenAL.Mod  OpenALSound.Mod }
+	UNIX, UNIXG { Unix.OpenAL.Mod  OpenALSound.Mod }
 
 
 	WIN { Win32.WinDisks.Mod } # direct windows disk access, implements Disks interface
 	WIN { Win32.WinDisks.Mod } # direct windows disk access, implements Disks interface
 
 
@@ -677,7 +700,7 @@ PACKAGE ApplicationsMini ARCHIVE "ApplicationsMini.zip" SOURCE "ApplicationsMini
 	Errors.Mod errors.txt
 	Errors.Mod errors.txt
 
 
 	# Access to system functions
 	# Access to system functions
-	UNIX { Unix.ProcessInfo0.Mod }
+	UNIX, UNIXG { Unix.ProcessInfo0.Mod }
 	NATIVE, WIN { ProcessInfo0.Mod }
 	NATIVE, WIN { ProcessInfo0.Mod }
 	ProcessInfo.Mod
 	ProcessInfo.Mod
 
 
@@ -858,7 +881,7 @@ PACKAGE Applications ARCHIVE "Applications.zip" SOURCE "ApplicationsSrc.zip" DES
 	TCPTools.Mod						# Some useful TCP-related commands
 	TCPTools.Mod						# Some useful TCP-related commands
 
 
 	NATIVEORIG { Performance.Mod }
 	NATIVEORIG { Performance.Mod }
-	WIN, UNIX, NATIVECOOP { Win32.Performance.Mod } # This is just a dummy
+	WIN, UNIX, UNIXG, NATIVECOOP { Win32.Performance.Mod } # This is just a dummy
 
 
 	Bin2Hex.Mod BinToCode.Mod
 	Bin2Hex.Mod BinToCode.Mod
 
 
@@ -954,7 +977,7 @@ PACKAGE GuiApplicationsMini ARCHIVE "GuiApplicationsMini.zip" SOURCE "GuiApplica
 	cjkfont.bfnt # since used as fallback
 	cjkfont.bfnt # since used as fallback
 
 
 	WindowManager.Mod
 	WindowManager.Mod
-	UNIX { Unix.X11.Mod Unix.X11Api.Mod Unix.XDisplay.Mod Unix.Beep.Mod Unix.KbdMouse.Mod Unix.Clipboard.Mod }
+	UNIX, UNIXG { Unix.X11.Mod Unix.X11Api.Mod Unix.XDisplay.Mod Unix.Beep.Mod Unix.KbdMouse.Mod Unix.Clipboard.Mod }
 
 
 
 
 	# Icons representing applications (don't put icons used by applications inside!)
 	# Icons representing applications (don't put icons used by applications inside!)
@@ -1091,7 +1114,7 @@ PACKAGE GuiApplicationsMini ARCHIVE "GuiApplicationsMini.zip" SOURCE "GuiApplica
 		WMPerfMonPluginUsb.Mod WMPerfMonPluginNetStats.Mod
 		WMPerfMonPluginUsb.Mod WMPerfMonPluginNetStats.Mod
 	}
 	}
 	WIN { Win32.WMPerfMonPluginCpu.Mod Win32.WMPerfMonPluginMemory.Mod }
 	WIN { Win32.WMPerfMonPluginCpu.Mod Win32.WMPerfMonPluginMemory.Mod }
-	UNIX { Unix.WMPerfMonPluginCpu.Mod Unix.WMPerfMonPluginMemory.Mod }
+	UNIX, UNIXG { Unix.WMPerfMonPluginCpu.Mod Unix.WMPerfMonPluginMemory.Mod }
 
 
 	NATIVE,WIN {
 	NATIVE,WIN {
 		WMPerfMonPluginModVars.Mod WMPerfMonPluginHeap.Mod
 		WMPerfMonPluginModVars.Mod WMPerfMonPluginHeap.Mod
@@ -1517,11 +1540,11 @@ END
 
 
 PACKAGE Oberon ARCHIVE "Oberon.zip" SOURCE "OberonSrc.zip"  DESCRIPTION "Oberon for A2"
 PACKAGE Oberon ARCHIVE "Oberon.zip" SOURCE "OberonSrc.zip"  DESCRIPTION "Oberon for A2"
 	# emulation modules
 	# emulation modules
-	NATIVE,UNIX { Oberon.Kernel.Mod }
+	NATIVE,UNIX, UNIXG { Oberon.Kernel.Mod }
 	NATIVE,WIN { Oberon.Types.Mod }
 	NATIVE,WIN { Oberon.Types.Mod }
 	WIN { Win32.Oberon.Kernel.Mod }
 	WIN { Win32.Oberon.Kernel.Mod }
 	Oberon.Modules.Mod
 	Oberon.Modules.Mod
-	NATIVE,UNIX { Oberon.FileDir.Mod Oberon.Files.Mod }
+	NATIVE,UNIX, UNIXG { Oberon.FileDir.Mod Oberon.Files.Mod }
 	WIN { Win32.Oberon.FileDir.Mod Win32.Oberon.Files.Mod }
 	WIN { Win32.Oberon.FileDir.Mod Win32.Oberon.Files.Mod }
 
 
 	Oberon.Disks.Mod
 	Oberon.Disks.Mod
@@ -1529,9 +1552,8 @@ PACKAGE Oberon ARCHIVE "Oberon.zip" SOURCE "OberonSrc.zip"  DESCRIPTION "Oberon
 	Oberon.Objects.Mod
 	Oberon.Objects.Mod
 	OberonInput.Mod 	# WM-less Oberon I/O
 	OberonInput.Mod 	# WM-less Oberon I/O
 
 
-	NATIVE,iWIN, UNIX { OberonDisplay.Mod }
-	NATIVE,iWIN, UNIX { Oberon.Display.Mod }
-	NATIVE,iWIN, UNIX {
+	NATIVE,iWIN, UNIX, UNIXG { 
+		OberonDisplay.Mod Oberon.Display.Mod Oberon.Display.Mod
 		Oberon.Input.Mod 	# WM-based Display & Input
 		Oberon.Input.Mod 	# WM-based Display & Input
 		Oberon.Viewers.Mod Oberon.Fonts.Mod
 		Oberon.Viewers.Mod Oberon.Fonts.Mod
 	}
 	}
@@ -1549,24 +1571,24 @@ PACKAGE Oberon ARCHIVE "Oberon.zip" SOURCE "OberonSrc.zip"  DESCRIPTION "Oberon
 
 
 	WIN { Win32.OberonConfiguration.Mod }
 	WIN { Win32.OberonConfiguration.Mod }
 
 
-	NATIVE,iWIN,UNIX  { Oberon.Oberon.Mod }
+	NATIVE,iWIN,UNIX, UNIXG  { Oberon.Oberon.Mod }
 	eWIN { Win32.Oberon.WinFonts.Mod Win32.Oberon.Oberon.Mod }
 	eWIN { Win32.Oberon.WinFonts.Mod Win32.Oberon.Oberon.Mod }
 
 
 	Oberon.MenuViewers.Mod Oberon.TextFrames.Mod
 	Oberon.MenuViewers.Mod Oberon.TextFrames.Mod
 
 
-	NATIVE,iWIN,UNIX  { Oberon.System.Mod }
+	NATIVE,iWIN,UNIX, UNIXG  { Oberon.System.Mod }
 
 
 	Oberon.In.Mod Oberon.Out.Mod Oberon.Dates.Mod Oberon.Strings.Mod 	# Utility modules
 	Oberon.In.Mod Oberon.Out.Mod Oberon.Dates.Mod Oberon.Strings.Mod 	# Utility modules
 
 
 	NATIVE, iWIN { Oberon.Centronics.Mod }
 	NATIVE, iWIN { Oberon.Centronics.Mod }
 
 
-	NATIVE,iWIN,UNIX { I386.Oberon.Bitmaps.Mod Oberon.Pictures.Mod }
+	NATIVE,iWIN,UNIX, UNIXG { I386.Oberon.Bitmaps.Mod Oberon.Pictures.Mod }
 
 
 	Oberon.RandomNumbers.Mod
 	Oberon.RandomNumbers.Mod
 
 
 	Oberon.V24.Mod
 	Oberon.V24.Mod
 	NATIVE { Oberon.Printer.Mod }
 	NATIVE { Oberon.Printer.Mod }
-	UNIX { Unix.Oberon.Printer.Mod }
+	UNIX, UNIXG{ Unix.Oberon.Printer.Mod }
 	eWIN  { Win32.Oberon.Bitmaps.Mod Win32.Oberon.Pictures.Mod }
 	eWIN  { Win32.Oberon.Bitmaps.Mod Win32.Oberon.Pictures.Mod }
 	WIN { Win32.Oberon.Printer.Mod Win32.ADVAPI32.Mod }
 	WIN { Win32.Oberon.Printer.Mod Win32.ADVAPI32.Mod }
 	eWIN { Win32.Oberon.System.Mod Win32.OberonDisplay.Mod }
 	eWIN { Win32.Oberon.System.Mod Win32.OberonDisplay.Mod }
@@ -1591,9 +1613,9 @@ PACKAGE Oberon ARCHIVE "Oberon.zip" SOURCE "OberonSrc.zip"  DESCRIPTION "Oberon
  	DOS.Tool Oberon.FATFiles.Mod Oberon.DOS.Mod	# DOS
  	DOS.Tool Oberon.FATFiles.Mod Oberon.DOS.Mod	# DOS
 	Oberon.Hello.Mod	# Demo program (UserGuide.Text)
 	Oberon.Hello.Mod	# Demo program (UserGuide.Text)
 
 
-	NATIVE,UNIX { Oberon.PSPrinter.Mod PSHeader.Text Oberon.HPLaserPrinter.Mod Oberon.HPPCL.Mod }	# Printer drivers
+	NATIVE,UNIX, UNIXG { Oberon.PSPrinter.Mod PSHeader.Text Oberon.HPLaserPrinter.Mod Oberon.HPPCL.Mod }	# Printer drivers
 	WIN { Win32.Oberon.PSPrinter.Mod }
 	WIN { Win32.Oberon.PSPrinter.Mod }
-	UNIX { Unix.Oberon.UnixPrinter.Mod }
+	UNIX, UNIXG { Unix.Oberon.UnixPrinter.Mod }
 
 
 	Default.Pal Light.Pal Dark.Pal White.Pal Black.Pal	# Palettes
 	Default.Pal Light.Pal Dark.Pal White.Pal Black.Pal	# Palettes
 
 
@@ -1614,7 +1636,7 @@ PACKAGE Oberon ARCHIVE "Oberon.zip" SOURCE "OberonSrc.zip"  DESCRIPTION "Oberon
 
 
 	NATIVE { Oberon.NetSystem.Mod }
 	NATIVE { Oberon.NetSystem.Mod }
 	WIN { Win32.Oberon.NetSystem.Mod }
 	WIN { Win32.Oberon.NetSystem.Mod }
-	UNIX { Unix.Oberon.NetSystem.Mod }
+	UNIX, UNIXG { Unix.Oberon.NetSystem.Mod }
 
 
 	Oberon.HelloServer.Mod
 	Oberon.HelloServer.Mod
 
 
@@ -1656,7 +1678,7 @@ PACKAGE OberonGadgets ARCHIVE "OberonGadgets.zip" SOURCE "OberonGadgetsSrc.zip"
 
 
 	Colors.Tool
 	Colors.Tool
 
 
-	NATIVE,iWIN,UNIX {
+	NATIVE,iWIN,UNIX, UNIXG {
 		Oberon.Colors.Mod 	# Color models
 		Oberon.Colors.Mod 	# Color models
 		Oberon.Display3.Mod Oberon.Effects.Mod
 		Oberon.Display3.Mod Oberon.Effects.Mod
 	}
 	}
@@ -1668,7 +1690,7 @@ PACKAGE OberonGadgets ARCHIVE "OberonGadgets.zip" SOURCE "OberonGadgetsSrc.zip"
 
 
 	Oberon.Printer3.Mod Oberon.Attributes.Mod Oberon.Links.Mod
 	Oberon.Printer3.Mod Oberon.Attributes.Mod Oberon.Links.Mod
 
 
-	NATIVE,iWIN,UNIX { Oberon.Gadgets.Mod }
+	NATIVE,iWIN,UNIX, UNIXG { Oberon.Gadgets.Mod }
 	eWIN { Win32.Oberon.Gadgets.Mod }
 	eWIN { Win32.Oberon.Gadgets.Mod }
 
 
 	WIN { Win32.Oberon.PrinterInfo.Mod }
 	WIN { Win32.Oberon.PrinterInfo.Mod }
@@ -1681,14 +1703,14 @@ PACKAGE OberonGadgets ARCHIVE "OberonGadgets.zip" SOURCE "OberonGadgetsSrc.zip"
 
 
 
 
 	NATIVE,WIN { Oberon.TextGadgets0.Mod Oberon.TextGadgets.Mod }
 	NATIVE,WIN { Oberon.TextGadgets0.Mod Oberon.TextGadgets.Mod }
-	UNIX { Unix.Oberon.TextGadgets0.Mod Unix.Oberon.TextGadgets.Mod }
+	UNIX, UNIXG { Unix.Oberon.TextGadgets0.Mod Unix.Oberon.TextGadgets.Mod }
 
 
 	Oberon.BasicFigures.Mod
 	Oberon.BasicFigures.Mod
 
 
 	NATIVE,WIN { Oberon.Scrollbars.Mod }
 	NATIVE,WIN { Oberon.Scrollbars.Mod }
-	UNIX { Unix.Oberon.Scrollbars.Mod Unix.Oberon.TextSBControl.Mod }
+	UNIX, UNIXG { Unix.Oberon.Scrollbars.Mod Unix.Oberon.TextSBControl.Mod }
 
 
-	NATIVE,UNIX { Oberon.Directories.Mod }
+	NATIVE,UNIX, UNIXG { Oberon.Directories.Mod }
 	WIN { Win32.Oberon.Directories.Mod }
 	WIN { Win32.Oberon.Directories.Mod }
 
 
 	Oberon.Clocks.Mod Oberon.Organizers.Mod
 	Oberon.Clocks.Mod Oberon.Organizers.Mod
@@ -1696,16 +1718,16 @@ PACKAGE OberonGadgets ARCHIVE "OberonGadgets.zip" SOURCE "OberonGadgetsSrc.zip"
 	Oberon.ProgressMeters.Mod Oberon.Sisiphus.Mod Sisyphus.Data
 	Oberon.ProgressMeters.Mod Oberon.Sisiphus.Mod Sisyphus.Data
 	Oberon.Documents.Mod Oberon.Views.Mod
 	Oberon.Documents.Mod Oberon.Views.Mod
 
 
-	NATIVE,iWIN,UNIX { Oberon.Desktops.Mod }
+	NATIVE,iWIN,UNIX, UNIXG { Oberon.Desktops.Mod }
 	eWIN { Win32.Oberon.Desktops.Mod }
 	eWIN { Win32.Oberon.Desktops.Mod }
 
 
 	NATIVE,WIN { Oberon.TextDocs.Mod }
 	NATIVE,WIN { Oberon.TextDocs.Mod }
-	UNIX { Unix.Oberon.TextDocs.Mod }
+	UNIX, UNIXG { Unix.Oberon.TextDocs.Mod }
 
 
 	TextDocs.Lib Oberon.PanelDocs.Mod 	# Document catalog
 	TextDocs.Lib Oberon.PanelDocs.Mod 	# Document catalog
 	Oberon.Icons.Mod Oberon.ColorTools.Mod Oberon.NamePlates.Mod Oberon.Navigators.Mod Oberon.NoteBooks.Mod
 	Oberon.Icons.Mod Oberon.ColorTools.Mod Oberon.NamePlates.Mod Oberon.Navigators.Mod Oberon.NoteBooks.Mod
 
 
-	NATIVE,iWIN,UNIX { Oberon.Finder.Mod }
+	NATIVE,iWIN,UNIX, UNIXG { Oberon.Finder.Mod }
 	eWIN { Win32.Oberon.Finder.Mod }
 	eWIN { Win32.Oberon.Finder.Mod }
 
 
 	Oberon.GadgetsIn.Mod Oberon.GadgetsOut.Mod
 	Oberon.GadgetsIn.Mod Oberon.GadgetsOut.Mod
@@ -1726,7 +1748,7 @@ PACKAGE OberonGadgets ARCHIVE "OberonGadgets.zip" SOURCE "OberonGadgetsSrc.zip"
 	Oberon.StyleGadgets.Mod Oberon.ScriptGadgets.Mod
 	Oberon.StyleGadgets.Mod Oberon.ScriptGadgets.Mod
 	Rembrandt.Panel Oberon.Rembrandt0.Mod
 	Rembrandt.Panel Oberon.Rembrandt0.Mod
 
 
-	NATIVE,iWIN,UNIX { Oberon.Rembrandt.Mod }
+	NATIVE,iWIN,UNIX, UNIXG { Oberon.Rembrandt.Mod }
 	eWIN { Win32.Oberon.Rembrandt.Mod }
 	eWIN { Win32.Oberon.Rembrandt.Mod }
 
 
 	Oberon.RembrandtDocs.Mod 	# Rembrandt in Popups.Tool
 	Oberon.RembrandtDocs.Mod 	# Rembrandt in Popups.Tool
@@ -1740,15 +1762,15 @@ PACKAGE OberonGadgets ARCHIVE "OberonGadgets.zip" SOURCE "OberonGadgetsSrc.zip"
 	iWIN { Win32.Oberon.Clipboard.Mod }
 	iWIN { Win32.Oberon.Clipboard.Mod }
 	eWIN { Win32.External.Oberon.Clipboard.Mod Win32.Oberon.RegistryTools.Mod }
 	eWIN { Win32.External.Oberon.Clipboard.Mod Win32.Oberon.RegistryTools.Mod }
 	WIN { Win32.Oberon.FontRes.Mod FontRes.Tool }
 	WIN { Win32.Oberon.FontRes.Mod FontRes.Tool }
-	UNIX { Unix.Oberon.Clipboard.Mod }
-	WIN,UNIX { Clipboard.Tool }
+	UNIX, UNIXG{ Unix.Oberon.Clipboard.Mod }
+	WIN,UNIX, UNIXG { Clipboard.Tool }
 
 
 	Oberon.JPEG.Mod Oberon.GIF.Mod Oberon.XBM.Mod Oberon.BMP.Mod Oberon.ICO.Mod Oberon.PCX.Mod Oberon.TGA.Mod Oberon.IFF.Mod 	# Picture converters
 	Oberon.JPEG.Mod Oberon.GIF.Mod Oberon.XBM.Mod Oberon.BMP.Mod Oberon.ICO.Mod Oberon.PCX.Mod Oberon.TGA.Mod Oberon.IFF.Mod 	# Picture converters
 	Oberon.ColorModels.Mod Oberon.XPM.Mod Oberon.PPM.Mod Oberon.PSD.Mod
 	Oberon.ColorModels.Mod Oberon.XPM.Mod Oberon.PPM.Mod Oberon.PSD.Mod
 
 
 	Images.Tool Oberon.Images.Mod
 	Images.Tool Oberon.Images.Mod
 
 
-	NATIVE,iWIN,UNIX { Oberon.ImageGadgets.Mod }
+	NATIVE,iWIN,UNIX, UNIXG { Oberon.ImageGadgets.Mod }
 	eWIN { Win32.Oberon.WinImages.Mod Win32.Oberon.ImageGadgets.Mod }
 	eWIN { Win32.Oberon.WinImages.Mod Win32.Oberon.ImageGadgets.Mod }
 
 
 	Oberon.ImageDocs.Mod 	# Images
 	Oberon.ImageDocs.Mod 	# Images
@@ -1756,7 +1778,7 @@ PACKAGE OberonGadgets ARCHIVE "OberonGadgets.zip" SOURCE "OberonGadgetsSrc.zip"
 	Oberon.PictImages.Mod Oberon.BMPImages.Mod Oberon.JPEGImages.Mod Oberon.GIFImages.Mod Oberon.PSDImages.Mod
 	Oberon.PictImages.Mod Oberon.BMPImages.Mod Oberon.JPEGImages.Mod Oberon.GIFImages.Mod Oberon.PSDImages.Mod
 	Colors.Panel
 	Colors.Panel
 
 
-	NATIVE, iWIN,UNIX { Oberon.ColorGadgets.Mod }
+	NATIVE, iWIN,UNIX, UNIXG { Oberon.ColorGadgets.Mod }
 	eWIN { Win32.Oberon.ColorGadgets.Mod }
 	eWIN { Win32.Oberon.ColorGadgets.Mod }
 
 
 	Oberon.PCXImages.Mod	# Color views
 	Oberon.PCXImages.Mod	# Color views
@@ -1950,7 +1972,7 @@ PACKAGE OberonVoyager ARCHIVE "OberonVoyager.zip" SOURCE "OberonVoyagerSrc.zip"
 
 
 	# Portability Module
 	# Portability Module
 	eWIN { Win32.Oberon.vyPortability.Mod }
 	eWIN { Win32.Oberon.vyPortability.Mod }
-	NATIVE, iWIN,UNIX { Oberon.vyPortability.Mod }
+	NATIVE, iWIN,UNIX, UNIXG { Oberon.vyPortability.Mod }
 	Oberon.vyHost.Mod Oberon.vyHostFonts.Mod 	# Host modules
 	Oberon.vyHost.Mod Oberon.vyHostFonts.Mod 	# Host modules
 	Oberon.vyLinks.Mod Oberon.vyHostStrings.Mod Oberon.vyHostTexts.Mod Oberon.vyBase.Mod Oberon.vyName.Mod 	# Base and Name
 	Oberon.vyLinks.Mod Oberon.vyHostStrings.Mod Oberon.vyHostTexts.Mod Oberon.vyBase.Mod Oberon.vyName.Mod 	# Base and Name
 	Oberon.vyScanners.Mod Oberon.vyParser.Mod Oberon.vyPars.Mod Oberon.vyIn.Mod Oberon.vyOut.Mod Oberon.vyFiles.Mod Oberon.vyTextsCtl.Mod 	# In and Output
 	Oberon.vyScanners.Mod Oberon.vyParser.Mod Oberon.vyPars.Mod Oberon.vyIn.Mod Oberon.vyOut.Mod Oberon.vyFiles.Mod Oberon.vyTextsCtl.Mod 	# In and Output
@@ -1982,7 +2004,7 @@ PACKAGE OberonAnts ARCHIVE "OberonAnts.zip" SOURCE "OberonAntsSrc.zip" DESCRIPTI
 	Oberon.antsS3.ScrollbarsR.Mod Oberon.antsCommandInvoker.Mod	# generic tools
 	Oberon.antsS3.ScrollbarsR.Mod Oberon.antsCommandInvoker.Mod	# generic tools
 
 
 	eWIN { Win32.Oberon.antsPortability.Mod }
 	eWIN { Win32.Oberon.antsPortability.Mod }
-	NATIVE,iWIN,UNIX { Oberon.antsPortability.Mod }	# Portability
+	NATIVE,iWIN,UNIX,UNIXG { Oberon.antsPortability.Mod }	# Portability
 
 
 	NATIVE,WIN {
 	NATIVE,WIN {
 		Oberon.antsExpressionsObjects.Mod Oberon.antsExpressions.Mod Oberon.antsExpressionsDefaults.Mod 	# command prompt interpreter
 		Oberon.antsExpressionsObjects.Mod Oberon.antsExpressions.Mod Oberon.antsExpressionsDefaults.Mod 	# command prompt interpreter