4

I need the tool for graphical representing of work flow in a program (like electronic circuits are described with graphical representation). The representation has to be like the following: functions are boxes and arrows between boxes are "messages". Like this:

alt text http://img372.imageshack.us/img372/8471/functionsqv0.png

This picture shows the following: (c (a) (b))
Where parameters of c() are named as d and e. On C it would be

void c( someType1 d, someType2 e );
someType1 a( void );
someType2 b( void );
....
c( a(), b() );

So I think that I need the tool for manipulation and visual representation of s-expressions like these:

(a (b c d) e)  

or

f(g(z(x,y))+5)  

It is not about linked lists, it is about logical connections between functions.
The tool has only to generate the textual representation from graphical one.
Well, I've found a lot of stuff on the Wiki page about the "Visual programming" and "Graphical programming" and so on. Mostly all described tools are cool, but somewhat complicated. And the list is pretty long, so it would take a lot of time to test all of them. So I need an opinion of real, alive people.

Requirements are:

  • Free
  • Simple
  • Can export to at least one real language like XML or C++ or LISP or any other.

And it would be really good if this tool were configurable.

I like the FlowDesigner tool: it seems to be almost the thing I need, but it cannot export to any language... Alas.

UPD: The wiki page I mentioned: Graphical Programming
UPD2: well, I decided to write my own tool...

avp
  • 4,895
  • 4
  • 28
  • 40
  • provide a link to the "the Wiki page", I am interested – Mark Stock Dec 02 '08 at 17:57
  • I am studying Lisp. The second S-expr you provide contains "x,y" which I find curious because of the comma. Lisp usually uses whitespace like in your first S-expr. – Mark Stock Dec 02 '08 at 18:00
  • I don't get it. The answer seems to be "a keyboard" and "a screen". – Svante Dec 02 '08 at 22:30
  • 2Mark Stock: it's just a different syntax for (f (+ (g (z x y)) 5)). It's not too special or interesting. 2Harleqin: well, why then electronic circuits are drawn with symbols but not represented in text form? I mean not the physical but logical stuff. – avp Dec 03 '08 at 09:28
  • I don't really understand your question. Would you like a tool where you can draw e.g. box-and-pointer diagrams (http://www.xcf.berkeley.edu/~jmacd/envdraw/node2.html)? – Jonas Dec 03 '08 at 14:12
  • 2Jonas: thank you for your question, I tried to clarify the question. – avp Dec 04 '08 at 09:24

5 Answers5

3

Check out Microsoft DSL Tools - http://msdn.microsoft.com/en-us/library/bb126259.aspx

It is a "designer generator" - allows you to define your own diagram format, specify shapes, arrows, colors, etc. and generates a designer for you that is able to edit such diagrams and export any textual artifacts about your diagram (e.g. XML or code).

Kirill Osenkov
  • 8,786
  • 2
  • 33
  • 37
  • Is there any working example? The solution seems to be kinda general for my task. – avp Dec 04 '08 at 10:20
  • Sorry, I just cannot get through these docs: it's an overwhelming volume and it seems to be a middle of some solution of some task (DSL)... – avp Dec 04 '08 at 10:50
  • This might be a better starting point: http://code.msdn.microsoft.com/DSLToolsLab – Kirill Osenkov Dec 06 '08 at 20:06
  • Gotta second this. DSL tools just rock. Difficult to get started, but once you start rolling... well... the fun never ends. – Dmitri Nesteruk Dec 07 '08 at 17:19
2

What about using something like Graphviz?

Tarnay Kálmán
  • 6,907
  • 5
  • 46
  • 57
leppie
  • 115,091
  • 17
  • 196
  • 297
2

Warning: Shameless plug

Seen Memention Designer?

It's built around a configurable engine and can output in almost any language.

But, I'm sorry. It's not really free.

alt text
(source: memention.com)

Above example exports following c-code, but could with some re-configuration generate some else language.

#include <stdio.h>

/* there are 8 blocks */
int running;
/* there are 1 out blocks */
int state_curr_1;
int state_next_1;

int main(int argc, char *argv[]) {
  running = 1;
  state_curr_1 = 0;
  while (running) {
    state_next_1 = (state_curr_1 + 19);
    running = (state_curr_1 != (19 * 12));
    state_curr_1 = state_next_1;
    printf("out = %d\n", state_curr_1);
  }
  return 0;
}
Glorfindel
  • 21,988
  • 13
  • 81
  • 109
epatel
  • 45,805
  • 17
  • 110
  • 144
1

What abou using the .net and WPF based library TUM.CMS.VPLControl?

enter image description here

vplmaster
  • 131
  • 1
  • 5
1

http://www.graphviz.org/

HTH

plan9assembler
  • 2,862
  • 1
  • 24
  • 13