November 18, 2017, 10:58:41 PM

Author Topic: [bmx] Simple tprocess wrapper. eof() readline() by skn3 [ 1+ years ago ]  (Read 207 times)

Offline BlitzBot

  • Newbie
  • *
  • Posts: 0
Title : Simple tprocess wrapper. eof() readline()
Author : skn3
Posted : 1+ years ago

Description : Thanks to:
Seb
<a href="../Account/showuser012d.html?id=1793" target="_blank">http://www.blitzbasic.com/Account/showuser.php?id=1793[/url]

DJWoodgate
<a href="../Account/showuser4d23.html?id=159" target="_blank">http://www.blitzbasic.com/Account/showuser.php?id=159[/url]

On this topic: <a href="../Community/postsd069.html?topic=68847" target="_blank">http://www.blitzbasic.com/Community/posts.php?topic=68847[/url]

Example1:
Code: [Select]
Local temp_proc:tproc = CreateProc("net start MOO_MOO_MOO")
While temp_proc.eof() = False
If temp_proc.avail() Print "read: " + temp_proc.read()
Wend
temp_proc.close()


Example2:
Code: [Select]
Local temp_proc:tproc = CreateProc("net start MOO_MOO_MOO")
While temp_proc.eof() = False
If temp_proc.pipeavail() Print "pipe: " + temp_proc.readpipe()
If temp_proc.erravail() Print "err: " + temp_proc.readerr()
Wend
temp_proc.close()


Code :
Code: BlitzMax
  1. Import pub.freeprocess
  2.  
  3. Type tproc Extends TProcess
  4.         Method close:Int()
  5.                 super.close()
  6.                 terminate()
  7.         End Method
  8.  
  9.         Method avail:Int()
  10.                 Return err And pipe And (err.bufferpos Or err.readavail() Or pipe.bufferpos Or pipe.readavail())
  11.         End Method
  12.        
  13.         Method read:String()
  14.                 If err And (err.bufferpos > 0 Or err.readavail() > 0) Return err.ReadLine().Replace("~r","").Replace("~n","")
  15.                 If pipe And (pipe.bufferpos > 0 Or pipe.readavail() > 0) Return pipe.ReadLine().Replace("~r","").Replace("~n","")
  16.         End Method
  17.  
  18.         Method readpipe:String()
  19.                 If pipe And (pipe.bufferpos > 0 Or pipe.readavail() > 0) Return pipe.ReadLine().Replace("~r","").Replace("~n","")
  20.         End Method
  21.        
  22.         Method readerr:String()
  23.                 If err And (err.bufferpos > 0 Or err.readavail() > 0) Return err.ReadLine().Replace("~r","").Replace("~n","")
  24.         End Method
  25.        
  26.         Method pipeavail:Int()
  27.                 Return pipe And (pipe.bufferpos > 0 Or pipe.readavail() > 0)
  28.         End Method
  29.        
  30.         Method erravail:Int()
  31.                 Return err And (err.bufferpos > 0 Or err.readavail() > 0)
  32.         End Method
  33.        
  34.         Method Eof:Int()
  35.                 If status() = 1 Return False
  36.                 If pipe And pipe.readavail() > 0 Return False
  37.                 If err And err.readavail() > 0 Return False
  38.                 If pipe And pipe.bufferpos > 0 Return False
  39.                 If err And err.bufferpos > 0 Return False
  40.                 Return True
  41.         End Method
  42.  
  43.         Function Create:TProc(ncmd:String,nflags:Int)
  44.                 Local temp_proc:TProc
  45.                 Local infd,outfd,errfd 
  46.                
  47.                 'do mac speciffic stuff
  48.                 ?MacOS
  49.                 If FileType(ncmd)=2
  50.                         ncmd :+ "/Contents/MacOS/" + StripExt(StripDir(ncmd))
  51.                 EndIf
  52.                 ?
  53.                
  54.                 'create the proc object
  55.                 temp_proc = New TProc
  56.                
  57.                 'setup the proc
  58.                 temp_proc.name = ncmd
  59.                
  60.                 'attempt to start the process
  61.                 temp_proc.handle = fdProcess(ncmd,Varptr(infd),Varptr(outfd),Varptr(errfd),nflags)
  62.                 If Not temp_proc.handle Return Null
  63.                
  64.                 'creat teh process pipes
  65.                 temp_proc.pipe = TPipeStream.Create(infd,outfd)
  66.                 temp_proc.err = TPipeStream.Create(errfd,0)
  67.                
  68.                 'add process to process list
  69.                 If Not ProcessList ProcessList = New TList
  70.                 ProcessList.AddLast temp_proc
  71.                
  72.                 'return the proc object
  73.                 Return temp_proc
  74.         End Function
  75. End Type
  76.  
  77. Function CreateProc:tproc(ncmd:String,nhidden:Int = True)
  78.         Return tproc.create(ncmd,nhidden)
  79. End Function


Comments : none...