AbstractOperatingSystem.st
changeset 18639 3529a684d3fb
parent 18364 a693511a7c46
child 18640 358b275dced9
child 18741 48d1b0bee8a0
--- a/AbstractOperatingSystem.st	Fri Jul 24 19:09:44 2015 +0200
+++ b/AbstractOperatingSystem.st	Sat Jul 25 00:01:48 2015 +0200
@@ -1,5 +1,3 @@
-"{ Encoding: utf8 }"
-
 "
  COPYRIGHT (c) 1988 by Claus Gittinger
 	      All Rights Reserved
@@ -1339,244 +1337,244 @@
     terminateLock := Semaphore forMutualExclusion.
     ((externalInStream := anInStream) notNil
      and:[externalInStream isExternalStream not]) ifTrue:[
-	pIn := NonPositionableExternalStream makePipe.
-	inStreamToClose := externalInStream := pIn at:1.
-	shuffledInStream := pIn at:2.
-	anInStream isBinary ifTrue:[
-	    shuffledInStream binary
-	].
-	lineWise ifFalse:[
-	    shuffledInStream blocking:false.
-	].
-
-	"/ start a reader process, shuffling data from the given
-	"/ inStream to the pipe (which is connected to the commands input)
-	inputShufflerProcess :=
-	    [
-		[
-		    [anInStream atEnd] whileFalse:[
-			self shuffleFrom:anInStream to:shuffledInStream lineWise:lineWise.
-			shuffledInStream flush
-		    ]
-		] ensure:[
-		    shuffledInStream close
-		]
-	    ] newProcess
-		name:'cmd input shuffler';
+        pIn := NonPositionableExternalStream makePipe.
+        inStreamToClose := externalInStream := pIn at:1.
+        shuffledInStream := pIn at:2.
+        anInStream isBinary ifTrue:[
+            shuffledInStream binary
+        ].
+        lineWise ifFalse:[
+            shuffledInStream blocking:false.
+        ].
+
+        "/ start a reader process, shuffling data from the given
+        "/ inStream to the pipe (which is connected to the commands input)
+        inputShufflerProcess :=
+            [
+                [
+                    [anInStream atEnd] whileFalse:[
+                        self shuffleFrom:anInStream to:shuffledInStream lineWise:lineWise.
+                        shuffledInStream flush
+                    ]
+                ] ensure:[
+                    shuffledInStream close
+                ]
+            ] newProcess
+                name:'cmd input shuffler';
 "/                beSystemProcess;
-		resume.
+                resume.
     ].
     ((externalOutStream := anOutStream) notNil
      and:[externalOutStream isExternalStream not]) ifTrue:[
-	pOut := NonPositionableExternalStream makePipe.
-	shuffledOutStream := (pOut at:1).
-	anOutStream isBinary ifTrue:[
-	    shuffledOutStream binary
-	].
-	outStreamToClose := externalOutStream := pOut at:2.
-	outputShufflerProcess :=
-	    [
-		WriteError handle:[:ex |
-		    "/ ignored
-		] do:[
-		    self shuffleAllFrom:shuffledOutStream to:anOutStream lineWise:lineWise lockWith:terminateLock.
-		].
-	    ] newProcess
-		priority:(Processor userSchedulingPriority + 1);
-		name:'cmd output shuffler';
+        pOut := NonPositionableExternalStream makePipe.
+        shuffledOutStream := (pOut at:1).
+        anOutStream isBinary ifTrue:[
+            shuffledOutStream binary
+        ].
+        outStreamToClose := externalOutStream := pOut at:2.
+        outputShufflerProcess :=
+            [
+                WriteError handle:[:ex |
+                    "/ ignored
+                ] do:[
+                    self shuffleAllFrom:shuffledOutStream to:anOutStream lineWise:lineWise lockWith:terminateLock.
+                ].
+            ] newProcess
+                priority:(Processor userSchedulingPriority "+ 1");
+                name:'cmd output shuffler';
 "/                beSystemProcess;
-		resume.
+                resume.
     ].
     (externalErrStream := anErrStream) notNil ifTrue:[
-	anErrStream == anOutStream ifTrue:[
-	    externalErrStream := externalOutStream
-	] ifFalse:[
-	    anErrStream isExternalStream ifFalse:[
-		pErr := NonPositionableExternalStream makePipe.
-		shuffledErrStream := (pErr at:1).
-		anErrStream isBinary ifTrue:[
-		    shuffledErrStream binary
-		].
-		errStreamToClose := externalErrStream := pErr at:2.
-		errorShufflerProcess :=
-		    [
-			self shuffleAllFrom:shuffledErrStream to:anErrStream lineWise:lineWise lockWith:terminateLock.
-		    ] newProcess
-			priority:(Processor userSchedulingPriority + 2);
-			name:'cmd err-output shuffler';
+        anErrStream == anOutStream ifTrue:[
+            externalErrStream := externalOutStream
+        ] ifFalse:[
+            anErrStream isExternalStream ifFalse:[
+                pErr := NonPositionableExternalStream makePipe.
+                shuffledErrStream := (pErr at:1).
+                anErrStream isBinary ifTrue:[
+                    shuffledErrStream binary
+                ].
+                errStreamToClose := externalErrStream := pErr at:2.
+                errorShufflerProcess :=
+                    [
+                        self shuffleAllFrom:shuffledErrStream to:anErrStream lineWise:lineWise lockWith:terminateLock.
+                    ] newProcess
+                        priority:(Processor userSchedulingPriority + 1);
+                        name:'cmd err-output shuffler';
 "/                        beSystemProcess;
-			resume.
-	    ]
-	]
+                        resume.
+            ]
+        ]
     ].
     ((externalAuxStream := anAuxStream) notNil
      and:[externalAuxStream isExternalStream not]) ifTrue:[
-	pAux := NonPositionableExternalStream makePipe.
-	auxStreamToClose := externalAuxStream := pAux at:1.
-	shuffledAuxStream := pAux at:2.
-	shuffledAuxStream blocking:false.
-	anAuxStream isBinary ifTrue:[
-	    shuffledAuxStream binary
-	].
-
-	"/ start a reader process, shuffling data from the given
-	"/ auxStream to the pipe (which is connected to the commands aux)
-	auxShufflerProcess :=
-	    [
-		[
-		    [anAuxStream atEnd] whileFalse:[
-			self shuffleFrom:anAuxStream to:shuffledAuxStream lineWise:false.
-			shuffledAuxStream flush
-		    ]
-		] ensure:[
-		    shuffledAuxStream close
-		]
-	    ] newProcess
-		name:'cmd aux shuffler';
+        pAux := NonPositionableExternalStream makePipe.
+        auxStreamToClose := externalAuxStream := pAux at:1.
+        shuffledAuxStream := pAux at:2.
+        shuffledAuxStream blocking:false.
+        anAuxStream isBinary ifTrue:[
+            shuffledAuxStream binary
+        ].
+
+        "/ start a reader process, shuffling data from the given
+        "/ auxStream to the pipe (which is connected to the commands aux)
+        auxShufflerProcess :=
+            [
+                [
+                    [anAuxStream atEnd] whileFalse:[
+                        self shuffleFrom:anAuxStream to:shuffledAuxStream lineWise:false.
+                        shuffledAuxStream flush
+                    ]
+                ] ensure:[
+                    shuffledAuxStream close
+                ]
+            ] newProcess
+                name:'cmd aux shuffler';
 "/                beSystemProcess;
-		resume.
+                resume.
     ].
 
     stopShufflers := [:shuffleRest |
-	    inputShufflerProcess notNil ifTrue:[
-		terminateLock critical:[inputShufflerProcess terminate].
-		inputShufflerProcess waitUntilTerminated
-	    ].
-	    auxShufflerProcess notNil ifTrue:[
-		terminateLock critical:[auxShufflerProcess terminate].
-		auxShufflerProcess waitUntilTerminated
-	    ].
-	    outputShufflerProcess notNil ifTrue:[
-		terminateLock critical:[outputShufflerProcess terminate].
-		outputShufflerProcess waitUntilTerminated.
-		shuffleRest ifTrue:[ self shuffleRestFrom:shuffledOutStream to:anOutStream lineWise:lineWise ].
-		shuffledOutStream close.
-	    ].
-	    errorShufflerProcess notNil ifTrue:[
-		terminateLock critical:[errorShufflerProcess terminate].
-		errorShufflerProcess waitUntilTerminated.
-		shuffleRest ifTrue:[ self shuffleRestFrom:shuffledErrStream to:anErrStream lineWise:lineWise ].
-		shuffledErrStream close.
-	    ].
-	].
+            inputShufflerProcess notNil ifTrue:[
+                terminateLock critical:[inputShufflerProcess terminate].
+                inputShufflerProcess waitUntilTerminated
+            ].
+            auxShufflerProcess notNil ifTrue:[
+                terminateLock critical:[auxShufflerProcess terminate].
+                auxShufflerProcess waitUntilTerminated
+            ].
+            outputShufflerProcess notNil ifTrue:[
+                terminateLock critical:[outputShufflerProcess terminate].
+                outputShufflerProcess waitUntilTerminated.
+                shuffleRest ifTrue:[ self shuffleRestFrom:shuffledOutStream to:anOutStream lineWise:lineWise ].
+                shuffledOutStream close.
+            ].
+            errorShufflerProcess notNil ifTrue:[
+                terminateLock critical:[errorShufflerProcess terminate].
+                errorShufflerProcess waitUntilTerminated.
+                shuffleRest ifTrue:[ self shuffleRestFrom:shuffledErrStream to:anErrStream lineWise:lineWise ].
+                shuffledErrStream close.
+            ].
+        ].
 
     closeStreams := [
-	    inStreamToClose notNil ifTrue:[
-		inStreamToClose close
-	    ].
-	    errStreamToClose notNil ifTrue:[
-		errStreamToClose close
-	    ].
-	    outStreamToClose notNil ifTrue:[
-		outStreamToClose close
-	    ].
-	    auxStreamToClose notNil ifTrue:[
-		auxStreamToClose close
-	    ].
-	    nullStream notNil ifTrue:[
-		nullStream close
-	    ].
-	].
+            inStreamToClose notNil ifTrue:[
+                inStreamToClose close
+            ].
+            errStreamToClose notNil ifTrue:[
+                errStreamToClose close
+            ].
+            outStreamToClose notNil ifTrue:[
+                outStreamToClose close
+            ].
+            auxStreamToClose notNil ifTrue:[
+                auxStreamToClose close
+            ].
+            nullStream notNil ifTrue:[
+                nullStream close
+            ].
+        ].
 
 
     sema := Semaphore new name:'OS command wait'.
     [
-	externalInStream isNil ifTrue:[
-	    externalInStream := nullStream := Filename nullDevice readWriteStream.
-	].
-	externalOutStream isNil ifTrue:[
-	    nullStream isNil ifTrue:[nullStream := Filename nullDevice writeStream].
-	    externalOutStream := nullStream.
-	].
-	externalErrStream isNil ifTrue:[
-	    externalErrStream := externalOutStream
-	].
-
-	pid := Processor
-		    monitor:[
-			self
-			    startProcess:aCommandStringOrArray
-			    inputFrom:externalInStream
-			    outputTo:externalOutStream
-			    errorTo:externalErrStream
-			    auxFrom:externalAuxStream
-			    environment:environmentDictionary
-			    inDirectory:dirOrNil
-		    ]
-		    action:[:status |
-			status stillAlive ifFalse:[
-			    exitStatus := status.
-			    sema signal.
-			    self closePid:pid
-			]
-		    ].
-
-	pid isNil ifTrue:[
-	    exitStatus := self osProcessStatusClass processCreationFailure
-	] ifFalse:[
-	    sema wait.
-	].
+        externalInStream isNil ifTrue:[
+            externalInStream := nullStream := Filename nullDevice readWriteStream.
+        ].
+        externalOutStream isNil ifTrue:[
+            nullStream isNil ifTrue:[nullStream := Filename nullDevice writeStream].
+            externalOutStream := nullStream.
+        ].
+        externalErrStream isNil ifTrue:[
+            externalErrStream := externalOutStream
+        ].
+
+        pid := Processor
+                    monitor:[
+                        self
+                            startProcess:aCommandStringOrArray
+                            inputFrom:externalInStream
+                            outputTo:externalOutStream
+                            errorTo:externalErrStream
+                            auxFrom:externalAuxStream
+                            environment:environmentDictionary
+                            inDirectory:dirOrNil
+                    ]
+                    action:[:status |
+                        status stillAlive ifFalse:[
+                            exitStatus := status.
+                            sema signal.
+                            self closePid:pid
+                        ]
+                    ].
+
+        pid isNil ifTrue:[
+            exitStatus := self osProcessStatusClass processCreationFailure
+        ] ifFalse:[
+            sema wait.
+        ].
     ] ifCurtailed:[
-	closeStreams value.
-	pid notNil ifTrue:[
-	    "/ terminate the os-command (and all of its forked commands)
-	    self terminateProcessGroup:pid.
-	    self terminateProcess:pid.
-	    self closePid:pid.
-	].
-	stopShufflers value:false.
+        closeStreams value.
+        pid notNil ifTrue:[
+            "/ terminate the os-command (and all of its forked commands)
+            self terminateProcessGroup:pid.
+            self terminateProcess:pid.
+            self closePid:pid.
+        ].
+        stopShufflers value:false.
     ].
 
     closeStreams value.
     stopShufflers value:true.
     (exitStatus isNil or:[exitStatus success]) ifFalse:[
-	^ aBlock value:exitStatus
+        ^ aBlock value:exitStatus
     ].
     ^ true
 
     "
-	|outStream errStream|
-
-	outStream := '' writeStream.
-
-	OperatingSystem executeCommand:'ls -l'
-			inputFrom:'abc' readStream
-			outputTo:outStream
-			errorTo:nil
-			inDirectory:nil
-			lineWise:true
-			onError:[:exitStatus | ^ false].
-	outStream contents
-    "
-
-    "
-	|outStream errStream|
-
-	outStream := #[] writeStream.
-
-	OperatingSystem executeCommand:'cat'
-			inputFrom:(ByteArray new:5000000) readStream
-			outputTo:outStream
-			errorTo:nil
-			inDirectory:nil
-			lineWise:false
-			onError:[:exitStatus | ^ false].
-	outStream size
-    "
-
-    "
-	|outStream errStream|
-
-	outStream := '' writeStream.
-
-	OperatingSystem executeCommand:'gpg -s --batch --no-tty --passphrase-fd 0 /tmp/passwd'
-			inputFrom:'bla' readStream
-			outputTo:outStream
-			errorTo:nil
-			inDirectory:nil
-			lineWise:true
-			onError:[:exitStatus |  false].
-	outStream contents
+        |outStream errStream|
+
+        outStream := '' writeStream.
+
+        OperatingSystem executeCommand:'ls -l'
+                        inputFrom:'abc' readStream
+                        outputTo:outStream
+                        errorTo:nil
+                        inDirectory:nil
+                        lineWise:true
+                        onError:[:exitStatus | ^ false].
+        outStream contents
+    "
+
+    "
+        |outStream errStream|
+
+        outStream := #[] writeStream.
+
+        OperatingSystem executeCommand:'cat'
+                        inputFrom:(ByteArray new:5000000) readStream
+                        outputTo:outStream
+                        errorTo:nil
+                        inDirectory:nil
+                        lineWise:false
+                        onError:[:exitStatus | ^ false].
+        outStream size
+    "
+
+    "
+        |outStream errStream|
+
+        outStream := '' writeStream.
+
+        OperatingSystem executeCommand:'gpg -s --batch --no-tty --passphrase-fd 0 /tmp/passwd'
+                        inputFrom:'bla' readStream
+                        outputTo:outStream
+                        errorTo:nil
+                        inDirectory:nil
+                        lineWise:true
+                        onError:[:exitStatus |  false].
+        outStream contents
     "
 
     "Modified: / 11-02-2007 / 20:54:39 / cg"
@@ -7743,11 +7741,11 @@
 !AbstractOperatingSystem class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/AbstractOperatingSystem.st,v 1.301 2015-05-18 00:16:20 cg Exp $'
+    ^ '$Header$'
 !
 
 version_CVS
-    ^ '$Header: /cvs/stx/stx/libbasic/AbstractOperatingSystem.st,v 1.301 2015-05-18 00:16:20 cg Exp $'
+    ^ '$Header$'
 ! !