asciimatrix logo

a program that turns your sharp zaurus 5500 linux-handheld into a universal wireless osc-remote-control with ascii-based gui features

© 2005-2006 andreas krach, martin rumori

asciimatrix banner

basically, the asciimatrix turns the zaurus into a kind of "old-scool" ascii terminal, that connects to the "mainframe" via opensondcontrol:

any input to the zaurus, like key events or touchscreen actions are transmitted via osc to the server. the server responds by printing arbitrary blocks of ascii-characters to the screen of the zaurus, also via osc.

in order to make printing to the screen convenient and flexible, the asciimatrix understands a comprehensive set of named arguments to the basic print message. asciimatrix uses a keyword argument parser for osc messages similar to the syntax of lisp keyword argument expressions.

since the asciimatrix supports 24bit color for text and background, it is easy to compose a huge variety of multicolored gui-objects in the style of classic ascii-art.

the asciimatrix runs as a normal program on the original zaurus' qtopia os.

asciimatrix is open source software released under the terms of the gnu general public license.

install asciimatrix on sharp zaurus sl-5500

on the sharp zaurus, go to settings > software and create a server with the url install both packages shown, asciimatrix and liblo.

install asciimatrix in virtual framebuffer

for developing or prototyping ascii guis, asciimatrix can be installed using the virtual framebuffer emulation, which makes the program appear nearly the same as on the zaurus.

install asciimatrix desktop edition

asciimatrix can also be compiled for the linux desktop (x display), refer to the source code distribution for further details.


asciimatrix-0.0.4.tar.gz source tarball

asciimatrix_0.0.4_arm.ipk zaurus package

liblo_0.23.0_arm.ipk zaurus package of liblo 0.23 (

am-abs-0.0.5.tar.gz asciimatrix abstractions for pd

osc_protocol.txt asciimatrix osc interface description

lo_parse_keyargs.h lo_parse_keyargs.c generic keyword argument parser for liblo, could be easily used outside asciimatrix (see oscreceive.cpp in the source distribution of asciimatrix for an example how to use it)

asciimatrix-0.0.4_x86_precompiled_for_opt.tar.gz binary distribution for the virtual framebuffer in conjunction with qtopia-free (see below)

qtopia-free-1.5.0-1.i386.rpm qtopia-free_1.5.0-2_i386.deb qtopia-free distribution for x86. find the source code at start script for qpe in the virtual framebuffer

asciimatrix osc interface

/am/print : print to screen (or simply: "/am" is also working)

understands keyword arguments: (defaults in {})

:cmd print, del, delblock, fill, mark, unmark {print}
:s string to be printed/filled/deleted {""}
:l startline {1}
:c startcolumn {1}
:ln number of lines {until last}
:cn number of columns {until last}
:subst substitute by char, rand (random), space (space) {no subst}
:wrap currently only no, yes (0, 1) [no, hard, soft (0, 1, 2)] {0}
:fill start from beginning if :s is done no, yes (0, 1) {0}
:scroll scroll if outside screen no, yes (0, 1) {0}
:color text color (0-16) (r, g, b[, a]) {1 = 255 255 255} (white)
:back background color (0-16) (r, g, b[, a]) {0 = 0 0 0} (black)
:mark no, yes (0, 1) swap color/back semantics {0}
:delmode no, lines, allines, block, entblock (0, 1, 3, 4, 12) {no}

convenient commands, which alter default values (if not overridden):

:cmd del - enables :subst ' ' :wrap hard
:cmd delblock - enables :subst ' ' :delmode entblock
:cmd fill - enables :fill yes :wrap hard
:cmd mark - enables :mark :fill yes
:cmd unmark - enables :fill yes
:cmd scroll - enables :scroll, :l = last, :cn = 1

/am/scroll : scroll screen

understands keyword arguments: (defaults in {})

:ln scroll ln lines {1}
:cyclic don't delete lines but append to other end no, yes (0, 1) {no}
:up scroll up instead of down no, yes (0, 1) {no}

/am/config : configure asciimatrix

understands keyword arguments: (defaults in {})

:server send osc messages to server {leave as is}
:serverport send to port on :server {leave as is}
(:listenport listen to port {leave as is}) <- currently not working
:oscprefix send all osc-commands prepended by /oscprefix/ {don't change}

other commands understood:

/am/getfontsizes request availabe font sizes list
(yields strange results at the moment)
/am/setfontsize <points> set font size in points
/am/getscreenprops request current screen properties
/am/openconfig open config dialog in asciimatrix
/am/quit quit asciimatrix

asciimatrix sends:

/am/screenprops <x> <y> <l> <c> <xc> <yc> x-pixels, y-pixels, lines, columns, x-pixels per character, y-pixels per character sent on startup and after sending /am/setfontsize and /am/getscreenprops
/am/fontsizes <points> ... availabe fixed font sizes in points
/am/mouse/mov <x> <y> <l> <c> mouse coords (moved)
/am/mouse/prs <x> <y> <l> <c> mouse coords (pressed)
/am/mouse/rel <x> <y> <l> <c> mouse coords (released)
/am/mouse/dbc <x> <y> <l> <c> mouse coords (doubleclicked)
/am/key/prs <keycode> <ascii> key pressed (keycode, ascii if codable)
/am/key/rel <keycode> <ascii> key released (keycode, ascii if codable)