Scroll to navigation

App::Asciio(3pm) User Contributed Perl Documentation App::Asciio(3pm)

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        __)__
2017-11-07 perl v5.26.1