EFITest.Mod 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. MODULE EFITest; (** AUTHOR "Matthias Frei"; PURPOSE "EFI Test"; *)
  2. IMPORT EFI, EFISimpleFS, EFIFileProtocol, EFILib, Trace, SYSTEM;
  3. PROCEDURE TestFS;
  4. VAR
  5. size : EFI.Int;
  6. buffer : ARRAY 1000 OF EFI.Handle;
  7. status : EFI.Status;
  8. prot : EFI.Protocol;
  9. fs : EFISimpleFS.Protocol;
  10. root : EFIFileProtocol.Protocol;
  11. file : EFIFileProtocol.Protocol;
  12. filename : ARRAY 32 OF EFI.Char16;
  13. buf : POINTER TO ARRAY 30 OF CHAR;
  14. BEGIN
  15. EFILib.StringToLongString("\test.txt",filename);
  16. (*status := EFI.table.ConOut.OutputString(EFI.table.ConOut, filename);*)
  17. size := LEN(buffer)*4;
  18. status := EFI.table.BS.LocateHandle(EFI.ByProtocol, EFISimpleFS.GUID , 0, size, buffer);
  19. IF (status # EFI.Success) THEN
  20. Trace.String("Status: "); Trace.Int(status, 0); Trace.Ln;
  21. Trace.String("Error code: "); Trace.Int(status - EFI.Error,0); Trace.Ln;
  22. END;
  23. Trace.String("Buffer size: "); Trace.Int(size,0); Trace.Ln;
  24. IF ((status = EFI.Success) & (size > 0)) THEN
  25. status := EFI.table.BS.HandleProtocol(buffer[0], EFISimpleFS.GUID, prot);
  26. Trace.Int(status, 0); Trace.Ln;
  27. fs := SYSTEM.VAL(EFISimpleFS.Protocol,prot);
  28. Trace.Address(SYSTEM.VAL(ADDRESS, prot)); Trace.Ln;
  29. IF (fs # NIL) THEN
  30. status := fs.OpenVolume(fs, root);
  31. Trace.Int(status,0); Trace.Ln;
  32. IF status = EFI.Success THEN
  33. Trace.String("Trying to open the file ");
  34. status := EFI.table.ConOut.OutputString(EFI.table.ConOut, filename);
  35. Trace.Ln;
  36. status := root.Open(root, file, filename, EFIFileProtocol.ModeRead+EFIFileProtocol.ModeWrite, 0);
  37. IF status = EFI.Success THEN
  38. NEW(buf);
  39. size := 20;
  40. status := file.Read(file, size, ADDRESSOF(buf[0]));
  41. Trace.String(buf^);
  42. buf^ := "pipapo";
  43. size := LEN(buf);
  44. status := file.SetPosition(file, -1); (* EOF *)
  45. status := file.Write(file, size,buf);
  46. status := file.Close(file);
  47. Trace.Int(status,0);
  48. END;
  49. END;
  50. END;
  51. END;
  52. END TestFS;
  53. BEGIN
  54. Trace.Blue;
  55. Trace.String ("Hello ");
  56. Trace.Red;
  57. Trace.String ("World!");
  58. Trace.Ln;
  59. TestFS;
  60. END EFITest.
  61. Compiler.Compile --extensions
  62. I386.Builtins.Mod Trace.Mod EFI.Mod EFITrace.Mod EFIFileProtocol.Mod EFISimpleFS.Mod EFILib.Mod EFITest.Mod ~
  63. Linker.Link --fileName=test.efi --fileFormat=EFI32 --displacement=401000H
  64. Builtins Trace EFI EFITrace EFISimpleFS EFIFileProtocol EFILib EFITest ~