Index: dart/frog/lib/node/node.dart |
diff --git a/dart/frog/lib/node/node.dart b/dart/frog/lib/node/node.dart |
deleted file mode 100644 |
index 621b5fbacc7e5e39a6f73846a0b8c048b6e9200a..0000000000000000000000000000000000000000 |
--- a/dart/frog/lib/node/node.dart |
+++ /dev/null |
@@ -1,638 +0,0 @@ |
-// Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file |
-// for details. All rights reserved. Use of this source code is governed by a |
-// BSD-style license that can be found in the LICENSE file. |
- |
-/** |
- * A collection of helper io functions implemented using node.js. |
- * |
- * Idea is to clone the node.js API as closely as possible while adding types. |
- * Dart libraries on top of this will experiment with different APIs. |
- */ |
-#library('node'); |
- |
-// The sandbox needs to import the constructor functions for all the non-hidden native types we use. |
- |
-var createSandbox() native |
- """return {'require': require, 'process': process, 'console': console, |
- 'Buffer' : Buffer, |
- 'setTimeout\$': this.setTimeout, 'clearTimeout': clearTimeout};"""; |
- |
-typedef void RequestListener(ServerRequest request, ServerResponse response); |
- |
-// TODO(nweiz): properly title-case these class names |
- |
-class http native "require('http')" { |
- static Server createServer(RequestListener listener) native; |
-} |
- |
-class Server native "http.Server" { |
- void listen(int port, [String hostname, Function callback]) native; |
-} |
- |
-class ServerRequest native "http.IncomingMessage" { |
- final String method; |
- final String url; |
- final Map<String, String> headers; |
- final String httpVersion; |
- |
- void setEncoding([String encoding]) {} |
-} |
- |
-class ServerResponse native "http.ServerResponse" { |
- int statusCode; |
- |
- void setHeader(String name, String value) native; |
- |
- String getHeader(String name) native; |
- |
- void removeHeader(String name) native; |
- |
- void write(String data, [String encoding = 'utf8']) native; |
- |
- void end([String data, String encoding = 'utf8']) native; |
-} |
- |
-class Console native "Console" { |
- // TODO(jimhug): Map node.js's ability to take multiple args to what? |
- void log(String text) native; |
- void info(String text) native; |
- void warn(String text) native; |
- void error(String text) native; |
- void dir(Object obj) native; |
- void time(String label) native; |
- void timeEnd(String label) native; |
- void trace() native; |
- void assert(bool value, [String message]) native; |
-} |
- |
-Console get console() |
- native "return console;"; |
- |
-/** |
- Implement as much of EventEmitter polymorphically as is possible, |
- given that frogsh function objects do not interoperate perfectly with |
- JavaScript function objects |
- */ |
- |
-// typedef EventListener([arg1, arg2, arg3]); |
- |
-interface EventEmitter { |
-// void addListener(String event, EventListener listener); |
-// void on(String event, EventListener listener); |
-// void once(String event, EventListener listener); |
-// void removeListener(String event, EventListener listener); |
-// List<EventListener> listeners(String event); |
- void removeAllListeners(String event); |
- void setMaxListeners(num n); |
- // TODO(jackpal): use rest arguments |
- void emit(String event, [var arg1, var arg2, var arg3]); |
-} |
- |
-typedef void ProcessExitListener(); |
-typedef void ProcessUncaughtExceptionListener(Exception err); |
-typedef void ProcessSignalListener(); |
- |
-class Process implements EventEmitter native "Process" { |
- var _process; |
- |
- // Note: This is not an exhaustive list of signals. Check with your |
- // OS documentation for sigaction to see which signals are |
- // available in your OS. |
- |
- final SIGHUP='SIGHUP'; |
- final SIGINT='SIGINT'; |
- final SIGQUIT='SIGQUIT'; |
- final SIGILL='SIGILL'; |
- final SIGTRAP='SIGTRAP'; |
- final SIGABRT='SIGABRT'; |
- final SIGEMT='SIGEMT'; |
- final SIGFPE='SIGFPE'; |
- final SIGKILL='SIGKILL'; |
- final SIGBUS='SIGBUS'; |
- final SIGSEGV='SIGSEGV'; |
- final SIGSYS='SIGSYS'; |
- final SIGPIPE='SIGPIPE'; |
- final SIGALRM='SIGALRM'; |
- final SIGTERM='SIGTERM'; |
- final SIGURG='SIGURG'; |
- final SIGSTOP='SIGSTOP'; |
- final SIGTSTP='SIGTSTP'; |
- final SIGCONT='SIGCONT'; |
- final SIGCHLD='SIGCHLD'; |
- final SIGTTIN='SIGTTIN'; |
- final SIGTTOU='SIGTTOU'; |
- final SIGIO='SIGIO'; |
- final SIGXCPU='SIGXCPU'; |
- final SIGXFSZ='SIGXFSZ'; |
- final SIGVTALRM='SIGVTALRM'; |
- final SIGPROF='SIGPROF'; |
- final SIGWINCH='SIGWINCH'; |
- final SIGINFO='SIGINFO'; |
- final SIGUSR1='SIGUSR1'; |
- final SIGUSR2='SIGUSR2'; |
- |
- Process(var this._process); |
- |
- // Implement EventEmitter |
- void removeAllListeners(String event) |
- native "this._process.removeAllListeners(event);"; |
- void setMaxListeners(num n) |
- native "this._process.setMaxListeners(n);"; |
- void emit(String event, [var arg1, var arg2, var arg3]) |
- native "this._process.emit(event, arg1, arg2, arg3)"; |
- |
- // Exit event |
- void emitExit() |
- native "this._process.emit('exit');"; |
- void addListenerExit(ProcessExitListener listener) |
- native "this._process.addListener('exit', listener);"; |
- void onExit(ProcessExitListener listener) |
- native "this._process.on('exit', listener);"; |
- void onceExit(ProcessExitListener listener) |
- native "this._process.once('exit', listener);"; |
- void removeListenerExit(ProcessExitListener listener) |
- native "this._process.removeListener('exit', listener);"; |
- List<ProcessExitListener> listenersExit() |
- native "return this._process.listeners('exit');"; |
- |
- // UncaughtException event |
- void emitUncaughtException(Exception err) |
- native "this._process.emit('uncaughtException', err);"; |
- void addListenerUncaughtException(ProcessUncaughtExceptionListener listener) |
- native "this._process.addListener('uncaughtException', listener);"; |
- void onUncaughtException(ProcessUncaughtExceptionListener listener) |
- native "this._process.on('uncaughtException', listener);"; |
- void onceUncaughtException(ProcessUncaughtExceptionListener listener) |
- native "this._process.once('uncaughtException', listener);"; |
- void removeListenerUncaughtException( |
- ProcessUncaughtExceptionListener listener) |
- native "this._process.removeListener('uncaughtException', listener);"; |
- List<ProcessUncaughtExceptionListener> listenersUncaughtException() |
- native "return this._process.listeners('uncaughtException');"; |
- |
- // Signal events |
- void emitSignal(String signal) |
- native "this._process.emit(signal);"; |
- void addListenerSignal(String signal, ProcessSignalListener listener) |
- native "this._process.addListener(signal, listener);"; |
- void onSignal(String signal, ProcessSignalListener listener) |
- native "this._process.on(signal, listener);"; |
- void onceSignal(String signal, ProcessSignalListener listener) |
- native "this._process.once(signal, listener);"; |
- void removeListenerSignal(String signal, ProcessSignalListener listener) |
- native "this._process.removeListener(signal, listener);"; |
- List<ProcessSignalListener> listenersSignal(String signal) |
- native "return this._process.listeners(signal);"; |
- |
- WritableStream get stdout() |
- native "return this._process.stdout;"; |
- WritableStream get stderr() |
- native "return this._process.stderr;"; |
- ReadableStream get stdin() |
- native "return this._process.stdin;"; |
- |
- List<String> get argv() |
- native "return this._process.argv;"; |
- void set argv(List<String> value) |
- native "this._process.argv = value;"; |
- String get execPath() |
- native "return this._process.execPath;"; |
- String chdir(String directory) |
- native "this._process.chdir(directory);"; |
- |
- String cwd() |
- native "return this._process.cwd();"; |
- |
- EnvMap get env() => new EnvMap(_process); |
- |
- void exit([int code = 0]) |
- native "this._process.exit(code);"; |
- int getgid() |
- native "return this._process.getgid();"; |
- void setgid(var gid_or_groupname) |
- native "this._process.setgid(uid_or_groupname);"; |
- int getuid() |
- native "return this._process.getuid();"; |
- void setuid(var uid_or_username) |
- native "this._process.setuid(uid_or_groupname);"; |
- String get version() |
- native "return this._process.version;"; |
- String get installPrefix() |
- native "return this._process.installPrefix;"; |
- void kill(int pid, [String signal=SIGTERM]) |
- native "this._process.kill(pid, signal);"; |
- int get pid() |
- native "return this._process.pid;"; |
- String get title() |
- native "return this._process.title;"; |
- String get platform() |
- native "return this._process.platform;"; |
- |
- // TODO(jackpal) implement Map memoryUsage() native; |
- void nextTick(Function callback) |
- native "return this._process.nextTick(callback);"; |
- int umask([int mask]) |
- native "return this._process.umask(mask);"; |
-} |
- |
-var get _process() |
- native "return process;"; |
- |
-Process get process() { |
- return new Process(_process); |
-} |
- |
-class EnvMap { |
- var _process; |
- const EnvMap(this._process); |
- operator [](key) native "return this._process.env[key];"; |
- |
-} |
- |
-typedef void UtilPumpCallback(var error); |
- |
-class util native "require('util')" { |
- static void debug(String string) native; |
- static void log(String string) native; |
- static void inspect(var object, [bool showHidden=false, num depth=2]) native; |
- static pump(ReadableStream readableStream, WritableStream writeableStream, |
- [UtilPumpCallback callback]) native; |
- // the method inherits(a,b) doesn't make sense for Dart |
-} |
- |
-// Object is either a Buffer or a String, depending upon whether setEncoding has been called. |
-typedef void ReadableStreamDataListener(var object); |
-typedef void ReadableStreamEndListener(); |
-typedef void ReadableStreamErrorListener(Object exception); |
-typedef void ReadableStreamCloseListener(); |
- |
-class ReadableStream implements EventEmitter native "*ReadStream" { |
- // EventEmitter |
- void removeAllListeners(String event) native; |
- void setMaxListeners(num n) native; |
- void emit(String event, [var arg1, var arg2, var arg3]) native; |
- |
- // Data event |
- void emitData(var data) |
- native "this.emit('data', data);"; |
- void addListenerData(ReadableStreamDataListener listener) |
- native "this.addListener('data', listener);"; |
- void onData(ReadableStreamDataListener listener) |
- native "this.on('data', listener);"; |
- void onceData(ReadableStreamDataListener listener) |
- native "this.once('data', listener);"; |
- void removeListenerData(ReadableStreamDataListener listener) |
- native "this.removeListener('data', listener);"; |
- List<ReadableStreamDataListener> listenersData() |
- native "return this._process.listeners('data');"; |
- |
- // End event |
- void emitEnd() |
- native "this.emit('end');"; |
- void addListenerEnd(ReadableStreamEndListener listener) |
- native "this.addListener('end', listener);"; |
- void onEnd(ReadableStreamEndListener listener) |
- native "this.on('end', listener);"; |
- void onceEnd(ReadableStreamEndListener listener) |
- native "this.once('end', listener);"; |
- void removeListenerEnd(ReadableStreamEndListener listener) |
- native "this.removeListener('end', listener);"; |
- List<ReadableStreamEndListener> listenersEnd() |
- native "return this._process.listeners('end');"; |
- |
- // Error event |
- void emitError(Object exception) |
- native "this.emit('error', exception);"; |
- void addListenerError(ReadableStreamErrorListener listener) |
- native "this.addListener('error', listener);"; |
- void onError(ReadableStreamErrorListener listener) |
- native "this.on('error', listener);"; |
- void onceError(ReadableStreamErrorListener listener) |
- native "this.once('error', listener);"; |
- void removeListenerError(ReadableStreamErrorListener listener) |
- native "this.removeListener('error', listener);"; |
- List<ReadableStreamErrorListener> listenersError() |
- native "return this._process.listeners('error');"; |
- |
- // Close event |
- void emitClose() |
- native "this.emit('close');"; |
- void addListenerClose(ReadableStreamCloseListener listener) |
- native "this.addListener('close', listener);"; |
- void onClose(ReadableStreamCloseListener listener) |
- native "this.on('close', listener);"; |
- void onceClose(ReadableStreamCloseListener listener) |
- native "this.once('close', listener);"; |
- void removeListenerClose(ReadableStreamCloseListener listener) |
- native "this.removeListener('close', listener);"; |
- List<ReadableStreamCloseListener> listenersClose() |
- native "return this._process.listeners('close');"; |
- |
- bool readable; |
- void setEncoding(String encoding) native; |
- void pause() native; |
- void resume() native; |
- void destroy() native; |
- void destroySoon() native; |
- void pipe(WritableStream destination, [bool end=true]) |
- native "this.pipe(destination, {'end': end});"; |
-} |
- |
-typedef void WritableStreamDrainListener(); |
-typedef void WritableStreamErrorListener(Object exception); |
-typedef void WritableStreamCloseListener(); |
-typedef void WritableStreamPipeListener(ReadableStream src); |
- |
-class WritableStream implements EventEmitter native "*WriteStream" { |
- // EventEmitter |
- void removeAllListeners(String event) native "this._writeStream.removeAllListeners(event);"; |
- void setMaxListeners(num n) native; |
- void emit(String event, [var arg1, var arg2, var arg3]) native; |
- |
- // Drain event |
- void emitDrain() |
- native "this.emit('drain');"; |
- void addListenerDrain(WritableStreamDrainListener listener) |
- native "this.addListener('drain', listener);"; |
- void onDrain(WritableStreamDrainListener listener) |
- native "this.on('drain', listener);"; |
- void onceDrain(WritableStreamDrainListener listener) |
- native "this.once('drain', listener);"; |
- void removeListenerDrain(WritableStreamDrainListener listener) |
- native "this.removeListener('drain', listener);"; |
- List<WritableStreamDrainListener> listenersDrain() |
- native "return this._process.listeners('drain');"; |
- |
- // Error event |
- void emitError(Object exception) |
- native "this.emit('error', exception);"; |
- void addListenerError(WritableStreamErrorListener listener) |
- native "this.addListener('error', listener);"; |
- void onError(WritableStreamErrorListener listener) |
- native "this.on('error', listener);"; |
- void onceError(WritableStreamErrorListener listener) |
- native "this.once('error', listener);"; |
- void removeListenerError(WritableStreamErrorListener listener) |
- native "this.removeListener('error', listener);"; |
- List<WritableStreamErrorListener> listenersError() |
- native "return this._process.listeners('error');"; |
- |
- // Close event |
- void emitClose() |
- native "this.emit('close');"; |
- void addListenerClose(WritableStreamCloseListener listener) |
- native "this.addListener('close', listener);"; |
- void onClose(WritableStreamCloseListener listener) |
- native "this.on('close', listener);"; |
- void onceClose(WritableStreamCloseListener listener) |
- native "this.once('close', listener);"; |
- void removeListenerClose(WritableStreamCloseListener listener) |
- native "this.removeListener('close', listener);"; |
- List<WritableStreamCloseListener> listenersClose() |
- native "return this._process.listeners('close');"; |
- |
- // Pipe event |
- void emitPipe(ReadableStream src) |
- native "this.emit('pipe', src);"; |
- void addListenerPipe(WritableStreamPipeListener listener) |
- native "this.addListener('pipe', listener);"; |
- void onPipe(WritableStreamPipeListener listener) |
- native "this.on('pipe', listener);"; |
- void oncePipe(WritableStreamPipeListener listener) |
- native "this.once('pipe', listener);"; |
- void removeListenerPipe(WritableStreamPipeListener listener) |
- native "this.removeListener('pipe', listener);"; |
- List<WritableStreamPipeListener> listenersPipe() |
- native "return this._process.listeners('pipe');"; |
- |
- bool writable; |
- bool write(String string, [String encoding='utf8', int fd]) native; |
- bool writeBuffer(Buffer buffer) native; |
- void end([String string, String encoding='utf8']) native; |
- void endBuffer(Buffer buffer) native "this.end(buffer);"; |
- void destroy() native; |
- void destroySoon() native; |
-} |
- |
-class vm native "require('vm')" { |
- static void runInThisContext(String code, [String filename]) native; |
- static void runInNewContext(String code, [var sandbox, String filename]) |
- native; |
- static Script createScript(String code, [String filename]) native; |
- static Context createContext([sandbox]) native; |
- static runInContext(String code, Context context, [String filename]) native; |
-} |
- |
-interface Context {} |
- |
-class Script native "vm.Script" { |
- void runInThisContext() native; |
- void runInNewContext([Map sandbox]) native; |
-} |
- |
-class fs native "require('fs')" { |
- static void writeFileSync(String outfile, String text) native; |
- |
- static String readFileSync(String filename, [String encoding = 'utf8']) |
- native; |
- |
- static String realpathSync(String path) native; |
- |
- static void mkdirSync(String path, [num mode = 511 /* 0777 octal */]) native; |
- static List<String> readdirSync(String path) native; |
- static void rmdirSync(String path) native; |
- static Stats statSync(String path) native; |
- static void unlinkSync(String path) native; |
- |
- static void writeSync(int fd, String text) native; |
- static int openSync(String path, String flags, |
- [num mode = 438] /* 0666 octal */) native; |
- static void closeSync(int fd) native; |
-} |
- |
-class Stats native "fs.Stats" { |
- bool isFile() native; |
- bool isDirectory() native; |
- bool isBlockDevice() native; |
- bool isCharacterDevice() native; |
- bool isSymbolicLink() native; |
- bool isFIFO() native; |
- bool isSocket() native; |
- |
- // TODO(rnystrom): There are also the other fields we can add here if needed. |
- // See: http://nodejs.org/docs/v0.6.1/api/fs.html#fs.Stats. |
-} |
- |
-class path native "require('path')" { |
- static bool existsSync(String filename) native; |
- static String dirname(String path) native; |
- static String basename(String path) native; |
- static String extname(String path) native; |
- static String normalize(String path) native; |
- // TODO(jimhug): Get the right signatures for normalizeArray and join |
-} |
- |
-class Readline native "require('readline')" { |
- static ReadlineInterface createInterface(input, output) native; |
-} |
- |
-class ReadlineInterface native "Readline.Interface" { |
- void setPrompt(String prompt, [int length]) native; |
- void prompt() native; |
- void on(String event, Function callback) native; |
-} |
- |
-interface TimeoutId {} |
- |
-TimeoutId setTimeout(Function callback, num delay, [arg]) native; |
-clearTimeout(TimeoutId id) native; |
- |
-typedef void ChildProcessExitListener(int code, String signal); |
- |
-class ChildProcess implements EventEmitter native "ChildProcess" { |
- var _childprocess; |
- |
- ChildProcess(this._childprocess); |
- |
- // EventEmitter |
- void removeAllListeners(String event) |
- native "this._childprocess.removeAllListeners(event);"; |
- void setMaxListeners(num n) |
- native "this._childprocess.setMaxListeners(n);"; |
- void emit(String event, [var arg1, var arg2, var arg3]) |
- native "this._childprocess.emit(event, arg1, arg2, arg3);"; |
- |
- // 'exit' event |
- void addListenerExit(ChildProcessExitListener listener) |
- native "this._childprocess.addListener('exit', listener);"; |
- void onExit(ChildProcessExitListener listener) |
- native "this._childprocess.on('exit', listener);"; |
- void onceExit(ChildProcessExitListener listener) |
- native "this._childprocess.once('exit', listener);"; |
- void removeListenerExit(ChildProcessExitListener listener) |
- native "this._childprocess.removeListener('exit', listener);"; |
- List<ChildProcessExitListener> listenersExit() |
- native "return this._childprocess.listeners('exit');"; |
- |
- WritableStream get stdin() |
- native "return this._childprocess.stdin;"; |
- |
- ReadableStream get stdout() |
- native "return this._childprocess.stdout;"; |
- ReadableStream get stderr() |
- native "return this._childprocess.stderr;"; |
- int get pid() |
- native "return this._childprocess.pid;"; |
-} |
- |
-typedef void Child_processCallback(Error error, String stdout, String stderr); |
- |
-class Child_process native { |
- var _cp; |
- |
- Child_process() { |
- _cp = _get_child_process(); |
- } |
- |
- // TODOO(jackpal): translate options into a Javascript dictionary |
- ChildProcess spawn(String command, [List<String> args, |
- Map<String, Object> options]){ |
- return new ChildProcess(_spawn(_cp, command, args)); |
- } |
- |
- // TODOO(jackpal): translate options into a Javascript dictionary |
- ChildProcess exec(String command, Child_processCallback callback, |
- [Map<String, Object> options]) { |
- // Note the argument order to exec is different than to _exec, |
- // because Dart can't have optional arguments in the middle of |
- // an argument list. |
- return new ChildProcess(_exec(_cp, command, options, callback)); |
- } |
- |
- static var _spawn(var cp, String command, List<String> args) |
- native "return cp.spawn(command, args);"; |
- static var _exec(var cp, String command, Map<String, Object> options, |
- Child_processCallback callback) |
- native "return cp.exec(command, options, callback);"; |
- |
- static var _get_child_process() |
- native "return require('child_process');"; |
-} |
- |
-var get child_process() { |
- return new Child_process(); |
-} |
- |
-class Buffer native "Buffer" { |
- Buffer(int size) native; |
- Buffer.fromSize(int size) |
- native "return new Buffer(size);"; |
- Buffer.fromList(List<int> list) |
- native "return new Buffer(list);"; |
- Buffer.fromString(String string, [String encoding='utf8']) |
- native "return new Buffer(string, encoding);"; |
- // the default length is buffer.length-offset |
- int write(String string, int offset, int length, [String encoding='utf8']) |
- native; |
- static int get charsWritten() |
- native "return Buffer._charsWritten;"; |
- String toString(String encoding, int start, int end) native; |
- int operator[](int index) |
- native "return this[index];"; |
- int operator[]=(int index, int value) |
- native "this[index] = value; return value;"; |
- static bool isBuffer(obj) native; |
- static int byteLength(String string, [String encoding='utf8']) native; |
- int length; |
- void copy(Buffer targetBuffer, int targetStart, int sourceStart, int sourceEnd) native; |
- Buffer slice(int start, int end) native; |
- |
- int readUInt8(int offset, [bool noAssert=false]) native; |
- int readUInt16LE(int offset, [bool noAssert=false]) native; |
- int readUInt16BE(int offset, [bool noAssert=false]) native; |
- int readUInt32LE(int offset, [bool noAssert=false]) native; |
- int readUInt32BE(int offset, [bool noAssert=false]) native; |
- |
- int readInt8(int offset, [bool noAssert=false]) native; |
- int readInt16LE(int offset, [bool noAssert=false]) native; |
- int readInt16BE(int offset, [bool noAssert=false]) native; |
- int readInt32LE(int offset, [bool noAssert=false]) native; |
- int readInt32BE(int offset, [bool noAssert=false]) native; |
- |
- double readFloatLE(int offset, [bool noAssert=false]) native; |
- double readFloatBE(int offset, [bool noAssert=false]) native; |
- double readDoubleLE(int offset, [bool noAssert=false]) native; |
- double readDoubleBE(int offset, [bool noAssert=false]) native; |
- |
- void writeUInt8(int value, int offset, [bool noAssert=false]) native; |
- void writeUInt16LE(int value, int offset, [bool noAssert=false]) native; |
- void writeUInt16BE(int value, int offset, [bool noAssert=false]) native; |
- void writeUInt32LE(int value, int offset, [bool noAssert=false]) native; |
- void writeUInt32BE(int value, int offset, [bool noAssert=false]) native; |
- |
- void writeInt8(int value, int offset, [bool noAssert=false]) native; |
- void writeInt16LE(int value, int offset, [bool noAssert=false]) native; |
- void writeInt16BE(int value, int offset, [bool noAssert=false]) native; |
- void writeInt32LE(int value, int offset, [bool noAssert=false]) native; |
- void writeInt32BE(int value, int offset, [bool noAssert=false]) native; |
- |
- void writeFloatLE(double value, int offset, [bool noAssert=false]) native; |
- void writeFloatBE(double value, int offset, [bool noAssert=false]) native; |
- void writeDoubleLE(double value, int offset, [bool noAssert=false]) native; |
- void writeDoubleBE(double value, int offset, [bool noAssert=false]) native; |
- |
- // end defaults to buffer.length |
- void fill(int value, int offset, int end) native; |
- |
- static int INSPECT_MAX_BYTES; |
-} |
- |
-class Error native "Error" { |
- var stack; |
- var arguments; |
- var type; |
- String message; |
- bool killed; |
- int code; |
- String signal; |
-} |