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

rename

git-svn-id: https://svn.inf.ethz.ch/svn/lecturers/a2/trunk@7280 8c9fc860-2736-0410-a75d-ab315db34111
eth.guenter 8 жил өмнө
parent
commit
ca75a6c2aa

+ 72 - 0
source/ElfBinary.Mod

@@ -0,0 +1,72 @@
+MODULE ElfBinary;  (** AUTHOR "GF"; PURPOSE "build ELF binary"; *)
+
+(* Build an ELF binary by concatenating the loader and a statically linked program *)
+
+IMPORT Files, Commands, Streams, Strings;
+
+CONST 
+	HeaderPart = "A2Loader.elf";
+	StartPos = 10*1024;	(* cf. A2Loader.c *)
+
+	
+	PROCEDURE NewFile( CONST name: ARRAY OF CHAR; log: Streams.Writer ): Files.File;
+	VAR
+		name2: ARRAY 128 OF CHAR;  res: LONGINT;
+	BEGIN
+		IF Files.Old( name ) # NIL THEN
+			COPY( name, name2);  Strings.Append( name2, ".Bak" );
+			Files.Rename( name, name2, res );
+			log.String( "Backup created in " ); log.String( name2 );  log.Ln
+		END;
+		RETURN Files.New( name )
+	END NewFile;
+	
+	PROCEDURE Open( CONST name: ARRAY OF CHAR; log: Streams.Writer ): Files.File;
+	VAR f: Files.File;
+	BEGIN
+		f := Files.Old( name );
+		IF f = NIL THEN
+			log.String( name );  log.String( " not found" ); log.Ln;
+			log.Update;
+		END;
+		RETURN f
+	END Open;
+	
+	PROCEDURE Build*( cc: Commands.Context );
+	VAR in1, in2, out: Files.File;  r: Files.Reader; w: Files.Writer;
+		inputname, token, outputname: ARRAY 64 OF CHAR;
+		size, i: SIZE; c: CHAR;
+	BEGIN
+		IF 	cc.arg.GetString( inputname ) &
+			cc.arg.GetString( token ) & (token = "->") &
+			cc.arg.GetString( outputname ) THEN
+			
+				in1 := Open( HeaderPart, cc.error );
+				in2 := Open( inputname, cc.error );
+				IF (in1 = NIL) OR (in2 = NIL) THEN  RETURN  END;
+			
+				size := in1.Length();  Files.OpenReader( r, in1, 0 );
+				out := NewFile( outputname, cc.out );  Files.OpenWriter( w, out, 0 );
+				
+				FOR i := 1 TO size DO  r.Char( c ); w.Char( c )  END;
+				
+				FOR i := 1 TO StartPos - size DO  w.Char( '#' )  END;
+				
+				size := in2.Length();  Files.OpenReader( r, in2, 0 );
+				FOR i := 1 TO size DO  r.Char( c ); w.Char( c )  END;
+				
+				w.Update;  Files.Register( out );
+				cc.out.String( outputname );  cc.out.String( " created" ); cc.out.Ln;
+		ELSE
+			cc.error.String( "usage: ElfBinary.Build StatLinkedProgram -> ElfProgram" );  cc.error.Ln
+		END;
+		cc.error.Update;
+		cc.out.Update
+	END Build;
+
+END ElfBinary.
+
+   SystemTools.Free  ElfBinary ~
+   
+   ElfBinary.Build  Solaris32G.core -> SolarisA2 ~
+   

+ 0 - 70
source/SolarisELF.Mod

@@ -1,70 +0,0 @@
-MODULE SolarisELF;
-
-IMPORT Files, Commands, Streams, Strings;
-
-CONST 
-	HeaderPart = "A2Loader.elf";
-	CorePart = "Solaris32G.core";
-	Offset = 10*1024;
-
-	
-	PROCEDURE NewFile( CONST name: ARRAY OF CHAR; log: Streams.Writer ): Files.File;
-	VAR
-		name2: ARRAY 128 OF CHAR;  res: LONGINT;
-	BEGIN
-		IF Files.Old( name ) # NIL THEN
-			COPY( name, name2);  Strings.Append( name2, ".Bak" );
-			Files.Rename( name, name2, res );
-			log.String( "Backup created in " ); log.String( name2 );  log.Ln
-		END;
-		RETURN Files.New( name )
-	END NewFile;
-	
-	PROCEDURE Build*( cc: Commands.Context );
-	VAR in1, in2, fout: Files.File;  r: Files.Reader; w: Files.Writer;
-		outname: ARRAY 64 OF CHAR;
-		size, i: SIZE; c: CHAR;
-	BEGIN
-		in1 := Files.Old( HeaderPart );
-		IF in1 = NIL THEN
-			cc.error.String( HeaderPart );  cc.error.String( " not found" ); cc.error.Ln;
-			cc.error.Update;
-			RETURN
-		END;
-		in2 := Files.Old( CorePart );
-		IF in2 = NIL THEN
-			cc.error.String( CorePart );  cc.error.String( " not found" ); cc.error.Ln;
-			cc.error.Update;
-			RETURN
-		END;
-		
-		IF cc.arg.GetString( outname ) THEN
-			size := in1.Length();  Files.OpenReader( r, in1, 0 );
-			fout := NewFile( outname, cc.out );  Files.OpenWriter( w, fout, 0 );
-			FOR i := 1 TO size DO
-				r.Char( c ); w.Char( c )
-			END;
-			
-			FOR i := 1 TO Offset - size DO  w.Char( '=' )  END;
-			
-			size := in2.Length();  Files.OpenReader( r, in2, 0 );
-			FOR i := 1 TO size DO
-				r.Char( c ); w.Char( c )
-			END;
-			
-			w.Update;  Files.Register( fout );
-			
-			cc.out.String( outname );  cc.out.String( " created" ); cc.out.Ln;
-		ELSE
-			cc.error.String( "fileneme missing" );  cc.error.Ln
-		END;
-		cc.error.Update;
-		cc.out.Update
-	END Build;
-
-END SolarisELF.
-
-   SystemTools.Free  SolarisELF ~
-   
-   SolarisELF.Build  Solaris32G.elf ~
-