1: ================================================================================
2:
3: Smalltalk.KSU defineClass: #ShellInterpreter
4: superclass: #{Core.Object}
5: indexedType: #none
6: private: false
7: instanceVariableNames: 'commandString interface '
8: classInstanceVariableNames: ''
9: imports: ''
10: category: ''
11:
12: ================================================================================
13:
14: KSU.ShellInterpreter method for 'interface operation'
15:
16: closeErrorPipe
17:
18: ^self interface closeErrorPipe
19:
20: ------------------------------------------------------------
21:
22: KSU.ShellInterpreter method for 'interface operation'
23:
24: closeInputPipe
25:
26: ^self interface closeInputPipe
27:
28: ------------------------------------------------------------
29:
30: KSU.ShellInterpreter method for 'interface operation'
31:
32: closeOutputPipe
33:
34: ^self interface closeOutputPipe
35:
36: ------------------------------------------------------------
37:
38: KSU.ShellInterpreter method for 'accessing'
39:
40: commandString
41:
42: commandString ifNil: [commandString := String new].
43: ^commandString
44:
45: ------------------------------------------------------------
46:
47: KSU.ShellInterpreter method for 'accessing'
48:
49: commandString: aString
50:
51: commandString := aString
52:
53: ------------------------------------------------------------
54:
55: KSU.ShellInterpreter method for 'text utilities'
56:
57: convertCR2CRLF: inputString
58:
59: | inputStream outputStream |
60: inputStream := inputString readStream.
61: outputStream := String new writeStream.
62: [inputStream atEnd] whileFalse:
63: [| aCharacter |
64: aCharacter := inputStream next.
65: outputStream nextPut: aCharacter.
66: aCharacter = Character cr ifTrue: [outputStream nextPut: Character lf]].
67: inputStream close.
68: outputStream close.
69: ^outputStream contents
70:
71: ------------------------------------------------------------
72:
73: KSU.ShellInterpreter method for 'text utilities'
74:
75: convertCR2LF: inputString
76:
77: | outputString |
78: outputString := inputString
79: collect: [:aCharacter | aCharacter = Character cr ifTrue: [Character lf] ifFalse: [aCharacter]].
80: ^outputString
81:
82: ------------------------------------------------------------
83:
84: KSU.ShellInterpreter method for 'text utilities'
85:
86: convertCRLF2CR: inputString
87:
88: | inputStream outputStream |
89: inputStream := inputString readStream.
90: outputStream := String new writeStream.
91: [inputStream atEnd] whileFalse:
92: [| aCharacter |
93: aCharacter := inputStream next.
94: aCharacter = Character lf ifFalse: [outputStream nextPut: aCharacter]].
95: inputStream close.
96: outputStream close.
97: ^outputStream contents
98:
99: ------------------------------------------------------------
100:
101: KSU.ShellInterpreter method for 'text utilities'
102:
103: convertCRLF2LF: inputString
104:
105: | inputStream outputStream |
106: inputStream := inputString readStream.
107: outputStream := String new writeStream.
108: [inputStream atEnd] whileFalse:
109: [| aCharacter |
110: aCharacter := inputStream next.
111: aCharacter = Character cr ifFalse: [outputStream nextPut: aCharacter]].
112: inputStream close.
113: outputStream close.
114: ^outputStream contents
115:
116: ------------------------------------------------------------
117:
118: KSU.ShellInterpreter method for 'text utilities'
119:
120: convertLF2CR: inputString
121:
122: | outputString |
123: outputString := inputString
124: collect: [:aCharacter | aCharacter = Character lf ifTrue: [Character cr] ifFalse: [aCharacter]].
125: ^outputString
126:
127: ------------------------------------------------------------
128:
129: KSU.ShellInterpreter method for 'text utilities'
130:
131: convertLF2CRLF: inputString
132:
133: | inputStream outputStream |
134: inputStream := inputString readStream.
135: outputStream := String new writeStream.
136: [inputStream atEnd] whileFalse:
137: [| aCharacter |
138: aCharacter := inputStream next.
139: aCharacter = Character lf ifTrue: [outputStream nextPut: Character cr].
140: outputStream nextPut: aCharacter].
141: inputStream close.
142: outputStream close.
143: ^outputStream contents
144:
145: ------------------------------------------------------------
146:
147: KSU.ShellInterpreter method for 'defaults'
148:
149: defaultDelay
150:
151: ^Delay forMilliseconds: 10
152:
153: ------------------------------------------------------------
154:
155: KSU.ShellInterpreter method for 'evaluating'
156:
157: evaluate: inputString
158:
159: ^self evaluate: inputString withDelay: self defaultDelay
160:
161: ------------------------------------------------------------
162:
163: KSU.ShellInterpreter method for 'evaluating'
164:
165: evaluate: inputString withDelay: aDelay
166:
167: | aStream outputString |
168: aStream := (String new writeStream)
169: nextPutAll: inputString;
170: nextPut: Character cr;
171: yourself.
172: self input: aStream contents.
173: aDelay wait.
174: outputString := self output.
175: ^outputString
176:
177: ------------------------------------------------------------
178:
179: KSU.ShellInterpreter method for 'evaluating'
180:
181: evaluate: inputString withMilliseconds: milliseconds
182:
183: ^self evaluate: inputString withDelay: (Delay forMilliseconds: milliseconds)
184:
185: ------------------------------------------------------------
186:
187: KSU.ShellInterpreter method for 'initialize-release'
188:
189: initialize
190:
191: commandString := nil.
192: interface := nil
193:
194: ------------------------------------------------------------
195:
196: KSU.ShellInterpreter method for 'interface operation'
197:
198: input: inputString
199:
200: self interface input: (self convertCR2LF: inputString)
201:
202: ------------------------------------------------------------
203:
204: KSU.ShellInterpreter method for 'accessing'
205:
206: interface
207:
208: interface
209: ifNil:
210: [| aString |
211: aString := self commandString.
212: aString ifNil: [aString := self class defaultShellCommand].
213: interface := self class defaultInterfaceClass command: aString].
214: ^interface
215:
216: ------------------------------------------------------------
217:
218: KSU.ShellInterpreter method for 'accessing'
219:
220: interface: anInterface
221:
222: interface := anInterface
223:
224: ------------------------------------------------------------
225:
226: KSU.ShellInterpreter method for 'accessing'
227:
228: isActive
229:
230: ^self interface isActive
231:
232: ------------------------------------------------------------
233:
234: KSU.ShellInterpreter method for 'interface operation'
235:
236: output
237:
238: ^self convertLF2CR: self interface output
239:
240: ------------------------------------------------------------
241:
242: KSU.ShellInterpreter method for 'interface operation'
243:
244: outputCompletely
245:
246: ^self convertLF2CR: self interface outputCompletely
247:
248: ================================================================================
249:
250: KSU.ShellInterpreter class
251: instanceVariableNames: ''
252:
253: ================================================================================
254:
255: KSU.ShellInterpreter class method for 'instance creation'
256:
257: command: commandString
258:
259: ^(super new)
260: initialize;
261: commandString: commandString;
262: interface: (self defaultInterfaceClass command: commandString);
263: yourself
264:
265: ------------------------------------------------------------
266:
267: KSU.ShellInterpreter class method for 'utilities'
268:
269: command: commandString evaluate: inputString
270:
271: | anInterpreter outputString |
272: anInterpreter := self command: commandString.
273: anInterpreter input: inputString.
274: anInterpreter closeInputPipe.
275: outputString := anInterpreter outputCompletely.
276: ^outputString
277:
278: ------------------------------------------------------------
279:
280: KSU.ShellInterpreter class method for 'defaults'
281:
282: defaultInterfaceClass
283:
284: ^KSU.ShellInterface
285:
286: ------------------------------------------------------------
287:
288: KSU.ShellInterpreter class method for 'defaults'
289:
290: defaultShellCommand
291:
292: ^'sh'
293:
294: ------------------------------------------------------------
295:
296: KSU.ShellInterpreter class method for 'examples'
297:
298: example1
299: "KSU.ShellInterpreter example1."
300:
301: ^KSU.ShellInterpreter shellScript: 'pwd'
302:
303: ------------------------------------------------------------
304:
305: KSU.ShellInterpreter class method for 'examples'
306:
307: example2
308: "KSU.ShellInterpreter example2."
309:
310: ^KSU.ShellInterpreter command: self defaultShellCommand
311:
312: ------------------------------------------------------------
313:
314: KSU.ShellInterpreter class method for 'examples'
315:
316: example3
317: "KSU.ShellInterpreter example3."
318:
319: ^KSU.ShellInterpreter command: 'bash' evaluate: 'pwd'
320:
321: ------------------------------------------------------------
322:
323: KSU.ShellInterpreter class method for 'examples'
324:
325: example4
326: "KSU.ShellInterpreter example4."
327:
328: ^KSU.ShellInterpreter shellScript: 'pwd;pwd;pwd'
329:
330: ------------------------------------------------------------
331:
332: KSU.ShellInterpreter class method for 'examples'
333:
334: example5
335: "KSU.ShellInterpreter example5."
336:
337: | aStream hundredOfPwd |
338: aStream := String new writeStream.
339: 100 timesRepeat: [aStream nextPutAll: 'pwd;'].
340: hundredOfPwd := aStream contents.
341: ^KSU.ShellInterpreter shellScript: hundredOfPwd
342:
343: ------------------------------------------------------------
344:
345: KSU.ShellInterpreter class method for 'examples'
346:
347: example6
348: "KSU.ShellInterpreter example6."
349:
350: ^KSU.ShellInterpreter shellScript: 'sleep 5'
351:
352: ------------------------------------------------------------
353:
354: KSU.ShellInterpreter class method for 'instance creation'
355:
356: new
357:
358: ^self command: self defaultShellCommand
359:
360: ------------------------------------------------------------
361:
362: KSU.ShellInterpreter class method for 'utilities'
363:
364: shellScript: scriptString
365:
366: ^self command: self defaultShellCommand evaluate: scriptString
367:
368: ================================================================================
This document was generated by KSU.TextDoclet on 2013/02/22 at 01:01:06.