Devices
Return to Plugins

  • window Windows standard MDI type interface. Supports multiple client windows which can be tiled, uses ctrl-tab to switch between sub-windows. alt-v paste, no mark/copy (to be done - eventually). Device does line buffering (terminated with \n).
  • psicon Windows/Linux gui type interface. Limited functionality for multiple windows. Uses SDL(patched) as it's base interface, giving a graphical interface to X, framebuffer, SVGALib(untested), etc... Under windows, uses the native windowing environment, under linux, it is constrained to one display surface, within which it can open multiple client displays.
  • console Text command prompt-like console input. On NT family systems, this can support up to 9999 lines of history, uses default system copy/cut/paste mechanisms. Device does line buffering (terminated with \n).
  • cursecon On Unix type systems (Linux/FreeBSD) this is a console environment which uses curses to display active information. Supports pg-up/pg-down type scrollback standard X terminal type copy/paste. Can be in line mode or direct mode. Line mode implies a command line seperate from the result data. Direct mode implies entering commands in place on the display. Device does line buffering (terminated with \n).
  • file Input from a file. Opening the device required device specific parameter filename.

    Optional paramaters:

  • __input opens the file for read.
  • __output opens the file for writing - sets the position at the end of the file, and takes no input from the file, all output is appended to the end of the file.
  • If __input only then the file is opened for reading only, and positioned at the beginning of the file.
  • If __output only, then the file is created for writing. (Any prior file content is destroyed).
  • If __input and __output__ then the file is opened for read or write, and the current position is set at the end of the file (for append).
  • All tokens after the device name (and after optional __input parameter) are taken as the file name. Device input is in line format, with terminating \n. If there are \r characters they are also present.

    Options available after open:

  • close - When reading the file, and the end of file is encountered, the device automatically closes. Any filters also open on the file are closed until the next 'data source' type device.
  • follow - When reading the file, when the end of the file is encountered, wait for more data, at which time, read and return the next data.
  • relay - Data from devices further down the open device list from this is relayed as input.  Typically this would be used when there's a file for input open, and then this file is opened for output. Data input from the file beyond would be relayed in, but of course any data outbound would be written into the open output file.
  • tcp Input from a tcp socket device. Parameter required is the address to connect to, in 'standard' IP:PORT format. IP may be a name or numeric. Port may be a service name or numeric. Input is a block of data, up to 4096 characters. No formatting is done at this level.
  • tcpserver Opens a port for listening. Parameter requiried is the port number to listen on. This may also have the IP specified, if the machine is mutli-homed. Input is a block of data up to 4096 characters, no formatting is done.
  • udp Recieve and transmit on a specified UDP port. (mostly untested). Input is the message block, prefixed by special binary data containing the IP and PORT of the sender.
  • udpserver Recieve and transmit on a specified UDP port. (mostly untested). Input is the message block, prefixed by special binary data containing the IP and PORT of the sender.
  • system A quite abstract device, but is used to launch system commands. Also tied directly to the '!' command. Input is whatever is available from the system up to 4096 characters. Could be used to host a command shell. Certain compatibility issues between Win9x and NT family cause this command to not work right. Currently seems to work under Linux.

    /open system dir # results in the current directory listing


  • Filters

  • token Tokenizes a stream into pure tokens. Lines are gathered, and terminated with special EOL tokens. Command processing requires that input be at least tokenized.
  • telnet Handles special telnet IAC codes, results mostly in WON'T responces, and provides information to satisfy some of the more strict telnet servers. Removes telnet IAC codes from input stream, otherwise provides no formatting.
  • split splits the datapath to another object. Can be used to monitor other processes processing data, or to run multiple combinations of events from the same stream.
  • Optional parameters
  • both - splits inbound and outbound data to destination.
  • inbound - splits only the inbound data to the destination.
  • outbound - splits only outbound data to the destination.
  • outtoin - outbound data becomes inbound on the destination.
  • intoout - inbound data becomes outbound on the destination.
  • Required parameter: [object] an object currently visible from the current object. the object specified must have at least one 'merge' filter to accept the split. The data datapath channel is searched and then the command datapath.
  • merge Accepts information split from another object's datastream via the split filter.
  • splice Gathers all tokens on a line, into one line, with \r\n termination.
  • Optional parameters
  • inbound - data which is inbound is spliced.
  • outbound - data which is outbound is spliced.
  • sink Any outbound data is consumed, relays all input data.
  • nil Does nothing. Input relayed, output relayed. Merely a skeleton for other filters.
  • debug Dumps extended information about data being relayed. Optional paramters: inbound - dumps inbound data, outbound - dumps outbound data.
  • binary Dumps binary of data being relayed. Optional paramters: inbound - dumps inbound data, outbound - dumps outbound data.
  • Optional Parameters
  • inbound - data inbound through the filter will be translated to a binary dump.
  • outbound - data outbound through the filter will be translate to a binary dump.
  • log - Data which is converted to a binary dump will be shown in dekware.log, and will not be output to the next device in line.
  • bash Handles bash-like parsing/tokenizing. Gathers lines from seperate segments. Formatting of data allows passing of typically unrepresentable characters.
  • \x## is a hex character,
  • \0ooo is an octal representation of a character
  • \. is a NIL character, generates no data, but forces a seperation between tokens,
  • \$ literal $
  • \" literal quote
  • \' literal single quote
  • \\ literal back slash
  • \  a literal space... (that's backslash-blank)
  • \; literal ; otherwise ; seperates commands into seperate lines
  • \n newline character
  • \t tab character
  • " " or ' ' - double and single quotes will collect all data between them into a single token. The quotes surrounding the data are lost.
  • $variable resolves the variable using standard methods, and puts that value directly in. This allows the substitution to be done at the command-entry level instead of waiting until it gets to the object-core.
  • # begins a comment until the end of the line. All information until the end of line (a newline character) is ignored.
  • Optional Parameters
  • noblank - On input there will be no blank lines arriving. Every line will have at least some non blank data.
  • ansi
  • Optional Parameters
  • inbound - inbound data is processed for ansi escape sequences.
  • outbound - outbound data is processed for ansi escape sequences.
  • encode - instead of decoding ansi escape sequences, the data is encoded to ansi codes...  This is useful for setting up a telnet server to which data would be echoed as converted escape sequences.  If encode is not specified default method is decode.  Encode is specified seperatly after inbound and outbound to select encoding on each path.
  • __keepnewline - No effect... supposedly this would keep the end of line data...
  • Ansi codes are parsed out ( <esc>[#;...l ) - escape, bracket, number parameters seperated by semi-colons, followed by a single character. These sequences are removed from the input stream. All other codes are irrelavent and therefore are ignored.
  • <esc>[0m - reset to default colors
  • <esc>[1m - bold/bright foreground
  • <esc>[30m - black foreground
  • <esc>[31m - red foreground
  • <esc>[32m - green foreground
  • <esc>[33m - yellow foreground
  • <esc>[34m - blue foreground
  • <esc>[35m - magenta foreground
  • <esc>[36m - cyan foreground
  • <esc>[37m - grey foreground
  • <esc>[40m - black background
  • <esc>[41m - red background
  • <esc>[42m - green background
  • <esc>[43m - yellow background
  • <esc>[44m - blue background
  • <esc>[45m - magenta background
  • <esc>[46m - cyan background
  • <esc>[47m - grey background
  • <backspace> - encoded into an internal cursor position -1.
  • <carriage return> - encoded into an internal cursor position home line.
  • <new line> - encoded into an internal cursor position +1 line.
  • <esc>s or <esc>7 - save current cursor position
  • <esc>8 - restore saved cursor position
  • <esc>[#b - repeat last character # times
  • <esc>[#;#r - Set scroll region on display
  • <esc>[6n - Return current cursor position with <esc>[#;#R.
  • <esc>[#;#H or <esc>[#;#f - if #;# are both present, use that as the row;col. If both are missing, treat as a home-cursor command.
  • <esc>[#A - if # present go up that many lines. Else go up 1 line.
  • <esc>[#B - if # present go down that many lines. Else go down 1 line.
  • <esc>[#C - if # present go right that many columns. Else go right 1 column.
  • <esc>[#D - if # present go left that many columns. Else go left 1 column.
  • <esc>[#d - Set current line. If # is not specifed go to top line.
  • <esc>[#G - Set current column. If # is not specifed go to first(left) column line.
  • <esc>[#J - if # is not specified or is 0, Clear to end of page. If # is 1 Clear to start of page. If # is 2 Clear page (entire page, including data scrolled off)
  • <esc>[#P - Delete # characters. If # is not specified delete 1.
  • <esc>[#K - if # is not specified or is 0, Clear to end of line. If # is 1 Clear to start of line. If # is 2 Clear current line.


  • Some operations like set scroll region do not yet work correctly. Most everything else does seem to work.


  • On windows, using the runwin.exe, to create another object one would do /create object
    /wake object
    /tell object /command interface window
    /tell object /command parser bash
    'object' can be replace with any object name. This creates an object named 'object', wakes it up (allows it to process commands) tells it to open a window as its command input, and then tells it to open the filter 'bash' on its command input. If the object is to be blindly controlled, one does not need to give it any command datapath devices, can still /tell commands to it.