I've been teaching Yan basic operations with tuples,
and we wrote simple demo-app for that.
Since it's was education purpose app, the source is highly commented
and I thought that one who just started to study subject
might be interested in such a source.
So here it is, since I don't have any "web home page" - I submit
it here. You are wellcome to place it whatwhere you want.

How does it work, here is two listboxes and a way to fill and edit
items in them. They represented by logic two tables of relative
database linked in a way "one to many", by disign it's done as
linked lists.
Selecting items in left one (node list) you can fill and edit items
in right one (point list) that will be associated as list on items of group
(selected item on the left).
Node list box doesn't allow empty strings for group names,
point list box allows empty string (wich represent abcense of any
item from the group in some current tuple) but only one, and
it always set at a top of the list if present.
Create groups, selecting them - fill then words accociated with each one,
then press "Enum cartages" button to enum all tuples.
You can choose 1 one four implemented ways to enum them.
Example from real coder life.
We all know that modrm + modrm ext part of code can consist up to
3 logical blocks modrm,sib,displacement.
Let's try the app with enum all possible tuples of those blocks.
Create groups modrm,sib,displacement.
Select modrm and fill left list box with just one entry "modrm",
no empty strings here since modrm byte is always present in opcodes
with modrm.
Select sib group. Fill it with "sib" and since there might be absence of sib
also - fill the group with empty string.
Select displacement group, there might be disp8,disp32 or no disp at all,
so fill the group with "disp8","disp32", and empty string.
Now press "Enum cartages". You can see now all possible constructions
of modrm and modrm extention blocks.
You may also want to see for example all possible construction with modrm
and imm. operand.
So add one more group - immeadiate. And fill list of items in this group
with, for example, imm8,imm16,imm32 (no empty strings since if opcode
assumes using imm. this block can be absent)
Press "enum.." again - you can see a lot more constructions now :)

It wasn't made as a tool, so there wasn't done many nessesery things as
validations, strings limit (you may withouth warring include upto 1020/16
strings) etc. So take it easy if you'll find such a flaws that
inacceptable if it was a tool. It's just demo source.
Hope you can find some use of it.
Posted on 2004-07-20 09:40:34 by The Svin