Here's another quickfix based on readprogramdata().
Code: Select all
Global MyReadProgramStringBuffer.s
Procedure.s MyReadProgramString(ProgramNr)
Size = AvailableProgramOutput(ProgramNr)
If Size > 0
Repeat
ReadProgramData(ProgramNr, @Char.b, 1)
MyReadProgramStringBuffer + Chr(Char)
Until Char = $0A Or AvailableProgramOutput(ProgramNr) = 0
If Char <> $0A
ProcedureReturn ""
Else
Temp.s = MyReadProgramStringBuffer
MyReadProgramStringBuffer = ""
ProcedureReturn ReplaceString(ReplaceString(Temp, Chr(13), ""), Chr(10), "")
EndIf
EndIf
EndProcedure
ProgramNr = RunProgram("help", "", "", #PB_Program_Open | #PB_Program_Read | #PB_Program_Hide)
If ProgramNr
While ProgramRunning(ProgramNr)
If AvailableProgramOutput(ProgramNr)
Output.s = MyReadProgramString(ProgramNr)
Debug Output
EndIf
Wend
CloseProgram(ProgramNr)
EndIf
Another one which works better with some programs
Code: Select all
Global *MyReadProgramStringBuffer = AllocateMemory(1024)
Procedure.s MyReadProgramString(ProgramNr)
Static MyReadProgramOffset.i = 0
Size = AvailableProgramOutput(ProgramNr)
If Size > 0
Repeat
ReadProgramData(ProgramNr, @Char.b, 1)
PokeB(*MyReadProgramStringBuffer + MyReadProgramOffset, Char)
MyReadProgramOffset + 1
Until Char = $0A Or AvailableProgramOutput(ProgramNr) = 0 Or MyReadProgramOffset > 255
If Char <> $0A
ProcedureReturn ""
Else
PokeB(*MyReadProgramStringBuffer + MyReadProgramOffset, 0)
Temp.s = PeekS(*MyReadProgramStringBuffer, -1, #PB_Ascii)
MyReadProgramOffset = 0
ProcedureReturn ReplaceString(ReplaceString(Temp, Chr(13), ""), Chr(10), "")
EndIf
EndIf
EndProcedure
Compiler = RunProgram("help", "", "", #PB_Program_Open|#PB_Program_Read)
Output$ = ""
If Compiler
While ProgramRunning(Compiler)
If AvailableProgramOutput(Compiler)
Output$ + MyReadProgramString(Compiler) + Chr(13)
EndIf
Wend
Output$ + Chr(13) + Chr(13)
Output$ + "Exitcode: " + Str(ProgramExitCode(Compiler))
CloseProgram(Compiler) ; Close the connection to the program
EndIf
MessageRequester("Output", Output$)