Shadows aren't something you can influence about the native shape. Just colours and line thickness. However, using rectangle (0,0,100,100); Will effectively do the same thing.
Yes, you can use HasProperty("kind","input") or HasProperty("kind","output")
eg.
shape main
{
noshadow=true;
rectangle (0,0,100,100);
defSize (16,16);
if(hasproperty("parentedge","top"))
{
if(hasproperty("kind","input"))
{
addsubshape("down");
}
else
{
addsubshape("up");
}
}
if(hasproperty("parentedge","bottom"))
{
if(hasproperty("kind","input"))
{
addsubshape("up");
}
else
{
addsubshape("down");
}
}
if(hasproperty("parentedge","left"))
{
if(hasproperty("kind","input"))
{
addsubshape("right");
}
else
{
addsubshape("left");
}
}
if(hasproperty("parentedge","right"))
{
if(hasproperty("kind","input"))
{
addsubshape("left");
}
else
{
addsubshape("right");
}
}
shape up
{
print("^");
}
shape down
{
print("\/");
}
shape left
{
print("<");
}
shape right
{
print(">");
}
}