Modify

Opened 2 months ago

Closed 2 months ago

Last modified 2 months ago

#3764 closed Feature Request (Rejected)

ConsoleWrite binary mode

Reported by: divinity76@… Owned by:
Milestone: Component: AutoIt
Version: Severity: None
Keywords: ConsoleWrite Cc:

Description

ConsoleRead has a binary mode, so it seems fitting that ConsoleWrite should have a binary mode as well. for backwards-compatibility it should be off-by-default and optional, i suggest changing it to

ConsoleWrite ( "data" [, binary = False] )

here is test code to see how ConsoleWrite currently handles binary data:

$test="";
for $i = 0 To 255
   $test = $test & Chr($i);
Next
ConsoleWrite($test);

Attachments (0)

Change History (2)

comment:1 Changed 2 months ago by Jpm

  • Resolution set to Rejected
  • Status changed from new to closed

If you know your parameter to ConsolWrite is a binary just use ConsolWrite(BinaryToString($Data))
we will not Change the ConsoleWrite for such easy handling of Binary if needed
Cheers

comment:2 Changed 2 months ago by divinity76@…

BinaryToString is not a good solution, it would corrupt binary data, also for some reason, this prints absolutely nothing:

ConsoleWrite(BinaryToString(Chr(0) & "ABCDEFG"));

  • absolutely nothing will be printed, but even if it was printed, a conversion to something non-binary would cause data corruption

lets take a more complex, and real, example: trying to implement the Unix Cat program in AutoIt ( https://en.wikipedia.org/wiki/Cat_(Unix) ),

a program available on all Linux and MacOS systems, but not shipped with Windows,

a simple implementation would probably look something like:

; PS! this code must be compiled with Aut2exe.exe with the /console argument!
; first read stdin
Local $stdinData
While True
    $stdinData = ConsoleRead(False,True);
    If @error Then ExitLoop
    If(StringLen($stdinData) == 0) Then ExitLoop
    ConsoleWrite($stdinData);
WEnd

; then read all files in arguments
For $i = 1 To $cmdLine[0] Step 1
    ConsoleWrite(FileRead($cmdLine[$i]));
Next

but this script would fail to cat any files with NULL bytes in them,

and if you did ConsoleWrite(BinaryToString(FileRead($cmdLine[$i]))); , then it would *corrupt* binary files, wouldn't it?

Guidelines for posting comments:

  • You cannot re-open a ticket but you may still leave a comment if you have additional information to add.
  • In-depth discussions should take place on the forum.

For more information see the full version of the ticket guidelines here.

Add Comment

Modify Ticket

Action
as closed The ticket will remain with no owner.
Author


E-mail address and user name can be saved in the Preferences.

 
Note: See TracTickets for help on using tickets.