---
name: "App::Asciio"
section: "3pm"
platform: "linux"
package: "asciio"
version: "1.51.3-1"
release: "Debian 10 (Buster)"
platforms: ["linux"]
url: "https://new.carta.tech/App::Asciio"
---

# App::Asciio(3pm)

Plain ASCII diagram

## NAME

App::Asciio - Plain ASCII diagram

```
                          |     |             |       |
                  |       |     |      |      |       |
                  |       |     |      |      |       |
                  v       |     v      |      v       |
                          v            v              v
                 _____                           _____
                /\  _  \                        /\  __ \
                \ \ \_\ \    ___     ___   _   _\ \ \ \ \
        ----->   \ \  __ \  /  __\  / ___\/\ \/\ \ \ \ \ \  ----->
                  \ \ \ \ \/\__,  \/\ \___' \ \ \ \ \ \_\ \
                   \ \_\ \_\/\____/\ \____/\ \_\ \_\ \_____\
                    \/_/\/_/\/___/  \/___/  \/_/\/_/\/_____/

                  |             |             |     |
                  |     |       |     |       |     |      |
                  v     |       |     |       v     |      |
                        |       v     |             |      |
                        v             |             |      v
                                      v             v
        (\_/)
        (O.o) ASCII world domination is near!
        (> <)
```

## SYNOPSIS

```
        $> perl asciio.pl
```

## DESCRIPTION

It has always been painful to do ASCII diagrams by hand. This perl application allows  you to draw ASCII diagrams in a modern (but simple) graphical interface.

The ASCII graphs can be saved as ASCII or in a format that allows you to modify them later.

Special thanks go to the Muppet and the gtk-perl group, Gabor Szabo for his help and advices.

Adam Kennedy coined the cool name.

## DOCUMENTATION

### Asciio user interface

```
            .-----------------------------------------------------------------.
            |                             Asciio                              |
            |-----------------------------------------------------------------|
            | ............................................................... |
            | ..............-------------..------------..--------------...... |
            | .............| stencils  > || asciio   > || box          |..... |
            | .............| Rulers    > || computer > || text         |..... |
            | .............| File      > || people   > || wirl_arrow   |..... |
     grid---------->.......'-------------'| divers   > || axis         |..... |
            | ......................^.....'------------'| boxes      > |..... |
            | ......................|...................| rulers     > |..... |
            | ......................|...................'--------------'..... |
            | ......................|........................................ |
            | ......................|........................................ |
            | ......................|........................................ |
            | ......................|........................................ |
            '-----------------------|-----------------------------------------'
                                    |
                                    |
                              context menu
```

Press 'F1' for help.

### context menu

The context menu allows one to access to **Asciio** commands.

### keyboard shortcuts

All the keyboard commands definitions can be found under *asciio/setup/actions/*. Among the commands implemented are:

- •

  select all

- •

  delete

- •

  undo

- •

  group/ungroup

- •

  open / save

- •

  local clipboard operations

- •

  send to front/back

- •

  insert arrow, boxes, text

- •

  ...

The available commands are displayed if you press **K**.

### elements

There are a few elements implemented at the moment.

*wirl arrow*

An arrow that tries to do what you want. Try rotating the end clockwise then counter clockwise to see how it acts

```
               ^
               |
               |    --------.
               |            |
               '-------     |
                            |
 O-------------X     /      |
                    /       |
                   /        |
                  /         v
                 /
                /
               v
```

*multi section wirl arrow*

A set of whirl arrows connected to each other

```
 .----------.                       .
 |          |                \     / \
    .-------'           ^     \   /   \
    |                    \     \ /     \
    |   .----------->     \     '       .
    |   '----.             \           /
    |        |              \         /
    '--------'               '-------'
```

*angled arrow and axis*

```
   -------.         .-------
           \       /
            \     /
             \   /

             /   \
            /     \
           /       \
    ------'         '-------

          ^
     ^    |    ^
      \   |   /
       \  |  /
        \ | /
 <-------- -------->
        / |\
       /  | \
      /   |  \
     v    |   v
          v
```

*box and text*

```
                 .----------.
                 |  title   |
  .----------.   |----------|   ************
  |          |   | body 1   |   *          *
  '----------'   | body 2   |   ************
                 '----------'
                                             anything in a box
                                 (\_/)               |
         edit_me                 (O.o)  <------------'
                                 (> <)
```

You can also use the 'External commands in box' to direct an external command output to a box. Default shortcuts are 'x' and CTL + 'x'.

*"if" box and "process" box*

```
                        ____________
   .--------------.     \           \
  / a == b         \     \           \   __________
 (    &&            )     ) process   )  \         \
  \ 'string' ne '' /     /           /    ) process )
   '--------------'     /___________/    /_________/
```

*your own stencils*

Take a look at *setup/stencils/computer* for a stencil example. Stencils listed in *setup/setup.ini* will be loaded when **Asciio** starts.

*your own element type*

For simple elements, put your design in a box. That should cover 90% of anyone's needs. You can look in  *lib/stripes* for element implementation examples.

### exporting to ASCII

You can export to a file in ASCII format but using the **.txt** extension.

Exporting to the clipboard is done with **ctl + e**.

## EXAMPLES

```
           User code ^            ^ OS code
                      \          /
                       \        /
                        \      /
           User code <----Mode----->OS code
                        /      \
                       /        \
                      /          \
          User code  v            v OS code

             .---.  .---. .---.  .---.    .---.  .---.
    OS API   '---'  '---' '---'  '---'    '---'  '---'
               |      |     |      |        |      |
               v      v     |      v        |      v
             .------------. | .-----------. |  .-----.
             | Filesystem | | | Scheduler | |  | MMU |
             '------------' | '-----------' |  '-----'
                    |       |      |        |
                    v       |      |        v
                 .----.     |      |    .---------.
                 | IO |<----'      |    | Network |
                 '----'            |    '---------'
                    |              |         |
                    v              v         v
             .---------------------------------------.
             |                  HAL                  |
             '---------------------------------------'

                 .---------.  .---------.
                 | State 1 |  | State 2 |
                 '---------'  '---------'
                    ^   \         ^  \
                   /     \       /    \
                  /       \     /      \
                 /         \   /        \
                /           \ /          \
               /             v            v
            ******        ******        ******
            * T1 *        * T2 *        * T3 *
            ******        ******        ******
               ^             ^             /
                \             \           /
                 \             \         /
                  \             \       / stimuli
                   \             \     /
                    \             \   v
                     \         .---------.
                      '--------| State 3 |
                               '---------'

                                        .--Base::Class::Derived_A
                                       /
                                      .----Base::Class::Derived_B
      Something--------.             /         \
                        \           /           '---Base::Class::Derived::More
      Something::else    \         /             \
            \             \       /               '-Base::Class::Derived::Deeper
             \             \     /
              \             \   .-----------Base::Class::Derived_C
               \             \ /
                '-------Base::Class
                       /   \ \ \
                      '     \ \ \
                      |      \ \ '---The::Latest
                     /|       \ \      \
 With::Some::fantasy' '        \ \      '----The::Latest::Greatest
                     /|         \ \
         More::Stuff' '          \ '-I::Am::Running::Out::Of::Ideas
                     /|           \
         More::Stuff' '            \
                     /              '---Last::One
         More::Stuff'
   ____[]
  | ___ |
  ||   ||  device
  ||___||  loads
  | ooo |------------------------------------------------------------.
  | ooo |    |                          |                            |
  | ooo |    |                          |                            |
  '_____'    |                          |                            |
             |                          |                            |
             v                          v                            v
   .-------------------.  .---------------------------.    .-------------------.
   | Loadable module C |  |     Loadable module A     |    | Loadable module B |
   '-------------------'  |---------------------------|    |   (instrumented)  |
             |            |         .-----.           |    '-------------------'
             '--------------------->| A.o |           |              |
                 calls    |         '-----'           |              |
                          |    .------------------.   |              |
                          |    | A.instrumented.o |<-----------------'
                          |    '------------------'   |    calls
                          '---------------------------'
```

## DEPENDENCIES

gnome libraries, gtk, gtk-perl for the gtk version

## BUGS AND LIMITATIONS

Undoubtedly many as I wrote this as a fun little project where I used no design nor 'methodic' whatsoever.

## AUTHOR

```
        Khemir Nadim ibn Hamouda
        CPAN ID: NKH
        mailto:nadim@khemir.net
```

## LICENSE AND COPYRIGHT

This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

## SUPPORTED OSes

### Gentoo

I run gentoo, packages to install gtk-perl exist. Install Asciio with cpan.

### FreeBSD

FreeBSD users can now install asciio either by package:

$ pkg\_add -r asciio

or from source (out of the ports system) by:

$ cd /usr/ports/graphics/asciio $ make install clean

Thanks to Emanuel Haupt.

### Ubuntu and Debian

Ports are on the way.

### Windows

**Asciio** is part of the **camelbox** distribution and can be found here: \<http://code.google.com/p/camelbox/\>. Install, run AsciiO from the 'bin' directory.

```
      .-------------------------------.
     /                               /|
    /     camelbox for win32        / |
   /                               /  |
  /                               /   |
 .-------------------------------.    |
 |  ______\\_,                   |    |
 | (_. _ o_ _/                   |    |
 |  '-' \_. /                    |    |
 |      /  /                     |    |
 |     /  /    .--.  .--.        |    |
 |    (  (    / '' \/ '' \   "   |    |
 |     \  \_.'            \   )  |    |
 |     ||               _  './   |    |
 |      |\   \     ___.'\  /     |    |
 |        '-./   .'    \ |/      |    |
 |           \| /       )|\      |    |
 |            |/       // \\     |    .
 |            |\    __//   \\__  |   /
 |           //\\  /__/  mrf\__| |  /
 |       .--_/  \_--.            | /
 |      /__/      \__\           |/
 '-------------------------------'
```

**camelbox** is a great distribution for windows. I hope it will merge with X-berry series of Perl distributions.

## Mac OsX

This works too (and I have screenshots to prove it :). I don't own a mac and the mac user hasn't send me how to do it yet.

## other unices

YMMV, install gtk-perl and AsciiO from cpan.

## SEE ALSO

```
        http://www.jave.de
        http://search.cpan.org/~osfameron/Text-JavE-0.0.2/JavE.pm
        http://ditaa.sourceforge.net/
        http://www.codeproject.com/KB/macros/codeplotter.aspx
        http://search.cpan.org/~jpierce/Text-FIGlet-1.06/FIGlet.pm
        http://www.fossildraw.com/?gclid=CLanxZXxoJECFRYYEAodnBS8Dg (doesn't always respond)

        http://www.ascii-art.de (used some entries as base for the network stencil)
        http://c2.com/cgi/wiki?UmlAsciiArt
        http://www.textfiles.com/art/
        http://www2.b3ta.com/_bunny/texbunny.gif

     *\o_               _o/*
      /  *             *  \
     <\       *\o/*       />
                )
         o/*   / >    *\o
         <\            />
 __o     */\          /\*     o__
 * />                        <\ *
  /\*    __o_       _o__     */\
        * /  *     *  \ *
         <\           />
              *\o/*
 ejm97        __)__
```
