ソースを参照

Files64.Tool for experiments

git-svn-id: https://svn.inf.ethz.ch/svn/lecturers/a2/trunk@7610 8c9fc860-2736-0410-a75d-ab315db34111
eth.metacore 7 年 前
コミット
79c39b2113
2 ファイル変更145 行追加139 行削除
  1. 6 0
      source/Files64.Tool
  2. 139 139
      source/RelativeFiles64.Mod

+ 6 - 0
source/Files64.Tool

@@ -0,0 +1,6 @@
+Compiler.Compile -p=Win32G Streams64.Mod Files64.Mod Win32.WinFiles64.Mod RelativeFiles64.Mod FSTools64.Mod ~
+
+# WINAOS generic
+	StaticLinker.Link --fileFormat=PE32 --fileName=A2.exe --extension=GofW --displacement=401000H  Runtime Trace Kernel32 Machine Heaps Modules Objects Kernel KernelLog Streams Streams64 Commands Files Files64 WinFS WinFiles64 Clock Dates Reals Strings Diagnostics BitSets StringPool ObjectFile GenericLinker Reflection  GenericLoader  BootConsole ~
+# 	Command line shell:
+	StaticLinker.Link  --fileFormat=PE32CUI --fileName=oberon.exe --extension=GofW --displacement=401000H Runtime Trace Kernel32 Machine Heaps Modules Objects Kernel KernelLog Streams Streams64 Commands Files  Files64 WinFS WinFiles64 Clock Dates Reals Strings Diagnostics BitSets StringPool ObjectFile GenericLinker Reflection GenericLoader WinTrace StdIO  Traps RelativeFileSystem WMDefaultFont SystemTools StdIOShell ~

+ 139 - 139
source/RelativeFiles64.Mod

@@ -1,140 +1,140 @@
-MODULE RelativeFiles64;	(**  AUTHOR "fof"; PURPOSE "";  **)
-
-IMPORT Files := Files64,UTF8Strings;
-TYPE PathName=ARRAY 272 OF CHAR;
-
-	FileSystem = OBJECT(Files.FileSystem)
-	VAR relTo: PathName; fs: Files.FileSystem;
-
-		PROCEDURE &InitFileSystem*( relTo: ARRAY OF CHAR; fs: Files.FileSystem);
-		VAR ch: CHAR;i: LONGINT;
-		BEGIN
-			SELF.fs := fs;
-			INCL(flags,Files.NeedsPrefix);
-			i :=0; ch := 0X;
-			WHILE(relTo[i] # 0X) DO
-				ch := relTo[i];
-				INC(i);
-			END;
-			IF (ch = "/") & (i>1)  THEN relTo[i-1] := 0X END; (* remove ending "/" *)
-
-			IF fs.prefix # "" THEN
-				RemovePrefix(relTo);
-			END;
-
-			COPY(relTo,SELF.relTo);
-		END InitFileSystem;
-
-		PROCEDURE MakeRel(VAR name,new: ARRAY OF CHAR);
-		BEGIN
-			COPY(relTo,new);
-			RemovePrefix(name);
-			IF name[0] # "/" THEN  UTF8Strings.Append("/",new); END;
-			UTF8Strings.Append(name,new);
-		END MakeRel;
-
-		PROCEDURE New0 (name: ARRAY OF CHAR): Files.File;
-		VAR new: PathName;
-		BEGIN
-			MakeRel(name,new); RETURN fs.New0(new);
-		END New0;
-
-		PROCEDURE Old0 (name: ARRAY OF CHAR): Files.File;
-		VAR new: PathName;
-		BEGIN
-			(* Out.String("Old0, called with:"); Out.String(name); Out.Ln; *)
-			MakeRel(name,new);
-			(* Out.String("Old0, calling with:"); Out.String(new); Out.Ln; *)
-			RETURN fs.Old0(new);
-		END Old0;
-
-		PROCEDURE CreateDirectory0 (name: ARRAY OF CHAR;     VAR res: LONGINT);
-		VAR new: PathName;
-		BEGIN
-			MakeRel(name,new); fs.CreateDirectory0(new,res);
-		END CreateDirectory0;
-
-		PROCEDURE Delete0 (name: ARRAY OF CHAR;     VAR key, res: LONGINT);
-		VAR new: PathName;
-		BEGIN
-			MakeRel(name,new); fs.Delete0(new,key,res);
-		END Delete0;
-
-		PROCEDURE Enumerate0 (mask: ARRAY OF CHAR;     flags: SET;     enum: Files.Enumerator);
-		VAR new: PathName;
-		BEGIN
-			MakeRel(mask,new); 
-			fs.Enumerate0(new,flags,enum);
-		END Enumerate0;
-
-		PROCEDURE FileKey (name: ARRAY OF CHAR): LONGINT;
-		VAR new: PathName;
-		BEGIN
-			(*Out.String("FileKey, called with:"); Out.String(name); Out.Ln; *)
-			MakeRel(name,new);
-			(*Out.String("FileKey, calling with:"); Out.String(new); Out.Ln;*)
-			RETURN fs.FileKey(new);
-		END FileKey;
-
-		PROCEDURE RemoveDirectory0 (name: ARRAY OF CHAR;     force: BOOLEAN;     VAR key, res: LONGINT);
-		VAR new: PathName;
-		BEGIN
-			MakeRel(name,new);  fs.RemoveDirectory0(new,force,key,res);
-		END RemoveDirectory0;
-
-		PROCEDURE Rename0 (old, new: ARRAY OF CHAR;     f: Files.File;      VAR res: LONGINT);
-		VAR old1,new1: PathName;
-		BEGIN
-			MakeRel(old,old1); MakeRel(new,new1);fs.Rename0(old1,new1,f,res);
-		END Rename0;
-
-	END FileSystem;
-
-	PROCEDURE RemovePrefix(VAR name: ARRAY OF CHAR);
-	VAR i,j: LONGINT;
-	BEGIN
-		WHILE(name[i] # 0X) & (name[i] # ":") DO
-			INC(i);
-		END;
-		IF name[i] = ":" THEN
-			j := 0; INC(i);
-			WHILE(name[i] # 0X) DO
-				name[j] := name[i]; INC(i);INC(j);
-			END;
-			name[j] := 0X;
-		END;
-	END RemovePrefix;
-
-	(** NewFS - Create a new filesystem relative to a Windows path. does not protect paths higher than relTo! (xyz:/../../.. could be used) *)
-	PROCEDURE NewFS*(context : Files.Parameters);
-	VAR str,prefix,name: ARRAY 256 OF CHAR; fs: FileSystem; rel: Files.FileSystem; ft: Files.FileSystemTable;
-	BEGIN
-		IF context.arg.GetString(str) THEN
-			Files.SplitName(str,prefix,name);
-			IF prefix # "" THEN
-				rel := Files.This(prefix);
-			ELSE
-				Files.GetList(ft);
-				rel := ft[0];
-			END;
-			IF rel # NIL THEN
-				NEW(fs,str,rel);
-				Files.Add(fs, context.prefix);
-			ELSE
-				context.out.String("file system could not be found: "); context.out.String(str); context.out.Ln;
-			END;
-		END;
-	END NewFS;
-
-
-END RelativeFiles64.
-
-SystemTools.Free RelativeFiles64 ~
-
-FSTools.Mount Work RelativeFiles64  ./ ~
-FSTools.Unmount Test ~
-
-
-
-
+MODULE RelativeFiles64;	(**  AUTHOR "fof"; PURPOSE "";  **)
+
+IMPORT Files := Files64,UTF8Strings;
+TYPE PathName=ARRAY 272 OF CHAR;
+
+	FileSystem = OBJECT(Files.FileSystem)
+	VAR relTo: PathName; fs: Files.FileSystem;
+
+		PROCEDURE &InitFileSystem*( relTo: ARRAY OF CHAR; fs: Files.FileSystem);
+		VAR ch: CHAR;i: LONGINT;
+		BEGIN
+			SELF.fs := fs;
+			INCL(flags,Files.NeedsPrefix);
+			i :=0; ch := 0X;
+			WHILE(relTo[i] # 0X) DO
+				ch := relTo[i];
+				INC(i);
+			END;
+			IF (ch = "/") & (i>1)  THEN relTo[i-1] := 0X END; (* remove ending "/" *)
+
+			IF fs.prefix # "" THEN
+				RemovePrefix(relTo);
+			END;
+
+			COPY(relTo,SELF.relTo);
+		END InitFileSystem;
+
+		PROCEDURE MakeRel(VAR name,new: ARRAY OF CHAR);
+		BEGIN
+			COPY(relTo,new);
+			RemovePrefix(name);
+			IF name[0] # "/" THEN  UTF8Strings.Append("/",new); END;
+			UTF8Strings.Append(name,new);
+		END MakeRel;
+
+		PROCEDURE New0 (name: ARRAY OF CHAR): Files.File;
+		VAR new: PathName;
+		BEGIN
+			MakeRel(name,new); RETURN fs.New0(new);
+		END New0;
+
+		PROCEDURE Old0 (name: ARRAY OF CHAR): Files.File;
+		VAR new: PathName;
+		BEGIN
+			(* Out.String("Old0, called with:"); Out.String(name); Out.Ln; *)
+			MakeRel(name,new);
+			(* Out.String("Old0, calling with:"); Out.String(new); Out.Ln; *)
+			RETURN fs.Old0(new);
+		END Old0;
+
+		PROCEDURE CreateDirectory0 (name: ARRAY OF CHAR;     VAR res: LONGINT);
+		VAR new: PathName;
+		BEGIN
+			MakeRel(name,new); fs.CreateDirectory0(new,res);
+		END CreateDirectory0;
+
+		PROCEDURE Delete0 (name: ARRAY OF CHAR;     VAR key, res: LONGINT);
+		VAR new: PathName;
+		BEGIN
+			MakeRel(name,new); fs.Delete0(new,key,res);
+		END Delete0;
+
+		PROCEDURE Enumerate0 (mask: ARRAY OF CHAR;     flags: SET;     enum: Files.Enumerator);
+		VAR new: PathName;
+		BEGIN
+			MakeRel(mask,new);
+			fs.Enumerate0(new,flags,enum);
+		END Enumerate0;
+
+		PROCEDURE FileKey (name: ARRAY OF CHAR): LONGINT;
+		VAR new: PathName;
+		BEGIN
+			(*Out.String("FileKey, called with:"); Out.String(name); Out.Ln; *)
+			MakeRel(name,new);
+			(*Out.String("FileKey, calling with:"); Out.String(new); Out.Ln;*)
+			RETURN fs.FileKey(new);
+		END FileKey;
+
+		PROCEDURE RemoveDirectory0 (name: ARRAY OF CHAR;     force: BOOLEAN;     VAR key, res: LONGINT);
+		VAR new: PathName;
+		BEGIN
+			MakeRel(name,new);  fs.RemoveDirectory0(new,force,key,res);
+		END RemoveDirectory0;
+
+		PROCEDURE Rename0 (old, new: ARRAY OF CHAR;     f: Files.File;      VAR res: LONGINT);
+		VAR old1,new1: PathName;
+		BEGIN
+			MakeRel(old,old1); MakeRel(new,new1);fs.Rename0(old1,new1,f,res);
+		END Rename0;
+
+	END FileSystem;
+
+	PROCEDURE RemovePrefix(VAR name: ARRAY OF CHAR);
+	VAR i,j: LONGINT;
+	BEGIN
+		WHILE(name[i] # 0X) & (name[i] # ":") DO
+			INC(i);
+		END;
+		IF name[i] = ":" THEN
+			j := 0; INC(i);
+			WHILE(name[i] # 0X) DO
+				name[j] := name[i]; INC(i);INC(j);
+			END;
+			name[j] := 0X;
+		END;
+	END RemovePrefix;
+
+	(** NewFS - Create a new filesystem relative to a Windows path. does not protect paths higher than relTo! (xyz:/../../.. could be used) *)
+	PROCEDURE NewFS*(context : Files.Parameters);
+	VAR str,prefix,name: ARRAY 256 OF CHAR; fs: FileSystem; rel: Files.FileSystem; ft: Files.FileSystemTable;
+	BEGIN
+		IF context.arg.GetString(str) THEN
+			Files.SplitName(str,prefix,name);
+			IF prefix # "" THEN
+				rel := Files.This(prefix);
+			ELSE
+				Files.GetList(ft);
+				rel := ft[0];
+			END;
+			IF rel # NIL THEN
+				NEW(fs,str,rel);
+				Files.Add(fs, context.prefix);
+			ELSE
+				context.out.String("file system could not be found: "); context.out.String(str); context.out.Ln;
+			END;
+		END;
+	END NewFS;
+
+
+END RelativeFiles64.
+
+SystemTools.Free RelativeFiles64 ~
+
+FSTools.Mount Work RelativeFiles64  ./ ~
+FSTools.Unmount Test ~
+
+
+
+
 System.Directory src:/*