SolarisELF.Mod 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. MODULE SolarisELF;
  2. IMPORT Files, Commands, Streams, Strings;
  3. CONST
  4. HeaderPart = "A2Loader.elf";
  5. CorePart = "Solaris32G.core";
  6. Offset = 10*1024;
  7. PROCEDURE NewFile( CONST name: ARRAY OF CHAR; log: Streams.Writer ): Files.File;
  8. VAR
  9. name2: ARRAY 128 OF CHAR; res: LONGINT;
  10. BEGIN
  11. IF Files.Old( name ) # NIL THEN
  12. COPY( name, name2); Strings.Append( name2, ".Bak" );
  13. Files.Rename( name, name2, res );
  14. log.String( "Backup created in " ); log.String( name2 ); log.Ln
  15. END;
  16. RETURN Files.New( name )
  17. END NewFile;
  18. PROCEDURE Build*( cc: Commands.Context );
  19. VAR in1, in2, fout: Files.File; r: Files.Reader; w: Files.Writer;
  20. outname: ARRAY 64 OF CHAR;
  21. size, i: SIZE; c: CHAR;
  22. BEGIN
  23. in1 := Files.Old( HeaderPart );
  24. IF in1 = NIL THEN
  25. cc.error.String( HeaderPart ); cc.error.String( " not found" ); cc.error.Ln;
  26. cc.error.Update;
  27. RETURN
  28. END;
  29. in2 := Files.Old( CorePart );
  30. IF in2 = NIL THEN
  31. cc.error.String( CorePart ); cc.error.String( " not found" ); cc.error.Ln;
  32. cc.error.Update;
  33. RETURN
  34. END;
  35. IF cc.arg.GetString( outname ) THEN
  36. size := in1.Length(); Files.OpenReader( r, in1, 0 );
  37. fout := NewFile( outname, cc.out ); Files.OpenWriter( w, fout, 0 );
  38. FOR i := 1 TO size DO
  39. r.Char( c ); w.Char( c )
  40. END;
  41. FOR i := 1 TO Offset - size DO w.Char( '=' ) END;
  42. size := in2.Length(); Files.OpenReader( r, in2, 0 );
  43. FOR i := 1 TO size DO
  44. r.Char( c ); w.Char( c )
  45. END;
  46. w.Update; Files.Register( fout );
  47. cc.out.String( outname ); cc.out.String( " created" ); cc.out.Ln;
  48. ELSE
  49. cc.error.String( "fileneme missing" ); cc.error.Ln
  50. END;
  51. cc.error.Update;
  52. cc.out.Update
  53. END Build;
  54. END SolarisELF.
  55. SystemTools.Free SolarisELF ~
  56. SolarisELF.Build Solaris32G.elf ~