Windows.StdIO.Mod 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. MODULE StdIO; (** AUTHOR gf; PURPOSE "Unix standard IO and argument channels *)
  2. (* Commands.Context for programs running outside Aos *)
  3. IMPORT S := SYSTEM, Modules, Commands, Streams, Pipes, WinTrace, Kernel32;
  4. CONST
  5. AddrSize = SIZEOF( ADDRESS );
  6. TYPE
  7. String=POINTER TO ARRAY OF CHAR;
  8. VAR
  9. env-: Commands.Context;
  10. hin-, hout-, herr-: Kernel32.HANDLE;
  11. stdInDecoupler: Pipes.ReadDecoupler;
  12. PROCEDURE Args(): String;
  13. VAR size, pos: SIZE; i,j: LONGINT; str: String;
  14. cmdLine {UNTRACED}: POINTER {UNSAFE} TO ARRAY OF CHAR;
  15. BEGIN
  16. cmdLine := Kernel32.GetCommandLine();
  17. pos := 0;
  18. WHILE cmdLine[pos] # 0X DO
  19. INC(pos);
  20. END;
  21. size := pos + 1;
  22. NEW(str, size);
  23. pos := 0;
  24. WHILE cmdLine[pos] # 0X DO
  25. str[pos] := cmdLine[pos];
  26. INC(pos);
  27. END;
  28. str[pos] := 0X;
  29. RETURN str;
  30. END Args;
  31. PROCEDURE Cleanup;
  32. BEGIN
  33. env.error.Update;
  34. env.out.Update
  35. END Cleanup;
  36. PROCEDURE Setup;
  37. VAR
  38. arg: Streams.StringReader;
  39. stdin: Streams.Reader;
  40. stdout: Streams.Writer;
  41. errout: Streams.Writer;
  42. str: String;
  43. BEGIN
  44. WinTrace.OpenConsole;
  45. str := Args();
  46. NEW( arg, LEN(str) ); arg.Set(str^);
  47. NEW(stdInDecoupler, WinTrace.Receive);
  48. NEW( stdin, stdInDecoupler.Receive, 1024 );
  49. NEW( stdout, WinTrace.Send, 1024 );
  50. NEW( errout, WinTrace.SendError, 512 );
  51. NEW( env, stdin, arg, stdout, errout, NIL );
  52. Modules.InstallTermHandler( Cleanup )
  53. END Setup
  54. BEGIN
  55. Setup
  56. END StdIO.
  57. SystemTools.DoCommands
  58. Compiler.Compile -b=AMD --newObjectFile --objectFileExtension=.Gox --symbolFileExtension=.Syx --mergeSections
  59. I386.Builtins.Mod Trace.Mod Windows.I386.Kernel32.Mod Windows.I386.Machine.Mod Heaps.Mod
  60. Modules.Mod Windows.I386.Objects.Mod Windows.Kernel.Mod KernelLog.Mod Streams.Mod Commands.Mod
  61. I386.Reals.Mod Reflection.Mod Locks.Mod Windows.Clock.Mod Files.Mod Dates.Mod Strings.Mod
  62. Windows.WinTrace.Mod Windows.WinFS.Mod
  63. Diagnostics.Mod StringPool.Mod BitSets.Mod ObjectFile.Mod
  64. GenericLinker.Mod Loader.Mod Options.Mod Debugging.Mod
  65. Windows.StdIO.Mod Pipes.Mod Shell.Mod TestStdIO.Mod
  66. ~
  67. Linker.Link --fileFormat=PE32CUI --fileName=fox.exe --extension=Gox --displacement=401000H
  68. Builtins Trace Kernel32 Machine Heaps Modules Objects Kernel KernelLog Streams Commands Files
  69. WinFS Clock Dates Reals Strings Diagnostics BitSets StringPool ObjectFile GenericLinker Reflection Loader
  70. WinTrace StdIO Pipes Shell TestStdIO ~
  71. FSTools.CloseFiles fox.exe ~
  72. ~